2016-03-08 3 views
-1

Этот код не имеет смысла для меняЯ запутался с кодом Java?

class MyClass{ 
    MyClass obj = new MyClass(); 

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

Так что вопрос в том, как можно было определение класса содержит свое собственное создание объекта? например, как выше код MyClass переменная экземпляра obj создает свой собственный объект. здесь я хочу понять, работает ли он тогда, как это происходит на самом деле за сценой. А также в чем преимущество этого сделать. требуется подробное объяснение .. заблаговременно

+3

это может быть легко, проблема в том, что вы закончите с бесконечным количеством объектов, которые будут рекурсивно созданы, ваши ресурсы скоро истощаются, и приложение выйдет из строя. – Stultuske

+2

вы не пользуетесь таким образом, так как вы будете работать в 'StackOverflow', так как каждый экземпляр' MyClass' будет генерировать новый экземпляр 'MyClass'. это бесконечное поколение начинается с вашего основного. Я предполагаю, что вы хотели иметь переменную 'static MyClass obj', которая может быть индикатором для дизайна одноэлементного класса. – SomeJavaGuy

+0

так что предположим, что у нас есть два класса MyClass и MyClass2. в MyClass2 является основным методом, когда я создаю объект MyClass .. будет ли он также stackOverFlow? –

ответ

0

Дело в том, что класс не различает, создаете ли вы объект своего рода или любой другой. За кулисами он работает так же, как и любой другой конструкции объекта, поэтому начинается с инициализации полей, в данном конкретном случае, с линией:

MyClass obj = new MyClass(); 

И после того, как люди, упомянутые в комментариях он начинает делать это снова и снова, что приводит к переполнению стека.

+0

спасибо! –

-2

Вы не инициируете MyClass внутри вашего определения Myclass.

Получить взглянуть на эту статью от Билла Веннерсом, Constructor Основы: 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); 
    } 
} 

Я надеюсь, что это помогает.

Смежные вопросы