类的成员:方法(method)(三)

发布时间 2023-05-07 09:01:33作者: 晓枫的春天

形参和实参

形参(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);
    }
}