Warning: file_put_contents(/datas/wwwroot/jiajiahui/core/caches/caches_template/2/default/show.php): failed to open stream: Permission denied in /datas/wwwroot/jiajiahui/core/libraries/classes/template_cache.class.php on line 55

Warning: chmod(): Operation not permitted in /datas/wwwroot/jiajiahui/core/libraries/classes/template_cache.class.php on line 56
我对java代码感到困惑吗? - 源码之家

我对java代码感到困惑吗?

问题描述:

这个代码是没有意义的,我我对java代码感到困惑吗?

class MyClass{ 
    MyClass obj = new MyClass(); 

    public static void main(String[] args){ 
     MyClass obj = new MyClass(); 
    } 
} 

所以,问题是如何类定义包含自己的创建对象? 例如像上面的代码MyClass实例变量obj创建它自己的对象。在这里我想了解它是否可行,那么它现实背后的实际效果如何,以及这样做的好处是什么.. 需要详细解释..预先感谢

+3

它可以很容易,问题是,你会最终得到无限量的对象被递归创建,你的资源很快就会耗尽,应用程序将崩溃。 – Stultuske

+2

你不会从这种方式中受益,因为你将会遇到'*',因为'MyClass'的每个实例都将生成一个新的'MyClass'实例。这无限的一代开始与你的主。我想你的意思是有一个'静态MyClass obj'变量,这可能是一个单身类设计的指标。 – SomeJavaGuy

+0

所以假设我们有两个类MyClass和MyClass2。在MyClass2中是我创建MyClass的对象的主要方法..它也将*? –

事情是,类不区分你是否创建它自己的类或其他任何对象。 它的工作原理与任何其他对象的构造在幕后,所以用领域初始化启动,在这种特殊情况下,用线:

MyClass obj = new MyClass(); 

而在这之后在评论中提到的人就开始这样做了并再次导致堆栈溢出。

+0

谢谢了! –

您不会在Myclass定义中启动MyClass。

得到一个看看这篇文章从比尔,构造基础: http://www.javaworld.com/article/2076614/core-java/object-initialization-in-java.html

class MyClass{ 
    private int value; 
    public MyClass() { 
     value = 1234; 
    } 

    public MyClass(int setValue) { 
     value = setValue; 
    } 
} 

class Example3 { 
    public static void main(String[] args) { 
     // Create a MyClass object with default value 
     MyClass example1 = new MyClass(); 
     // Create a MyClass with value 355 
     MyClass example2 = new MyClass(355); 
    } 
} 

我希望这有助于。