Java整理笔记之引用类型的参数传值
来源:互联网 发布:mac多余账户删不了 编辑:程序博客网 时间:2024/05/21 15:49
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:
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版)
- Java整理笔记之引用类型的参数传值
- Java引用类型参数的传值
- java 引用类型整理
- 引用类型参数的传值
- 引用类型参数的传值
- 引用类型参数的传值
- java形式参数的引用类型
- Java学习笔记之引用类型
- java引用类型参数传值的两个很好的例子
- 面试之路(18)-java的函数参数传递类型之值传递还是引用传递
- C#之引用类型参数
- 引用类型参数的按值传递
- 传递引用类型的参数
- Java中的原生数据类型和引用类型的参数传递
- Java中的原生数据类型和引用类型的参数传递
- 形式参数是引用类型的时候 返回值类型是引用类型的时候
- C#笔记之值类型和引用类型
- 【黑马程序员】C#笔记之值类型和引用类型
- 网页鼠标指针样式(cursor属性)
- 单选和复选按钮的OnCheckedChangeListener事件报错处理
- 周中训练笔记6——西安站网络赛&青岛站网络赛
- SQL的聚合与排序
- Windows 10和Ubuntu 16.0.4双系统时间错误调整
- Java整理笔记之引用类型的参数传值
- POJ2485 Highways
- C语言小程序4--致新手
- Python时间处理之time模块
- 广播开线程为什么不可取
- 吴恩达讲解:经典部分-逻辑回归-反向传播算法
- 排序二叉树,平衡二叉树和红黑树的概念以及相关的操作讲解
- 15存储过程
- [bzoj 3231--SDOI2008]递归数列