2014-01-21 5 views
-2

Как известно, мы не можем создать obj любого класса до тех пор, пока не будет определено определение класса . Итак, как мы можем создать объект в основном методе своего собственного класса?Почему возможно создать объект в основном методе своего класса?

class Test 
{ 
    public static void main(String args[]) 
    { 
     Test test=new Test(); //yet class definition of Test class is not completed still it is permitted! why? 
    } 
} 
+1

Вы можете поместить 'Test test = new Test()' почти в любом месте файла 'Test.java' - на Java нет таких ограничений. – Njol

+12

Потому что _ «Как мы знаем, мы не можем создать obj любого класса до тех пор, пока не будет определено определение класса» _ не является истинным –

+1

Создание объекта выполняется во время выполнения .. и в то время определение класса будут доступны. Когда вы пишете это заявление, вы говорите: «Я создам объект этого класса» - вот оно .. – TheLostMind

ответ

0

как вы можете решить, что определение не является полным?

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

class Test 
{ 
    public static void main(String args[]) 
    { 
    // whatever code you want  
    } 
} 
class Test2 
{ 
    public static void main(String args[]) 
    { 
    // you can call the main method of the Test class 
    Test obj = new Test(); 
     obj.main(args); 
    /* 
    * see when you can call the main method of Test class in class Test2 because 
    * compiler will treat the **main** as a static method thats it. 
    */ 
    } 
} 

компилятор будет относиться к основным , как статический метод это так. поэтому, когда вы пытаетесь создать объект self class в основном методе, компилятор будет обрабатывать основной метод как статический метод (среднее определение - это не пустой класс), поэтому компилятор позволит вам создать объект self класс без ошибок.

0

Перед тем, как объект инстанцируется, класс полностью загружается в хранилище классов JVM.

Статическим методам не требуется экземпляр класса (насколько это не внутренний класс).

12

Чтобы быть справедливым, «Как мы знаем, мы не сможем создать объект любого класса до тех пор, пока не будет определено определение класса». верно, но компиляции линии

Test test=new Test(); 

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

Сначала вы скомпилировать класс (который не выполняет какой-либо из операторов внутри), а затем запустить его, в какой момент вы используете класс скомпилирован в Instantiate (создание) нового объекта.

На самом деле вы можете создать объект в любом методе своего собственного класса (будь то статическим или экземпляром).

Единственная проблема, с которой вам следует обратить внимание, заключается в создании объекта Test в его собственном конструкторе. Это закончится в StackOverflowError, потому что вы будете бесконечно вызывать конструктор рекурсивно.

+2

+1 для четкого объяснения –

2

Код Java не выполняется, поскольку он считывается, но скорее «скомпилирован», поэтому весь файл отображается до его выполнения. Компилятор Java выполняет несколько проходов над входом, поэтому функция может вызывать другую функцию, которая определена под ним в том же файле (тогда как, например, на языках программирования C и C++, необходимо предоставить декларацию для функции или типа, прежде чем будет написан какой-либо код, который создает экземпляры или ссылки, которые функционируют или набирают).

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