public class HelloClass {
HelloClass t;
public boolean say() {
return t.say();
}
public static void main(String[] argv) {
HelloClass xx= new HelloClass ();
System.out.println(xx.say());
}
}
这个程序为啥运行出错,有人能解释下吗?
HelloClass t;
public boolean say() {
return t.say();
}
public static void main(String[] argv) {
HelloClass xx= new HelloClass ();
System.out.println(xx.say());
}
}
这个程序为啥运行出错,有人能解释下吗?
return t.say();
}
1)你初始化一个HelloClass 对象时,其成员t 总是没有初始化的。
2)就算你创建一个HelloClass 对象传给1)中创建的对象,而1)中调用的又是2)中HelloClass 对象的say方法,而此时2)中HelloClass 对象的say有调用自己没有初始化的t的say方法。要运行,要定义一个HelloClass 子类如下:public class HelloClass {
HelloClass t; public boolean say() {
return t.say();
} public static void main(String[] argv) {
HelloClass xx = new HelloClass();
xx.t = new RealHello();
System.out.println(xx.say());
}
}class RealHello extends HelloClass { //RealHello say覆盖HelloClass的say方法
public boolean say() {
System.out.println("RealHello say....");
return true;
}}
也陷入 死循环了吧,,,,,
HelloClass t=new HelloClass();public boolean say() {
return t.say();
}public static void main(String[] argv){
HelloClass xx= new HelloClass ();
System.out.println(xx.say());
}
}如果这样会报什么错呢? 太快了,一晃而过,没看到
我就觉得你那个t确实诡异,按常理来说,你的t是一个没有对象的引用,就像你有一个遥控器但没有电视一样,请认真理解面向对象,什么是对象,t在这里不是对象,没有对象,怎么能空谈行为呢
会 怎么样??????????
这个和 say 方法没关系
只是在类的实例化的时候,不断的递归实例化
最后造成内存溢出
HelloClass t=new HelloClass();public boolean say() {
return t.say();
}public static void main(String[] argv){
HelloClass xx= new HelloClass ();
System.out.println(xx.say());
}
}
你这样写的话,你的内存会无限增大
t没实例化
say()循环调用
其实应该是你自己写的吧:)