【Java笔记】引用类型的参数传值

Java的引用型数据有:

1.对象
2.数组

3.接口

当参数是引用类型时,“传值”传递的是变量中存放的“引用”,而不是变量所引用的实体。

例:

Circle.java

public class Circle {
	double radius;
	Circle(double r)   //构造函数
	{
		radius=r;
	}
	double getArea()    //计算面积
	{     
		return 3.14*radius*radius;
	}
	void setRadius(double r)   //给半径赋值
	{
		radius=r;
	}
	double getRadius()     //得到半径
	{
		return radius;
	}

}

Circular.java

public class Circular {
	Circle bottom;        //底圆对象
	double height;
	Circular(Circle c,double h)
	{
		bottom=c;
		height=h;
	}
	double getVolme()    //圆锥体积
	{
		return bottom.getArea()*height/3.0;
	}
	double getBottomRadius()      //获取底圆半径
	{
		return bottom.getRadius();
	}
	public void setBottomRadius(double r)
	{
		bottom.setRadius(r);
	}
}

Initial.java

public class Initial {
	public static void main(String[] args) {
		Circle circle=new Circle(10);
		Circular circular=new Circular(circle,20);
		
		System.out.println("main方法中circle的引用:"+circle);
		System.out.println("circular中的bottom的引用:"+circular.bottom);
		System.out.println("main中的circular的引用:"+circular);
		
		System.out.println();
		
		System.out.println("圆锥的底面半径:"+circle.radius);
		System.out.println("圆锥的底面半径:"+circle.getRadius());
		System.out.println("圆锥的底面半径:"+circular.getBottomRadius());
		
		System.out.println();
		
		System.out.println("圆锥的而体积:"+circular.getVolme());
		
		System.out.println();
		
		double r=8888;
		System.out.println("更改圆锥底面半径为:"+r);
		circular.setBottomRadius(r);
		System.out.println("更改后的底面半径:"+circular.getBottomRadius());
		System.out.println("更改后的底面半径为:"+circle.radius);
		System.out.println("更改后的底面半径:"+circle.getRadius());
		
		System.out.println("更改后的圆锥体积:"+circular.getVolme());
		
		System.out.println("更改后的circle引用:"+circle);
		System.out.println("更改后的bottom引用:"+circular.bottom);
		System.out.println("更改后的circular引用:"+circular);
		
		System.out.println();
		circle=new Circle(100);
		System.out.println("第三次circle的引用:"+circle);
		System.out.println("第三次bottom的引用:"+circular.bottom);
		System.out.println("第三次circular的引用:"+circular);
		
		System.out.println("底面半径:"+circle.radius);
		System.out.println("底面半径:"+circle.getRadius());
		System.out.println("底面半径:"+circular.getBottomRadius());
	}
}



1.执行代码1后内存中的对象模型

执行代码1:

Circle circle=new Circle(10);

后,内存中产生了一个circle对象,内存中对象的模型如下图所示:

   circle


2.执行代码2后内存中的对象模型

执行代码2:

Circular circular=new Circular(circle,20);

后,内存中产生了一个circular的对象。执行代码2将circle对象的引用以“传值”方式传递给circular对象的bottom,因此,circular对象的bottom和circle对象就有同样的实体(radius)。内存中对象的模型如下图所示:



3.执行代码3后内存中的对象模型

对于两个同类型的引用型变量,如果具有同样的引用,就会用同样的实体,因此,如果改变参数变量所引用的实体,就会导致原变量的实体产生同样的变化。

执行代码3:

circular.setBottomRadius(r);

使得circular的bottom和circle的实体(radius)发生了同样的变化,如下图所示:


4.执行代码4后内存中的对象模型

执行代码4:

circle=new Circle(100);

使得circle的引用发生变化,重新创建了circle对象,即circle对象将获得新的实体(circle对象的radius的值是100),但circle先前的实体不被释放,因为这些实体还是circular的bottom的实体。最终circle对象的引用是以“传值”方式传递给circular对象的bottom的,所以,circle的引用发生变化并不影响circular的bottom的引用(bottom对象的radius的值仍是8888).对象模型如下图所示:



运行结果:








(整理自Java面向对象程序设计第2版)








  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java笔记是由北京大学青鸟教育推出的一款专门针对Java语言的学习工具。它以全面、系统、践为特点,通过详细的代码示例和清晰的讲解,帮助学习者全面掌握Java编程语言。 Java笔记采用了线上与线下相结合的学习模式。学员可以通过手机、平板电脑、电脑等设备在线学习,还可以在学习过程记录自己的学习笔记。同,北大青鸟还为学员提供线下践环境,学员可以在验室里亲自动手践所学知识,加深理解和应用。 Java笔记的内容非常全面,包括了Java语言的基本语法、面向对象编程、异常处理、流操作、多线程、数据库操作等众多知识点。除了理论知识,Java笔记还提供了大量的例代码,可供学员参考和模仿。这样的学习方式既帮助学员理解Java的基本概念,又能让他们运用所学知识解决际问题。 与此同Java笔记还注重学员的互动交流。在学习过程,学员可以利用笔记功能记录学习心得和疑惑,还可以在论坛上与其他学员进行讨论和交流。这种互动形式既能促进学员之间的学习互助,也能更好地帮助学员理解和应用所学知识。 总之,Java笔记是北大青鸟推出的一款专注于Java语言学习的工具,通过系统的课程设置、丰富的例代码和互动交流的方式,帮助学员全面掌握Java编程知识,提升编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值