2013-09-25 3 views
1

Я знаю, что статические блоки работают до основного. Но нормальные блоки также выполняются до основного или после основного?Статический блок и нормальный блок

class prog 
{ 
static 
{ 
System.out.println("Static"); 
} 
{ 
System.out.println("Block"); 
} 

public static void main(String args[]) 
{ 
prog obj=new prog(); 
System.out.println("Main"); 
} 
} 
+5

Почему бы вам не убежать и не увидеть? – SudoRahul

+1

Серьезно, было бы проще запустить этот код в вашей fav IDE. Если у вас его нет, используйте http://ideone.com –

+0

. Более конкретно, статический блок запускается, когда класс загружен ..., который да находится задолго до основного. –

ответ

1

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

Только для записи перед java 7 статических блоков были выполнены до того, как был запущен метод main() в проекте. Но из java 7 main() сначала просматривается. Таким образом, вы получите сообщение об ошибке, если у вас нет основного. Так что I know the static blocks run before main немного неоднозначно. Метод main() проверяется до выполнения статических блоков, но основное выполнение запускается после обработки статических блоков.

Также нестатические блоки выполняются до вызова соответствующего конструктора. Например

public class Tester { 

{ 
    System.out.println("In some random block"); 
} 

static { 
    System.out.println("In static block"); 
} 

public Tester() { 
    System.out.println("Constructor"); 
} 


public static void main(String args[]) { 
    Tester t = new Tester(); 
} 


} 

напечатает

In static block 
In some random block 
Constructor 
0

НЕРАСПРОСТРАНЕНИЕ статического блок один работает, когда вы создать экземпляр объекта, в вашем случае inside main. попробуйте что-нибудь напечатать до prog obj=new prog();

Если у меня есть что-то вроде ниже, оно будет работать до main.

class prog { 
    static { 
     System.out.println("Static"); 
    } 
    { 
     System.out.println("Block"); 
    } 

    prog obj = new prog(); 
    public static void main(String args[]) { 
     System.out.println("Main"); 
    } 
} 
+1

* Нестационарный блок запускается всякий раз, когда вы создаете объект * класса, который содержит эти блоки. –

+0

Кроме того, стоит упомянуть, что * не-статические * блоки кода в классе будут выполняться ** перед ** выполнением конструктора класса. См. Http://stackoverflow.com/a/17001104/1065197 –

+0

Да, нестатические блоки являются частью метода 'init', сгенерированного компилятором для всех классов, и этот метод запускается перед конструктором. – Claudiu

2

На самом деле статический блок или SIB (Статическая инициализация блок), нагрузки в момент загрузки класса, поэтому она выполняется перед основным() ..

Но это же не так с Нестатическим блок или IIB (Instance Инициализация блока), он загружается только в момент создания объекта (Instance), как имя также уточняет тот же ...

Я думаю, что вы получили мою точку ...

0

Статический блок - это блок, в котором, если мы укажем какую-либо переменную или класс static, мы можем выдает свои данные в другой класс или вне этого класса через его имя класса. Обычный блок - это блок, в котором создается класс, или объект этого класса. Если мы хотим использовать его в другом классе, мы должны создать конструктор этого класса, а затем мы можем получить доступ к его объекту. Итак, это основное отличие в статическом блоке и обычном блоке

0

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

0

Нормальные Инициализационные блоки выполняются при создании экземпляра класса экземпляра. Статические методы, такие как main, doe не нуждаются в экземпляре, поэтому эти две вещи не связаны.

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