Логические блоки Java

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

{ /* код */ }

static { /* код */ }

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

Логический блок может быть объявлен со спецификатором static. В этом случае он вызывается только один раз в жизненном цикле приложения при создании объекта или при обращении к статическому методу (полю) данного класса.

/*пример # 7 : использование логических блоков при объявлении класса:

Department.java: DemoLogic.java */

package chapt03;

public class Department {

{

System.out.println("logic (1) id=" + this.id);

}

static {

System.out.println("static logic");

}

private int id = 7;

public Department(int d) {

id = d;

System.out.println("конструктор id=" + id);

}

int getId() {

return id;

}

{

id = 10;

System.out.println("logic (2) id=" + id);

}

}

package chapt03;

public class DemoLogic {

public static void main(String[] args) {

Department obj = new Department(71);

System.out.println("значение id=" + obj.getId());

}

}

В результате выполнения этой программы будет выведено:

static logic

logic (1) id=0

logic (2) id=10

конструктор id=71

значение id=71

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

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100