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());
}
}
这个程序为啥运行出错,有人能解释下吗?

解决方案 »

  1.   

    public boolean say() {
    return t.say();
    }
      

  2.   

    成员变量HelloClass t;没有初始化。这个代码很难运行起来。因为
    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;
        }}
      

  3.   

    不是null
     也陷入 死循环了吧,,,,,
      

  4.   

    public class HelloClass {
    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());
    }
    }如果这样会报什么错呢?   太快了,一晃而过,没看到
      

  5.   

    incorrect recursion: stack over
      

  6.   

    有这么复杂吗....
    我就觉得你那个t确实诡异,按常理来说,你的t是一个没有对象的引用,就像你有一个遥控器但没有电视一样,请认真理解面向对象,什么是对象,t在这里不是对象,没有对象,怎么能空谈行为呢
      

  7.   

    static HelloClass t=new HelloClass();
    会 怎么样??????????
      

  8.   

    t没有初始化,递归的调用.say方法,会死循环。
      

  9.   

    运行时检测,空指针异常,没什么诡异的,如果把HelloClass t = new HelloClass(),变成这样,这就是死循环了,这个还有点意思
      

  10.   

    你的HelloClass t这个对象没有new是不能调用say()这个方法的  除非一把say()声明成static
      

  11.   

    xx=new HelloClass()这个对象生成时,在执行构造之前,会先对属性t显式初始化,然后执行new HelloClass(),又导致生成新对象,分配内存空间,在执行这个对象的构造之前,又会对新对象的属性t显示初始化,然后继续上面的步骤,所以会循环调用。当然就出错了。。
      

  12.   

    没有所谓的递归调用
    这个和 say 方法没关系
    只是在类的实例化的时候,不断的递归实例化
    最后造成内存溢出
      

  13.   

    你等于调用了xx里的t的say方法,由于t是空引用,会报出运行时异常
      

  14.   

    public class HelloClass {
    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());
    }
    }
    你这样写的话,你的内存会无限增大
      

  15.   

    HelloClass 的实例变量 t 没有初始化。
      

  16.   

    两个问题
    t没实例化
    say()循环调用
    其实应该是你自己写的吧:)