持有当前类的实例和重载问题解析
来源:互联网 发布:mac mount samba 编辑:程序博客网 时间:2024/05/24 15:41
持有当前类的实例和重载问题解析
当某个类的对象持有当前类的实例时,某个实例递归地引用当前类的实例很容易导致构造器递归调用。不过在一些特定的情况下,程序必须让某个类的一个实例持有当前类的另一个实例,例如链表,每个节点都持有一个引用,该引用指向下一个链表节点。
对于一个Java类而言,它的一个实例持有当前类的另一个实例的引用是被允许的,只要程序初始化它所持有当前类的实例时不会引起构造器递归。
public class InstanceTest1{
private String name;
private InstanceTest1instance;
public InstanceTest1(){
}
public InstanceTest1(String name){
instance = newInstanceTest1();
this.name =name;
}
public String toString(){
return "InstanceTest11[instance="+instance+"]";
}
public static void main(String[] args){
InstanceTest1 in = newInstanceTest1();
InstanceTest1 in2 = newInstanceTest1("testname");
System.out.println(in);
System.out.println(in2);
}
}
Output:
InstanceTest11[instance=null]
InstanceTest11[instance=InstanceTest11[instance=null]]
上面程序中定义了一个InstanceTest1类。该类的实例持有另一个InstanceTest1对象,程序只要不再InstanceTest1构造器的初始化代码里形成递归调用,这个类就是安全的。上面程序创建了2个InstanceTest1对象,一个持有instance属性为null,另一个持有instance是有效的。
如果改为下面就会出现递归调用:
public static void main(String[] args){
InstanceTest1 in = new InstanceTest1("");
InstanceTest1 in2 = new InstanceTest1("testname");
in.instance = in2;
in2.instance = in;
System.out.println(in);
System.out.println(in2);
}
Exceptionin thread "main" java.lang.StackOverflowError
at java.lang.StringBuilder.append(UnknownSource)
atjava.lang.StringBuilder.<init>(Unknown Source)
at InstanceTest1.toString(InstanceTest1.java:13)
at java.lang.String.valueOf(UnknownSource)
at java.lang.StringBuilder.append(UnknownSource)
at InstanceTest1.toString(InstanceTest1.java:13)
at java.lang.String.valueOf(UnknownSource)
at java.lang.StringBuilder.append(Unknown Source)
- 持有当前类的实例和重载问题解析
- java两个类相互持有引用的小问题
- 02.11潜龙每周综述:当前应持有的热点板块和应避开的板块分析。
- 匿名内部类的demo演示(匿名内部类持有外部类的实例引用)
- C# 类继承及重载实例 及 精彩解析
- dictionary实例的解析和强制解析
- 类的操作符重载学习实例
- 关于模板函数重载中对象实例化的问题
- java的重载实例
- Java对象的创建,持有Java对象,区分对象和类。
- ref和out的函数重载问题
- 解析c++中的重载问题
- 模板类中操作符重载问题("<<"和">>"重载)
- 模板类中操作符重载问题("<<"和">>"重载)
- 关于持有银行股十年十倍的问题
- 关于我能否持有银行股十年的问题
- ORA-01591: 锁被有问题的分布式事务处理 11.8.22878 持有
- ORA-01591: 锁被有问题的分布式事务处理 4.17.13830 持有
- Oracle笔记-备份与恢复
- xx公司面试总结
- POJ 3090 Visible Lattice Points(Farey数列&欧拉函数求和)
- 黑马程序员_07 集合
- 浅谈TCP/IP网络编程中socket的行为
- 持有当前类的实例和重载问题解析
- uva 11178 - Morley's Theorem (直线旋转相交)
- DHCP协议原理基础
- 日积月累:布局横竖向滑动需求的实现
- 使用 Oracle 数据集成平台管理数据
- 这个暑假值了
- C#中构造函数和析构函数的用法
- vb.net合作版版机房收费系统常见问题汇总
- Splay Tree(伸展树)[NOI2005]维修数列