java引用类型参数传值的两个很好的例子

java引用类型数据包括数组,接口,等等,当参数是引用类型时,“传值”传递的是变量中存放是“引用”,儿不是变量所引用的实体,下面有两个个很好的例子:
例子1:
首先写一个电池类,和收音机类

package Example1;
//电池类
public class Battery {
    int electicityAmount;
    public Battery(int amount) {
        electicityAmount = amount;
    }
}
package Example1;
//收音机类
public class Radio {
    void openRadio(Battery battery){
        battery.electicityAmount = battery.electicityAmount - 10;
    }
}

主函数:

package Example1;

public class Example1 {
    public static void main(String args[]){
        Battery battery = new Battery(100);
        System.out.println("电池的存储电量是:" + battery.electicityAmount);
        Radio radio = new Radio();
        System.out.println("收音机开始使用电池");
        radio.openRadio(battery);
        System.out.println("收音机使用后的电量为:" + battery.electicityAmount);
    }
}

下面是调试结果:
电池的存储电量是:100
收音机开始使用电池
收音机使用后的电量为:90

例子2
Circle类

package Example2;

public class Circle {
    /**
     * 定义半径,面积
     */
    double radius,area;
    /**
     * 构造方法
     * @param r
     */
    Circle(double r) {
        radius = r;
    }
    /**
     * 修改半径
     * @param r
     */

    void setRadius(double r){
        radius = r;
    }

    /**
     * 获得半径
     * @return
     */
    double getRadius(){
        return radius;
    }

    /**
     * 求面积方法
     */
    double getArea(){
        area = 3.14 * radius * radius;
        return area;
    }
}

Circular 类

package Example2;

public class Circular {
    Circle bottom;
    double heght;
    /**
     * 构造方法
     */
    Circular(Circle c,double h) {
        bottom = c;
        heght = h;
    }
    /**
     * 圆锥体积
     * @return
     */
    double getVolme(){
        return bottom.getArea()*heght/3.0;
    }
    /**
     * 获得圆锥底部的半径
     */
    double getBottonRadius(){
        return bottom.getRadius();
    }
    /**
     * 修改圆锥底部的半径
     */
    public void setBottomRadius(double r){
        bottom.setRadius(r);
    }
}

主函数:

package Example2;

public class Example {
    public static void main(String args[]){
        Circle circle = new Circle(20);
        System.out.println("main方法中circle的引用" + circle);
        System.out.println("main方法中circle的半径" + circle.getRadius());
        Circular circular = new Circular(circle, 20.0);
        System.out.println("circular圆锥中bottom的引用" + circular.bottom);
        System.out.println("circular圆锥的半径" + circular.getBottonRadius());
        System.out.println("circular圆锥的体积:" + circular.getVolme());
        double r =100;
        System.out.println("圆锥更改底部圆Bottom的半径:" + r);
        circular.setBottomRadius(r);
        System.out.println("圆锥的buttom的半径:" + circular.getBottonRadius());
        System.out.println("圆锥的buttom的体积:" + circular.getVolme());
        System.out.println("main方法中circle的半径:" + circle.getRadius());
        System.out.println("修改后main方法中circle的引用" + circle);
        System.out.println("修改后Circular方法中button的引用" + circular.bottom);

    }
}

调试结果:
main方法中circle的引用Example2.Circle@659e0bfd
main方法中circle的半径20.0
circular圆锥中bottom的引用Example2.Circle@659e0bfd
circular圆锥的半径20.0
circular圆锥的体积:8373.333333333334
圆锥更改底部圆Bottom的半径:100.0
圆锥的buttom的半径:100.0
圆锥的buttom的体积:209333.33333333334
main方法中circle的半径:100.0
修改后main方法中circle的引用Example2.Circle@659e0bfd
修改后Circular方法中button的引用Example2.Circle@659e0bfd

Java中,引用类型参数传值是一种非常重要的概念,可以帮助我们更好地理解Java中的内存模型和数据传递方式。下面是引用类型参数传值的过程及内存中的变化情况的详细说明: 1. 当我们在方法中传递一个引用类型参数时,实际上是将该引用类型变量的值(即对象的内存地址)复制一份传递给了方法。 2. 在方法内部,该引用类型变量的副本也指向了同一个对象。因此,如果在方法内部修改了该对象的状态或者属性,那么在方法外部也能够看到这些修改。 3. 由于引用类型参数传递是传递的对象的内存地址,因此在传递过程中并不会创建新的对象或者拷贝对象的内容。这也意味着,如果在方法内部创建了一个新的对象并将引用类型变量指向了该对象,那么在方法外部是无法看到这个新对象的。 4. 在Java中,对象的内存分配是在堆上完成的。因此,当我们传递一个引用类型参数时,实际上是将对象的内存地址(即该对象在堆上的地址)复制一份传递给了方法。 5. 在方法内部对于对象的操作会改变堆上的该对象的内容,而在方法外部对于该对象的操作也会改变堆上的该对象的内容。 6. 当方法执行完毕后,方法中创建的局部变量和对象的引用都会被销毁,但是堆上的对象本身并不会被销毁,只有在该对象没有任何引用指向时,才会由Java的垃圾回收机制自动回收。 总之,引用类型参数传值是一种非常重要的概念,在Java中非常常见。理解该概念可以帮助我们更好地理解Java中的内存模型和数据传递方式,从而编写更加高效和优雅的Java程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值