文章目录
方法概述
什么是方法
方法(method)完成某一个特定功能的代码块
方法基本使用
-
抽取代码
public static void fire() { System.out.println("准备发射5发炮弹"); System.out.println("发射第1发炮弹* * * *"); System.out.println("发射第2发炮弹* * * *"); System.out.println("发射第3发炮弹* * * *"); System.out.println("发射第4发炮弹* * * *"); System.out.println("发射第5发炮弹* * * *"); System.out.println("发射5发炮弹结束"); }
-
在main方法中调用
public static void main(String[] args) { System.out.println("游戏开始..."); System.out.println("看到了一个怪物...血牙野猪..."); //调用方法,发射炮弹 fire(); System.out.println("...血牙野猪被打倒..."); }
-
调用格式
方法名(参数列表);
- 注意
- 方法必须先创建才可以使用,该过程称为方法定义
- 方法创建后并不是直接可以运行的,需要手动使用后,才执行,该过程成为方法调用
方法调用过程图解
定义方法格式
修饰符 返回值类型 方法名(参数列表) {
// 代码块...
return 结果;
}
- 修饰符: public static等
- 返回值类型:表示方法运行结果的数据类型,方法执行后将结果返回到调用者
- 参数列表:方法在运算过程中的未知数据,调用者调用方法时传递
- **return:将方法执行后的结果带给调用者,方法执行到return,整体方法运行结束
小贴士:return 结束; 这里的结束在开发中,我们正确的叫法成为方法的返回值
定义方法的两个明确
-
明确参数列表
该方法在完成一个功能时,需要的参数有几个,参数的类型是什么,需要在我们明确给出的。
-
明确返回值类型
方法的功能完成之后,是否有结果返回,如果有,使用return 将结果返回给调用者。没有返回值void
方法小结
定义方法注意事项
- 定义位置:类中方法外,不能嵌套定义
- 方法必须先定义,再使用
- void表示无返回值,不需要书写return
- 不能在return后面写代码,return意味着方法结束,所有后面的代码记永远都不会执行,属于无效代码
- 定义方法时()中的参数,我们称之为:形式参数,在调用该方法时传递的参数,我们称之为:实际参数
- 你可以不接收返回的值,但你必须给出参数
调用方法三种形式
- 直接调用:直接写方法名调用
- 赋值调用:调用方法,在方法前面定义变量,接受方法返回值
- 输出语句调用:在输出语句中调用方法
- 注意事项:不能用输出语句调用void无返回值类型的方法。因为方法执行后没有结果,也就打印不出任何内容
方法重载
方法重载概述
在同一个类中,具有相同的方法名, 参数列表不同(参数的个数及类型不同及顺序不同),与返回值无关
参数列表:个数不同,数据类型不同,顺序不同。
重载方法调用:JVM通过方法的参数列表,调用不同的方法。
- 注意事项
重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式
重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载
方法的参数传递
方法参数传递基本类型
public class ArgsDemo02 {
public static void main(String[] args) {
int[] arr = {10, 20, 30};
System.out.println("调用change方法前:" + arr[1]);//20
change(arr);
System.out.println("调用change方法后:" + arr[1]);//200
}
public static void change(int[] arr) {
arr[1] = 200;
}
}
- 结论
基本数据类型的参数,形式参数的改变,不影响实际参数
- 结论依据
每个方法在栈内存中,都会有独立的栈空间,方法运行结束后就会弹栈消失
方法参数传递引用类型
public class ArgsDemo02 {
public static void main(String[] args) {
int[] arr = {10, 20, 30};
System.out.println("调用change方法前:" + arr[1]);//20
change(arr);
System.out.println("调用change方法后:" + arr[1]);//200
}
public static void change(int[] arr) {
arr[1] = 200;
}
}
-
结论
对于引用类型的参数,形式参数的改变,影响实际参数的值
-
结论依据
引用数据类型的传参,传入的是地址值,内存中会造成两个引用指向同一个内存的效果,所以即使方法弹栈,堆内存中的数据也已经是改变后的结果