日期:2014-05-19  浏览次数:20891 次

刚学java几天有个问题挺纠结,还望解惑
首先申明我是个菜鸟,才看了进一个星期,本人在看thinking in java的时候发现里面有很多的例子是先下面的,
Java code

public class inherit
{
    String name = new String("ok\n");
    inherit obj        =    new    inherit();
    public static void    main(String[] args)
    {
        inherit    tmp    =    new inherit();
        System.out.println("game over\n");
    }
    
}

这不是原例但是我在想他这样做的话在类inherit还没有完全的申明的时候,就可以建对象实例的话那么,也就是上面的例子那么这里obj就是是在递归的生成了,这很显然就是个缺陷,为什么那本书的作者还要那他作为例子,其次为什么java不学c++在类没建立完整的时候不允许生成实例对象,只是允许生成一个本对象的引用呢?
求解。。。

------解决方案--------------------
你确定这个类能运行而不会抛出StackOverflowError
------解决方案--------------------
main是程序的入口函数 , 

static是属于类的不属于对象 ,static在类加载的时候会加载到方法区 


------解决方案--------------------
肯定会 内存溢出
------解决方案--------------------
探讨

你确定这个类能运行而不会抛出StackOverflowError

------解决方案--------------------
探讨

引用:

你确定这个类能运行而不会抛出StackOverflowError

++
构造方法是私有的private,做的一个单例

------解决方案--------------------
探讨

引用:

你确定这个类能运行而不会抛出StackOverflowError

++
构造方法是私有的private,做的一个单例

------解决方案--------------------
会抛出StackOverflowError,要看清楚作者在说什么问题
------解决方案--------------------
LZ的意思是“也就是上面的例子那么这里obj就是是在递归的生成了,这很显然就是个缺陷”,但实际上:不能


探讨

会抛出StackOverflowError,要看清楚作者在说什么问题

------解决方案--------------------
就现在这代码而言的话,会抛出StackOverflowError异常的、
------解决方案--------------------
只有是static才不会

探讨

引用:

引用:

引用:

你确定这个类能运行而不会抛出StackOverflowError

++
构造方法是私有的private,做的一个单例

少打了几个字,别个代码肯定多加了 构造方法是私有的private,做的一个单例

就算是私有的那也会内存溢出了啊,再说了,在书中所说的例子是说明类的继承和嵌套的

------解决方案--------------------
thinking in java是一本好书 我也是新手
------解决方案--------------------
这是LZ创造出来的bug吧?或是书上故意写出这样的bug举例?
------解决方案--------------------
先看看基本的java语法
然后等你能够熟练的使用java的时候再去think in java吧
从技术上升到思想是一件很难的事情
别一开始就搞华丽的理论
没实际意义
写代码
是不断地经验累积的
新手同志
------解决方案--------------------
这个BUG挺不错的,我没有写多少代码,但是我知道写这个代码是绝对不能运行的,思想上的东西,我不懂。
------解决方案--------------------
肯定会 内存溢出的