一、方法运行到销毁的过程
public class Method{
public static void main(String[] args){
eat();
}
public static void eat(){
study();
System.out.println("吃饭");
sleep();
}
public static void sleep(){
System.out.println("睡觉");
}
public static void study(){
System.out.println("学习");
}
}
在栈中方法以先进后出的规则存储
程序开始时存储方法:main() => eat() => study() => sleep()
输出结果:学习 - 吃饭 - 睡觉
当所有程序执行完毕后销毁方法: sleep() => study()=> eat() => main()
想象一把枪,子弹第一个放入弹匣的,打完所有子弹,而第一个放入弹匣的子弹是最后一个被打出的,这就是典型的先进后出的原则。
二、方法带参基本数据类型时运行的结果
public class Method{
public static void main(String[] args){
int num = 10;
System.out.println(num) // 打印结果10
run(num)
System.out.println(num) // 打印结果?10?20?
}
public static void run(int num){
num = 20;
}
}
请思考10秒,并在评论敲出你理想中的答案,并解释为什么会是它,最后再看答案。
这里的答案是:10,因为在方法中基础变量给的是真实的数据,不受参数赋值的影响。
如果想打印出 20 请看下面的代码修改。
public class Method{
public static void main(String[] args){
int num = 10;
System.out.println(num) // 打印结果10
num = run(num) // 赋值
System.out.println(num) // 打印结果 20
}
public static int run(int num){
int num1 = 20; // 申明变量赋值
return num1; // 这里需要返回num1的变量
}
}
三、方法带参引用数据类型时运行的结果
public class Method{
public static void main(String[] args){
int [] num = {1,2,3};
System.out.println(num[1]) // 打印结果2
run(num)
System.out.println(num[1]) // 打印结果20
}
public static void run(int [] num){
num[1] = 20;
}
}
仔细观看第二步和第三步的区别,引用数据类型,赋值的地址值,可以直接修改数组对应下标的值。