27
Инициализация. Конструкторы. Виталий Унгурян [email protected]

Конструкторы класса и инициализация

Embed Size (px)

Citation preview

Page 1: Конструкторы класса и инициализация

Инициализация. Конструкторы.

Виталий Унгурян [email protected]

Page 2: Конструкторы класса и инициализация

Инициализация

Инициализация (от англ. initialization, инициирование) — создание, активация,

подготовка к работе, определение параметров.

Page 3: Конструкторы класса и инициализация

Типы инициализации

Инициализация поля класса в месте объявления

Инициализационный блокКонструктор класса

Page 4: Конструкторы класса и инициализация

Инициализация статических полей в месте объявления

class Integer { ... public static final int SIZE = 32; ... }Применяется, если инициализация может быть произведена коротким выражением и доступен контекст, необходимый для ее проведения

Page 5: Конструкторы класса и инициализация

Инициализация в статическом блоке

class Integer { static { // код инициализации }}

Page 6: Конструкторы класса и инициализация

Запуск статического блока

1. При вызове метода, непосредственно находящийся в данном классе (а не обследующийся от суперкласса);2. Когда вызывается конструктор данного класса, либо когда создается массив объектов данного класса;3.Когда читается либо присваивается поле, которое не является константой.

Page 7: Конструкторы класса и инициализация

Инициализация в статическом блоке

Инициализация в статическом блоке применяется в случаях если инициализацию неудобно проводить в месте объявления переменной. Например,если инициализация производится путем выполнения кода, который не может быть представлен в виде выражения

Page 8: Конструкторы класса и инициализация

Инициализация в статическом блоке

Инициализация статических полей в месте объявления и статические блоки выполняются в порядке их объявления в классе. 

Page 9: Конструкторы класса и инициализация

Инициализация полей объекта

инициализация в месте объявления

инициализация в не статическом блоке

инициализация в конструкторе

Page 10: Конструкторы класса и инициализация

Инициализация полей объекта в месте объявления

public class Blog { ... private Post [] posts = new Post[10]; ... }

Page 11: Конструкторы класса и инициализация

Инициализация полей экземпляра в не статическом блоке

class Year2000Problem { Date start; { //нестатический блок инициализации

start = new Date(); } }

Page 12: Конструкторы класса и инициализация

Инициализировать поля экземпляра класса с помощью финальных методов

public class Whatever { protected String [] allSeasons = init ();

private final String [] init () { return {"winter", "spring", "summer", "autumn“};}

Page 13: Конструкторы класса и инициализация

Когда использования инициализацию в нестатическом блоке

во время инициализации необходимо обработать проверяемое исключение

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

необходимо инициализировать поле анонимного класса (в анонимном классе невозможно объявить конструктор)

Page 14: Конструкторы класса и инициализация

Инициализация полей объекта в конструкторе

class User { ... private String login; User (String login) { this.login = login; } ... }

Page 15: Конструкторы класса и инициализация

Порядок инициализации при наследовании

1. Инициализация статических полей, выполнение блока статической инициализации супер класса;

2. Инициализация статических полей, выполнение блока статической инициализации подкласса;

Page 16: Конструкторы класса и инициализация

Порядок инициализации

3. Инициализация не статических полей, выполнение блока не статической инициализации и инициализация в конструкторе супер класса;

4. Инициализация не статических полей, выполнение блока не статической инициализации и инициализация в конструкторе подкласса.

Page 17: Конструкторы класса и инициализация

Конструктор

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

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

Page 18: Конструкторы класса и инициализация

Конструктор

Конструктор имеется в любом классе!

Даже если вы его не написали, компилятор Java сам создаст конструктор по умолчанию (default constructor – без параметров), он не делает ничего, кроме вызова конструктора суперкласса.

Page 19: Конструкторы класса и инициализация

Конструктор

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

Page 20: Конструкторы класса и инициализация

Конструктор

Конструктор не имеет типа возврашаемого значения.

Поэтому в его описании не пишется даже слово void, но можно задать один из трех спецфикаторов доступа public, protected или private.

Page 21: Конструкторы класса и инициализация

Конструктор

Конструктор не является методом, он даже не считается членом класса. Поэтому его нельзя наследовать или переопределить в подклассе.

Page 22: Конструкторы класса и инициализация

Конструктор

Тело конструктора может начинаться: с вызова одного из конструкторов супер класса, для этого записывается слово super() с параметрами в скобках, если они нужны; с вызова другого конструктора того же класса, для этого записывается слово this() с параметрами в скобках, если они нужны.

Page 23: Конструкторы класса и инициализация

Конструктор объекта

public class Cat { private String name; public Cat() { name=“noname”;} public Cat(String name){ this.name = name; }} Cat myCat = new Cat(“Васька”);

Page 24: Конструкторы класса и инициализация

Порядок вызова конструкторов

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

Page 25: Конструкторы класса и инициализация

Порядок вызова конструкторов

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

Page 26: Конструкторы класса и инициализация

Порядок инициализации полей объекта

инициализация полей в месте объявления и в инициализационном блоке происходит до инициализации в конструкторе

инициализации полей в месте объявления и в инициализационных блоках выполняются в порядке их объявления в классе

Page 27: Конструкторы класса и инициализация

Порядок инициализации полей объекта

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