7.方法的参数传递
(学完方法的参数传递之后要求能够理解方法的参数传递过程中基本类型和引用的区别)
7.1方法参数传递(基本类型)
看这里,有一个类在这个类中有两个方法main方法和change方法main方法一进来定义了一个int类型的变量它的值是100,接着输出这个变量的值此处syso是System.out.println的缩写方式,也就是说看到syso就是代表System.out,println。调用change(number)方法就会走到public static void change(int number){ }这里来public static void change(int number)中的形参 number就会接收方法调用中change中的实参(number),一开始实参number的值是100,那么public static void change(int number){ }中的形参number的值也是100,接着进来之后修改了number的值为200,然后change方法就结束了,那么调用完毕之后往下执行输出number的值为200.
那么在main方法中输出number调用方法后的值是100还是200呢?来详细看一下这段代码的执行流程
看这里
我们的代码是从main方法中开始执行,所以首先我们从main方法开始那么一开始就会把main方法加载到栈内存,接着进入main里面,里面有个int number = 100;那么在栈内存中也会出现int number = 100;接着往下执行,输出变量 number,number的值是100,所以这一次在控制台输出number的值 100.
输出完成之后,调用change方法,调用change方法也会加载到栈内存之中,接着调用change方法就会走到change方法之中,它的形参有一个int number,在栈内存中的change方法中也会出现一个int number,儿change中的number值也是由实参给他的,这个实参number一开始的值是100,所以change中的形参number一开始的初始值也是100,
进到change方法之后,修改了number的值是200,那么在栈内存中change方法中修改了number的值为200,修改值后change方法中number的值确实为200,
但是main方法中number的值还是100,所以
对于基本数据类型的参数,形式参数的改变,不影响实际参数的值
修改change方法中形参number的值为200后,紧接着往下执行,这个change方法就调用完毕了,调用完毕之后change方法立即从栈内存消失
接着返回main方法中的方法调用接着往下执行,输出number的值,而这次在调用change方法之后number的值还是100,所以再次输出的时候它的值也是100.
输出完毕之后再往下执行,main方法中的代码也执行完毕了,main方法执行完毕也要从栈内存中消失。
学完之后我们到代码中演示一下:
/*
* 方法参数传递(基本类型)
* */
//1.首先创建了一个类
public class MethodDemo5 {
//2.创建了一个main方法,main方法是程序的入口,没有main方法程序无法执行
public static void main(String[] args) {
//3.在main方法中定义了一个变量,将100赋值给变量number
int number = 100;
//4.输出number的值
System.out.println("调用方法前number的值为:" + number);//100
//7.使用方法调用来接收休该过后的值
change(number);//此处的number为实参,不受形参值改变的影响
//8.输出方法调用后number的值
System.out.println("调用方法后number的值为:" + number);
/*还是为100,因为number值为200只在方法中生效不在方法外生效
也就是说对于基本数据类型的参数,形参的改变,不影响实参的值
*/
}
//5.定义一个方法用于修改number的值
public static void change(int number){//此时number是形参的值为100
//6.修改number的值为200
number = 200;//此处只是修改了形参number的值并不影响实参,也就是说只在方法内生效
}
}