类的成员:方法(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);
    }
}
复制代码
posted @   晓枫的春天  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
历史上的今天:
2022-05-07 CentOS7 修改环境变量后导致命令失效
2020-05-07 Jedis 连接 Redis
点击右上角即可分享
微信分享提示