遇见一种诡异的Java写法

问题描述

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()循环调用其实应该是你自己写的吧:)

时间: 2024-10-30 21:31:08

遇见一种诡异的Java写法的相关文章

几种任务调度的 Java 实现方法与比较

综 观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺点进行比较,目的在于给需要开发任务调度的程序员提供有价值的参考.   任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务.本文由浅入深介绍四种任务调度的 Java 实现: Timer ScheduledExecutor 开源工具包 Quartz 开源工具包 JCronTab 此外

Groovy一种新兴的Java 2平台语言1.7.6发布

Groovy是一种新兴的 Java 2 平台语言.Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码.Groovy 在 12月16日发布了两个版本,Groovy 1.7.6 是一个 bug 修复版本,而 1.8 Beta3 则包含一些新功能: ● extended command expressions can be used on the right-hand side of assignments ● the @Log AST transformation is cus

groovy v1.7.8发布 一种新兴的Java 2平台语言

Groovy是一种新兴的 Java 2 平台语言.Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码.目前的 Groovy 版本是 1.6.3,在 Java 1.4 和 Java 5 平台上都能使用,也能在 Java 6 上使用. Groovy 是 JVM 的一个替代语言 - 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同. Groovy界面 ● 是一个基于 Java虚拟机的敏捷 动态语言. ● 构建在

两种特殊的Java容器类List和Set分析

容器类可以大大提高编程效率和编程能力,在Java2中,所有的容器都由SUN公司的Joshua Bloch进行了重新设计,丰富了容器类库的功能. Java2容器类类库的用途是"保存对象",它分为两类: Collection----一组独立的元素,通常这些元素都服从某种规则.List必须保持元素特定的顺序,而Set不能有重复元素. Map----一组成对的"键值对"对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应用.另外,Map可以返回其所有键

比较两种php调用Java对象的方法

P>Java语言功能强大,因此在许多情况下在php中来调用Java的功能将十分有用.在php中调用Java语言有两种方法,一种是使用php中的Java扩展模块,另一种是使用minij2ee应用服务器提供的SJOP协议实现.下面我们来比较一下这两种方法各自的特点.1.php的Java模块php发布版中包含一个Java扩展模块,可以用来调用Java对象,例如:<?php$system=new Java("java.lang.System");print "Java v

09考研数据结构试题的一种解法(Java版)

本文为原创,如需转载,请注明作者和出处,谢谢!        虽然研究生已毕业,但看到有一些难度的研究生考试题还是忍不住要做做,本文给出了09年研究生入学考试的一道数据结构题的Java实现.该题的描述如下图所示.     该题的两种实现一位朋友已经完成了,详见递归和非递归实现 .在本文将给出另外一种算法,该算法的空间复杂度为O(1),时间复杂度为O(n).这在空间复杂度和时间复杂度上应该是比较优化了.     本算法的基本思想如下:     既然是查找倒数第K个结点(注意,不是正数,否则就没什么

js中for循环的几种节省字符的写法

javascript中for循环非常常用,一般写法如下: for(var i = 0;i< arr.length;i++) {         var a = arr[i];         //...     } 这就是一个常见的,正序循环的for循环.这样写的缺点大家都明白:每次都从arr里取length与i来对比,浪费性能(而且,要是arr的长度是动态变化的,就会出现死循环).改进这个循环的办法是用变量保存arr.length: for(var i = 0, al = arr.length

从两种SQL表连接写法来了解过去

例如:一个二表连接的SQL,有两种写法: (1)select A.c1,A.c2,B.c1,B.c2 from table1 A,table2 B where A.id=B.id (2)select A.c1,A.c2,B.c1,B.c2 from table1 A join table2 B on A.id=B.id 哪种写法好呢?现在提倡用哪一种? 你喜欢用哪一种? 复制代码 代码如下: select * from a,b where a.id=b.id select * from a in

两种php调用Java对象的方法

java对象 1.php的Java模块 php发布版中包含一个Java扩展模块,可以用来调用Java对象,例如: <?php $system=new Java("java.lang.System"); print "Java version=".$system->getProperty("java.version")." "; ?> 2.minij2ee应用服务器SJOP协议实现 minij2ee应用服务器实