方法是指一段具有独立功能的代码块,只有被调用时才会执行
方法的主要作用体现在:
代码组织:将原本挤在一起的臃肿代码按照功能进行分类管理
- 例如:将用户注册的验证逻辑、数据库操作、结果返回等分离成不同方法
提高复用性:相同功能的代码只需编写一次,多处调用
- 例如:计算两个数最大值的方法可以在程序多个地方复用
方法的定义和调用
public static void 方法名() {// 方法体
}调用方式:方法名();
注意:
1.平级关系:方法之间是并列关系,不允许嵌套定义
错误示例:
public static void methodA() {public static void methodB() { // 不允许在方法内定义方法// ...}
}
2.调用执行:方法不调用就不会执行
即使定义了多个方法,如果没有调用它们,这些方法都不会执行
3.执行顺序:方法的定义顺序与执行顺序无关,执行顺序取决于调用顺序
方法的内存机制
方法在内存中的生命周期
- 未调用时:存放在方法区的字节码文件中
- 调用时:进入栈内存运行
- 执行完毕:从栈内存中退出
Java内存结构(部分)
方法区:存储加载的字节码(.class)文件
字节码文件是源代码编译后的结果,保留了原代码的结构
栈内存:方法运行时使用的内存区域
遵循"先进后出"的原则,方法调用形成调用栈
public static void main(String[] args) {System.out.println("开始");getMax();System.out.println("结束");
}public static void getMax() {int num1=10;int num2=20;int max = num1>num2?num1:num2;System.out.println(max);
}
代码执行流程详解
- main方法入栈:虚拟机自动调用main方法,main方法进入栈内存
- 打印"开始":执行第一条语句,控制台输出"开始"
- 调用getMax方法:
- getMax方法进入栈内存
- 执行getMax方法体:
- 定义变量num1=10, num2=20
- 计算最大值并存储在max变量中
- 打印最大值20到控制台
- getMax方法出栈:方法执行完毕,退出栈内存
- 继续执行main方法:打印"结束"
- main方法出栈:程序执行完成
带参数方法的定义和调用
public static void 方法名(数据类型 变量名) {// 方法体
}
// 多个参数:
public static void 方法名(数据类型 变量1, 数据类型 变量2, ...) {// 方法体
}调用方法:方法名(参数值)
参数类型
- 形参(形式参数):方法定义时声明的参数
- 实参(实际参数):方法调用时传入的具体值
带返回值的定义和调用
public static 返回的数据类型 方法名(数据类型 变量名,……){方法体; return 值}调用的方式:返回的数据类型 变量名 = 方法名(参数值)
方法通用定义格式
public static 返回值类型 方法名(数据类型 变量名,……){方法体;return 数据;
}
定义方法时,要做到两个明确:
明确参数:主要明确参数的类型和数量
明确返回值类型:主要时明确方法操作完毕后是否有结果数据,如果有,写对应的数据类型,如果没有,写void
方法的常见问题
1.方法不调用不执行
2.方法与方法之间是平级关系,不能嵌套定义
3.方法的编写顺序和执行顺序无关
4.方法的返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写,如果要写return,后面不能跟具体的数据
5.return语句下面,不能编写代码,因为永远执行不到,属于无效代码x