问题描述
publicclassHelloClass{HelloClasst;publicbooleansay(){returnt.say();}publicstaticvoidmain(String[]argv){HelloClassxx=newHelloClass();System.out.println(xx.say());}}这个程序为啥运行出错,有人能解释下吗?
解决方案
解决方案二:
publicbooleansay(){returnt.say();}
解决方案三:
HelloClasst;isnull
解决方案四:
该回复于2010-10-23 10:01:28被版主删除
解决方案五:
因为这么写太诡异了
解决方案六:
成员变量HelloClasst;没有初始化。这个代码很难运行起来。因为1)你初始化一个HelloClass对象时,其成员t总是没有初始化的。2)就算你创建一个HelloClass对象传给1)中创建的对象,而1)中调用的又是2)中HelloClass对象的say方法,而此时2)中HelloClass对象的say有调用自己没有初始化的t的say方法。要运行,要定义一个HelloClass子类如下:publicclassHelloClass{HelloClasst;publicbooleansay(){returnt.say();}publicstaticvoidmain(String[]argv){HelloClassxx=newHelloClass();xx.t=newRealHello();System.out.println(xx.say());}}classRealHelloextendsHelloClass{//RealHellosay覆盖HelloClass的say方法publicbooleansay(){System.out.println("RealHellosay....");returntrue;}}
解决方案七:
引用2楼michaellufhl的回复:
HelloClasst;isnull
up
解决方案八:
t引用还没有初始化,为null
解决方案:
不是null也陷入死循环了吧,,,,,
解决方案:
无语啦、、、
解决方案:
该回复于2010-10-23 10:01:44被版主删除
解决方案:
t没有初始化。
解决方案:
这也可以写的出来。。不错。。挺好的。。技术就是在不断的学习中。不断的找到错误中提高的
解决方案:
publicclassHelloClass{HelloClasst=newHelloClass();publicbooleansay(){returnt.say();}publicstaticvoidmain(String[]argv){HelloClassxx=newHelloClass();System.out.println(xx.say());}}
如果这样会报什么错呢?太快了,一晃而过,没看到
解决方案:
引用13楼wsdhla的回复:
JavacodepublicclassHelloClass{HelloClasst=newHelloClass();publicbooleansay(){returnt.say();}publicstaticvoidmain(String[]argv){HelloClassxx=newHelloClass();System.out.pri……
incorrectrecursion:stackover
解决方案:
t为空,如果存在实例t,则出现递归。
解决方案:
有这么复杂吗....我就觉得你那个t确实诡异,按常理来说,你的t是一个没有对象的引用,就像你有一个遥控器但没有电视一样,请认真理解面向对象,什么是对象,t在这里不是对象,没有对象,怎么能空谈行为呢
解决方案:
不就是个链表么。。。
解决方案:
该回复于2010-10-23 10:02:05被版主删除
解决方案:
在一个类中有一个自己类的成员变量,这一般是链表,或者是装饰模式,呵呵。
解决方案:
引用2楼michaellufhl的回复:
HelloClasst;isnull
是啊.
解决方案:
..蛋疼的人
解决方案:
staticHelloClasst=newHelloClass();会怎么样??????????
解决方案:
我觉得会StackOverFlowException
解决方案:
t没有初始化,递归的调用.say方法,会死循环。
解决方案:
meijianguoa
解决方案:
引用t没有指向具体对象,应该抛空指针异常!
解决方案:
这不是明显的空指针异常的么!
解决方案:
运行时检测,空指针异常,没什么诡异的,如果把HelloClasst=newHelloClass(),变成这样,这就是死循环了,这个还有点意思
解决方案:
该回复于2010-12-07 09:18:38被版主删除
解决方案:
你的HelloClasst这个对象没有new是不能调用say()这个方法的除非一把say()声明成static
解决方案:
t是空指针的
解决方案:
引用13楼wsdhla的回复:
JavacodepublicclassHelloClass{HelloClasst=newHelloClass();publicbooleansay(){returnt.say();}publicstaticvoidmain(String[]argv){HelloClassxx=newHelloClass();System……
xx=newHelloClass()这个对象生成时,在执行构造之前,会先对属性t显式初始化,然后执行newHelloClass(),又导致生成新对象,分配内存空间,在执行这个对象的构造之前,又会对新对象的属性t显示初始化,然后继续上面的步骤,所以会循环调用。当然就出错了。。
解决方案:
顶5楼
解决方案:
。。。这写法就像。。。谋权篡位。。。本来还不属于你的东东你就想去抢。
解决方案:
引用5楼blazingfire的回复:
成员变量HelloClasst;没有初始化。这个代码很难运行起来。因为1)你初始化一个HelloClass对象时,其成员t总是没有初始化的。2)就算你创建一个HelloClass对象传给1)中创建的对象,而1)中调用的又是2)中HelloClass对象的say方法,而此时2)中HelloClass对象的say有调用自己没有初始化的t的say方法。要运行,要定义一个He……
赞一个
解决方案:
空指向异常,如果实例化t,则出现死递归现象。。。。。
解决方案:
学习学习,见多不怪
解决方案:
引用32楼littlejp的回复:
引用13楼wsdhla的回复:JavacodepublicclassHelloClass{HelloClasst=newHelloClass();publicbooleansay(){returnt.say();}publicstaticvoidmain(String[]argv){HelloClassxx=new……
这样是无限递归…………会导致堆栈溢出的还是4楼说的对因为这么写太诡异了不明白LZ的想法
解决方案:
5楼的很职业。。。。
解决方案:
该回复于2010-10-25 13:16:04被版主删除
解决方案:
该回复于2010-12-07 13:25:13被版主删除
解决方案:
被雷到了。。。
解决方案:
类定义里有类自己,很有意思
解决方案:
自己调用自己,将会无限递归,最后进入死循环了,最后内存溢出自然就报错了
解决方案:
没有所谓的递归调用这个和say方法没关系只是在类的实例化的时候,不断的递归实例化最后造成内存溢出
解决方案:
你等于调用了xx里的t的say方法,由于t是空引用,会报出运行时异常
解决方案:
publicclassHelloClass{HelloClasst=newHelloClass();publicbooleansay(){returnt.say();}publicstaticvoidmain(String[]argv){HelloClassxx=newHelloClass();System.out.println(xx.say());}}你这样写的话,你的内存会无限增大
解决方案:
HelloClass的实例变量t没有初始化。
解决方案:
两个问题t没实例化say()循环调用其实应该是你自己写的吧:)