方法
定义:修饰符 返回类型 方法名(参数列表)异常抛出类型{方法体}
1.定义
1.1.修饰符
public、static、abstract、final等等都是修饰符。可以有多个修饰符
1.2.返回类型
当方法执行完如果需要给调用者返回数据,需要给定返回数据的类型,没有返回的数据就必须写void,有标明返回类型的方法必须在结束处出现return
语句
只有构造方法(构造器)不写任何返回类型也不写void
return的作用
1.终止一个函数的执行
2.向调用该函数的语句返回一个数据
3.如果return后面不数据,既返回空,目的是中断函数执行,返回调用函数处
break作用
1.在循环体内,强行结束循环的执行
2.在switch体内,跳出该switch语句体
1.3.方法名
函数的标识符,用于调用该函数,命名规则遵守java中标示符即可
1.4.参数列表
根据实际需求定义,可以有多个参数
1.5.异常抛出类型
方法在执行过程中,可能会出现一些异常的情况,当遇到这些情况,在方法上这些声明的异常既会被抛出,也可以声明抛出多个异常,使用逗号隔开即可。
public static int[] readIntArr(int[] arr)throws ArrayIndexOutOfBoundsException{}
public void readFile(String file) throws IOException,ClassNotFoundException{}
2.调用
2.1.非静态方法
没有使用static修饰符修饰的方法,调用这种方法的时候,是"一定"要使用对象的调用。因为非静态方法是属于对象的(非静态属性也是一样的)
public class Student{
public int a = 10;
public void say(){
System.out.println("hello!!");
}
}
Student s = new Student();
s.say();
s.a;
2.2.静态方法
使用static修饰符修饰的方法,这种方法的时候,"可以"使用对象调用,也"可以"使用类来调用,但是推荐使用类进行调用。因为静态成员是属于类的(静态属性也是一样的),比非静态成员早加载
public class Student{
public static int a = 10;
public static void say(){
System.out.println("hello!!");
}
}
Student.say();
Student.a();
2.3.类中方法之间的调用
同一个类中,都是非静态方法,可以用方法名去调用方法。如果都是静态方法,相互之间也可以直接调用。
如果两个方法中有一方是静态方法,另一方为非静态方法,那么静态方法不能调用非静态方法
public static num = 10;
public age = 30;
public void a(){b();}
public void b(){}
public static void c(){d();}
public static void d(){}
//静态方法不能调用非静态方法
//public static void e(){a();}
//非静态方法能调用静态方法
public void e(){c();}
public static f(){
//System.out.println(age);会报错
}
在同一个类中,静态方法内不能直接访问到类中的非静态属性
3.方法的传参
3.1.形参和实参
public static void main(String[] args){
int a = 1;
int b = 3;
add(a,b);
}
public static int add(int a, int b){
return a+b;
}
函数add()上的参数a、b是add()函数的形参,main()函数体内的a、b是传递给add()函数的实参
3.2.值传递和引用传递
public class Student(){
String name;
}
public class Test(){
public static void main(String[] args){
Student s = new Student();
System.out.println(s.name);//null
changeName(s);
System.out.println(s.name);//Tom
int a = 50;
System.out.println(a);//50
changeNum(a;
System.out.println(a);//50
}
public static void changeName(Student s){
s.name = "Tom";
}
public static void changeNum(int num){
num = 10;
}
}
在程序中调用方法传递参数分两种情况,一个是值传递,一个是引用传递
值传递,传的是基本数据类型,是把变量本身存储的值赋值给形参。而引用传递,传的是引用数据类型,是把变量本身存的对象内存地址值赋值给形参。两者是有区别的,后者是可以根据内存地址改变对象里面的属性值