2015-04-14 3 views
-4

Я ожидал, что нестатические блоки всегда выполняются во время создания объекта. Но в следующем примере я вызывал статический метод, но выполнялся нестатический блок. Я не создал какой-либо объект, поэтому почему выполняется нестатический блок?Когда выполняется нестатический блок в java?

class Example { 
    static void Mark() { 
    System.out.println("Mark method"); 
    { 
     System.out.println("Hello"); 
    } 
    } 
} 

public class StaticObject { 
    public static void main(String[] args) { 
    Example.Mark(); 
    } 
} 

Результат:

Mark method 
Hello 
+3

Без углублений это по существу нечитаемо. –

+1

У вас есть только блок внутри статического метода, который не соответствует вашему тексту вопроса. –

ответ

9

Вы не блок нестатический инициализации в вашем примере. Блок внутри метода - это просто код, который запускается как часть метода. (Вложенные блоки кода вводят новую область, поэтому вы можете создавать переменные, которые не видны за пределами блока.)

Это только инициализатор, если он находится внутри класса, но вне декларации метода. Если изменить код, чтобы переместить блок наружу любого метода:

class Example { 
    static void Mark() { 
     System.out.println("Mark method"); 
    } 

    // now it's an instance initializer 
    { 
     System.out.println("Hello"); 
    } 
} 

, то вы должны увидеть экземпляр инициализатор выполняется при создании экземпляра объекта. Если вы не создаете экземпляр объекта, как в вашем примере, инициализатор экземпляра не будет запущен.

+0

Огромное спасибо, я понял ... – Albertkaruna

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