类的成员:方法(method)(三)
形参和实参
形参(formal parameter):在定义方法时,方法名后面括号()中声明的变量称为形式参数,简称形参。
实参(actual parameter):在调用方法时,方法名后面括号()中的使用的值/变量/表达式称为实际参数,简称实参。
参数传递机制:值传递
Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
举例
形参是基本数据类型
案例:编写方法,交换两个整型变量的值
public static void main(String[] args) { SwapTest st = new SwapTest(); int m = 1, n = 2; st.swap(m, n); System.out.println("m = " + m + ", n = " + n); } public void swap(int m, int n) { int temp = m; m = n; n = temp; }
输出变量未发生交换;
内存解析:
形参是引用数据类型
public class SwapTest { public static void main(String[] args) { SwapTest st = new SwapTest(); Date d = new Date(); int m = 1, n = 2; st.swap(m, n); System.out.println("使用方法 进行交换m = " + m + ", n = " + n); m = 1; n = 2; int temp = m; m = n; n = temp; System.out.println("直接进行 进行交换m = " + m + ", n = " + n); d.m = 100; d.n = 20; st.swap(d); System.out.println(d.m + "----" + d.n); } public void swap(int m, int n) { int temp = m; m = n; n = temp; } public void swap(Date date) { int temp = date.m; date.m = date.n; date.n = temp; } } class Date { int n; int m; }
内存解析
练习
public class TestTransValue { public static void main(String[] args) { TestTransValue tt = new TestTransValue(); int a = 10, b = 10; tt.method1(a, b); //需要在 method 调用后,仅输出 a = 100,b = 200,请实现 method 方法逻辑 System.out.println("a = " + a); System.out.println("b = " + b); } /** * 直接输出后,退出程序 * * @param a * @param b */ public void method(int a, int b) { System.out.println("a = " + a * 10 + " b = " + b * 20); System.exit(0); } /** * 重新 println方法实现 * * @param a * @param b */ public void method1(int a, int b) { PrintStream printStream = new PrintStream(System.out) { @Override public void println(String x) { if ("a = 10".equals(x)) { x = "a = 100"; } else if ("b = 10".equals(x)) { x = "b = 200"; } super.println(x); } }; System.setOut(printStream); } }