方法加强练习
此需求和代码在文章最下面。
1、方法参数传递
1.1 什么是方法参数传递
概念:在使用方法的时候,传入值或者变量就是参数传递。
1.2 参数传递的本质:
Java的参数传递:
基本数据类型传递的是:值本身。
引用数据类型传递的是:变量在堆中的引用地址。
1.3 值传递
/**
* 堆栈分析:
* 基本类型是"值"的传递
* 引用类型是引用地址的传递
*/
public class _04StackHeap {
public static void main(String[] args) {
int a = 1;
System.out.println("改变前:" + a); // 1
// 调用change方法
change(a);
System.out.println("改变后================ :" + a); // 1
}
public static void change(int a) {
a = 2;
System.out.println("改变中-------:" + a); // 2
}
}
内存分析图:
1.4 引用地址传递
/**
* 堆栈分析:
* 基本类型是"值"的传递
* 引用类型是引用地址的传递
*/
public class _05StackHeap {
public static void main(String[] args) {
int[] arr = {1, 2};
System.out.println("改变前:" + arr[0]);// 1
System.out.println("改变前:" + arr[1]);// 2
// 调用change方法
change(arr);
System.out.println("改变后================ :" + arr[0]);// 6
System.out.println("改变后================ :" + arr[1]);// 9
}
public static void change(int[] arr) {
arr[0] = 6;
arr[1] = 9;
System.out.println("改变中-------:" + arr[0]);// 6
System.out.println("改变中-------:" + arr[1]);// 9
}
}
内存分析图:
2. 可变参数
大家先来看几个需求
需求:求2个int变量的和,并且返回,设计一个方法实现
/**
* 求变量a和b的和
* @param a int参数
* @param b int参数
* @return 返回和
*/
public static int getSum(int a, int b) {
return a + b;
}
需求:求3个int变量的和,并且返回,设计一个方法实现
/**
* 求变量a、b、c的和
* @param a int参数
* @param b int参数
* @param c int参数
* @return 返回和
*/
public static int getSum(int a, int b, int c) {
return a + b + c;
}
大家可以看到,求和的需求是类似的,如果这样的需求有很多,按照我们之前的处理的方式就是要声明很多对应的方法处理。这样的话会有代码重复、可读性不好、并且程序员需要花时间去记忆等缺点,所以我们要用数组优化代码。
public class _03ChangeMethod {
public static void main(String[] args) {
// 需求:求2个int变量的和,并且返回,设计一个方法实现
// 需求:求3个int变量的和,并且返回,设计一个方法实现
// 调用getSum(int[] arr) 方法
int[] arr;
arr = new int[]{1, 2};
// 求3个int参数的和,现在参数就相当于是一个静态创建的数组
int sum2 = getSum(new int[]{1, 2, 3});
System.out.println(sum2);
// 求4个int参数的和,现在参数就相当于是一个静态创建的数组
int sum3 = getSum(new int[]{1, 2, 3, 69});
System.out.println(sum3);
}
/**
* 求int[]所有元素的和
* @param arr int[]参数
* @return 返回和
*/
public static int getSum(int[] arr) {
int sum = 0;
for (int e : arr) {
sum += e;
}
return sum;
}
}