Инициализация и загрузка классов

В традиционных языках программы загружаются целиком в процессе запуска.

В Java код загружается из файлов *.class постепенно. Каждый файл загружается, когда он нужен - в точке первого использования:

- при создания объекта класса;

- при обращение к статическим полям или методам.

При загрузке инициализируются статические объекты и выполняются блоки статической инициализации (только один раз).

Сначала выполняется метод main (). Если у класса есть базовый (extends), он загружается. Затем производится static – инициализация корневого базового класса, затем производных. Далее создается объект класса: все поля обнуляются, затем – вызывается конструктор базового класса. После конструктора базового класса инициализируются переменные (поля). Потом конструктор выполняется дальше.

class Insect {

private int i = 9;

protected int j;

Inseсt (){

System.out.println (“i =”, + i + “, j = ” + j);

j=39;

}

private static int x1 = printInit (“static Insect.x1 инициализировано”);

static int printInit (String s) {

System.out.println (s);

return 47;}

}

public class Beetle extends Insect {

private int k = printInit (“ Beetle.k инизиализировано ”);

public Beetle () {

System.out.println (“k= ” +k);

System.out.println (“j= ” +j); }

private static x2 = printInit (“ static Beetle.x2 инизиализировано”);

public static void main (String [] args) {

System.out.println (“Конструктор Beetle”);

Beetle b = new Beetle (); }

}

Напечатается: static Insect.x1 инициализировано //статическое поле базового класса

static Beetle.x2 инициализировано //стат.поле класса

//это была загрузка классов

Конструктор Beetle

i=9, j=0 // (память обнулилась,память проинициализировалась,выполнился конструктор базового класса)

Beetle.k инициализировано //память проинициализировалась

k=47 //конструктор

j=39

Тема 8


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: