SlideShare a Scribd company logo
1 of 27
Инициализация.
Конструкторы.
Виталий Унгурян
unguryan@itstep.org
Инициализация
Инициализация (от англ. initialization,
инициирование) — создание,
активация, подготовка к работе,
определение параметров.
Типы инициализации
Инициализация поля класса в
месте объявления
Инициализационный блок
Конструктор класса
Инициализация статических полей в месте
объявления
class Integer {
...
public static final int SIZE = 32;
...
}
Применяется, если инициализация может
быть произведена коротким выражением и
доступен контекст, необходимый для ее
проведения
Инициализация в статическом блоке
class Integer {
static {
// код инициализации
}
}
Запуск статического блока
1. При вызове метода, непосредственно
находящийся в данном классе (а не
обследующийся от суперкласса);
2. Когда вызывается конструктор
данного класса, либо когда создается
массив объектов данного класса;
3.Когда читается либо присваивается
поле, которое не является константой.
Инициализация в статическом блоке
Инициализация в статическом блоке
применяется в случаях если
инициализацию неудобно проводить в
месте объявления переменной.
Например,если инициализация
производится путем выполнения кода,
который не может быть представлен в
виде выражения
Инициализация в статическом блоке
Инициализация статических полей в
месте объявления и статические блоки
выполняются в порядке их объявления
в классе.
Инициализация полей объекта
инициализация в месте
объявления
инициализация в не статическом
блоке
инициализация в конструкторе
Инициализация полей объекта в месте
объявления
public class Blog {
...
private Post [] posts = new Post[10];
...
}
Инициализация полей экземпляра в не
статическом блоке
class Year2000Problem {
Date start;
{
//нестатический блок инициализации
start = new Date();
}
}
Инициализировать поля экземпляра
класса с помощью финальных методов
public class Whatever {
protected String [] allSeasons = init ();
private final String [] init () {
return {"winter", "spring", "summer",
"autumn“};
}
Когда использования инициализацию в
нестатическом блоке
во время инициализации необходимо
обработать проверяемое исключение
значение поля не удобно вычислять с
помощью выражения (например, для этого
нужен специально созданный класс или
метод, который не хочется создавать
только для этих целей)
необходимо инициализировать поле
анонимного класса (в анонимном классе
невозможно объявить конструктор)
Инициализация полей объекта в конструкторе
class User {
...
private String login;
User (String login) {
this.login = login;
}
...
}
Порядок инициализации при наследовании
1. Инициализация статических полей,
выполнение блока статической
инициализации
супер класса;
2. Инициализация статических полей,
выполнение блока статической
инициализации
подкласса;
Порядок инициализации
3. Инициализация не статических полей,
выполнение блока не статической
инициализации
и инициализация в конструкторе супер
класса;
4. Инициализация не статических полей,
выполнение блока не статической
инициализации
и инициализация в конструкторе
подкласса.
Конструктор
Конструктор - это специальный
«метод», который вызывается при
создании нового объекта.
Имя конструктора должно совпадать с
именем класса, включая регистр, а по
синтаксису конструктор похож на метод
без возвращаемого значения.
Конструктор
Конструктор имеется в любом классе!
Даже если вы его не написали,
компилятор Java сам создаст
конструктор по умолчанию (default
constructor – без параметров), он не
делает ничего, кроме вызова
конструктора суперкласса.
Конструктор
Конструктор выполняется
автоматически при создании
экземпляра класса, после
распределения памяти и
обнуления полей, но до начала
использования создаваемого
объекта.
Конструктор
Конструктор не имеет типа
возврашаемого значения.
Поэтому в его описании не пишется
даже слово void, но можно задать
один из трех спецфикаторов
доступа public, protected или private.
Конструктор
Конструктор не является
методом, он даже не считается
членом класса.
Поэтому его нельзя
наследовать или
переопределить в подклассе.
Конструктор
Тело конструктора может начинаться:
 с вызова одного из конструкторов
супер класса, для этого записывается
слово super() с параметрами в скобках,
если они нужны;
 с вызова другого конструктора того
же класса, для этого записывается
слово this() с параметрами в скобках,
если они нужны.
Конструктор объекта
public class Cat {
private String name;
public Cat() { name=“noname”;}
public Cat(String name){
this.name = name;
}
} Cat myCat = new Cat(“Васька”);
Порядок вызова конструкторов
В иерархии классов конструкторы
вызываются в порядке
наследования, начиная с супер
класса, и заканчивая подклассом.
Порядок вызова конструкторов
Более того, поскольку super() должен быть
первым оператором, выполняемым в
конструкторе подкласса, этот порядок
остается неизменным, независимо от того,
используется ли форма super(). Если
конструктор super() не применяется,
программа использует конструктор
каждого супер класса, заданный по
умолчанию или не содержащий
параметров.
Порядок инициализации полей
объекта
инициализация полей в месте
объявления и в инициализационном
блоке происходит до инициализации в
конструкторе
инициализации полей в месте
объявления и в инициализационных
блоках выполняются в порядке их
объявления в классе
Порядок инициализации полей объекта
инициализация полей базового
класса происходит полностью до
инициализации производного класса,
т.е. сначала выполняются все
инициализаторы базового класса, а
потом все инициализаторы
производного класса.

More Related Content

What's hot

Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
metaform
 
Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. Рефакторинг
Sergey Nemchinsky
 
принципы объектного подхода
принципы объектного подходапринципы объектного подхода
принципы объектного подхода
Andrey Radionov
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
metaform
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. Введние
Sergey Nemchinsky
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5
Technopark
 
Шаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UMLШаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UML
Sergey Nemchinsky
 

What's hot (18)

Step 3.2
Step 3.2Step 3.2
Step 3.2
 
Java core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.pptJava core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.ppt
 
Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. Рефакторинг
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.
 
принципы объектного подхода
принципы объектного подходапринципы объектного подхода
принципы объектного подхода
 
Шаблоны проектирования GoF
Шаблоны проектирования GoFШаблоны проектирования GoF
Шаблоны проектирования GoF
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
 
Методы автоматической классификации
Методы автоматической классификацииМетоды автоматической классификации
Методы автоматической классификации
 
л 2 10
л 2 10л 2 10
л 2 10
 
Step 3.1
Step 3.1Step 3.1
Step 3.1
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. Введние
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5
 
Шаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UMLШаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UML
 
C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.
 

Viewers also liked

Viewers also liked (17)

Java. Инкапсуляция.
Java. Инкапсуляция.Java. Инкапсуляция.
Java. Инкапсуляция.
 
Java. Интерфейс Reference - типы ссылок
Java. Интерфейс Reference -  типы ссылокJava. Интерфейс Reference -  типы ссылок
Java. Интерфейс Reference - типы ссылок
 
An Introduction to JVM Internals and Garbage Collection in Java
An Introduction to JVM Internals and Garbage Collection in JavaAn Introduction to JVM Internals and Garbage Collection in Java
An Introduction to JVM Internals and Garbage Collection in Java
 
Java. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииJava. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операции
 
Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.
 
Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.
 
Java. Сборщик мусора. Работа с памятью.
Java.  Сборщик мусора. Работа с памятью. Java.  Сборщик мусора. Работа с памятью.
Java. Сборщик мусора. Работа с памятью.
 
Java. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторыJava. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторы
 
Java. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьJava. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередь
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.
 
Java. Циклы.
Java. Циклы.Java. Циклы.
Java. Циклы.
 
Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.
 
Алгоритмы поиска и сортировки
Алгоритмы  поиска и сортировкиАлгоритмы  поиска и сортировки
Алгоритмы поиска и сортировки
 
Java. Методы
Java. Методы Java. Методы
Java. Методы
 
Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.
 
List - списки
List - списки List - списки
List - списки
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибки
 

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

C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
Technopark
 
C++ осень 2012 лекция 3
C++ осень 2012 лекция 3C++ осень 2012 лекция 3
C++ осень 2012 лекция 3
Technopark
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3
Technopark
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
etyumentcev
 

Similar to Java. Конструкторы класса и инициализация (12)

C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.
 
Наследование и полиморфизм
Наследование и полиморфизмНаследование и полиморфизм
Наследование и полиморфизм
 
C++ осень 2012 лекция 3
C++ осень 2012 лекция 3C++ осень 2012 лекция 3
C++ осень 2012 лекция 3
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3
 
Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.
 
Классы и объекты С#
Классы и объекты С#Классы и объекты С#
Классы и объекты С#
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.
 
АРК-ПЗ-1.pptx
АРК-ПЗ-1.pptxАРК-ПЗ-1.pptx
АРК-ПЗ-1.pptx
 

More from Unguryan Vitaliy

Работа в команде, управление программными проектами
Работа в команде, управление программными проектамиРабота в команде, управление программными проектами
Работа в команде, управление программными проектами
Unguryan Vitaliy
 

More from Unguryan Vitaliy (20)

Модульное тестирование.
Модульное тестирование. Модульное тестирование.
Модульное тестирование.
 
Stream API
Stream APIStream API
Stream API
 
Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVC
 
Работа в команде, управление программными проектами
Работа в команде, управление программными проектамиРабота в команде, управление программными проектами
Работа в команде, управление программными проектами
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версий
 
Принципы SOLID
Принципы SOLIDПринципы SOLID
Принципы SOLID
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в java
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernate
 
Spring AOP
Spring AOPSpring AOP
Spring AOP
 
Введение в Spring
Введение в SpringВведение в Spring
Введение в Spring
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSP
 
JSTL
JSTLJSTL
JSTL
 
JSP
JSPJSP
JSP
 
JDBC
JDBCJDBC
JDBC
 
Сервлеты
СервлетыСервлеты
Сервлеты
 
Сетевое взаимодействие
Сетевое взаимодействиеСетевое взаимодействие
Сетевое взаимодействие
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
 
XML
XMLXML
XML
 
Аннотации в java
Аннотации в javaАннотации в java
Аннотации в java
 

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

  • 2. Инициализация Инициализация (от англ. initialization, инициирование) — создание, активация, подготовка к работе, определение параметров.
  • 3. Типы инициализации Инициализация поля класса в месте объявления Инициализационный блок Конструктор класса
  • 4. Инициализация статических полей в месте объявления class Integer { ... public static final int SIZE = 32; ... } Применяется, если инициализация может быть произведена коротким выражением и доступен контекст, необходимый для ее проведения
  • 5. Инициализация в статическом блоке class Integer { static { // код инициализации } }
  • 6. Запуск статического блока 1. При вызове метода, непосредственно находящийся в данном классе (а не обследующийся от суперкласса); 2. Когда вызывается конструктор данного класса, либо когда создается массив объектов данного класса; 3.Когда читается либо присваивается поле, которое не является константой.
  • 7. Инициализация в статическом блоке Инициализация в статическом блоке применяется в случаях если инициализацию неудобно проводить в месте объявления переменной. Например,если инициализация производится путем выполнения кода, который не может быть представлен в виде выражения
  • 8. Инициализация в статическом блоке Инициализация статических полей в месте объявления и статические блоки выполняются в порядке их объявления в классе.
  • 9. Инициализация полей объекта инициализация в месте объявления инициализация в не статическом блоке инициализация в конструкторе
  • 10. Инициализация полей объекта в месте объявления public class Blog { ... private Post [] posts = new Post[10]; ... }
  • 11. Инициализация полей экземпляра в не статическом блоке class Year2000Problem { Date start; { //нестатический блок инициализации start = new Date(); } }
  • 12. Инициализировать поля экземпляра класса с помощью финальных методов public class Whatever { protected String [] allSeasons = init (); private final String [] init () { return {"winter", "spring", "summer", "autumn“}; }
  • 13. Когда использования инициализацию в нестатическом блоке во время инициализации необходимо обработать проверяемое исключение значение поля не удобно вычислять с помощью выражения (например, для этого нужен специально созданный класс или метод, который не хочется создавать только для этих целей) необходимо инициализировать поле анонимного класса (в анонимном классе невозможно объявить конструктор)
  • 14. Инициализация полей объекта в конструкторе class User { ... private String login; User (String login) { this.login = login; } ... }
  • 15. Порядок инициализации при наследовании 1. Инициализация статических полей, выполнение блока статической инициализации супер класса; 2. Инициализация статических полей, выполнение блока статической инициализации подкласса;
  • 16. Порядок инициализации 3. Инициализация не статических полей, выполнение блока не статической инициализации и инициализация в конструкторе супер класса; 4. Инициализация не статических полей, выполнение блока не статической инициализации и инициализация в конструкторе подкласса.
  • 17. Конструктор Конструктор - это специальный «метод», который вызывается при создании нового объекта. Имя конструктора должно совпадать с именем класса, включая регистр, а по синтаксису конструктор похож на метод без возвращаемого значения.
  • 18. Конструктор Конструктор имеется в любом классе! Даже если вы его не написали, компилятор Java сам создаст конструктор по умолчанию (default constructor – без параметров), он не делает ничего, кроме вызова конструктора суперкласса.
  • 19. Конструктор Конструктор выполняется автоматически при создании экземпляра класса, после распределения памяти и обнуления полей, но до начала использования создаваемого объекта.
  • 20. Конструктор Конструктор не имеет типа возврашаемого значения. Поэтому в его описании не пишется даже слово void, но можно задать один из трех спецфикаторов доступа public, protected или private.
  • 21. Конструктор Конструктор не является методом, он даже не считается членом класса. Поэтому его нельзя наследовать или переопределить в подклассе.
  • 22. Конструктор Тело конструктора может начинаться:  с вызова одного из конструкторов супер класса, для этого записывается слово super() с параметрами в скобках, если они нужны;  с вызова другого конструктора того же класса, для этого записывается слово this() с параметрами в скобках, если они нужны.
  • 23. Конструктор объекта public class Cat { private String name; public Cat() { name=“noname”;} public Cat(String name){ this.name = name; } } Cat myCat = new Cat(“Васька”);
  • 24. Порядок вызова конструкторов В иерархии классов конструкторы вызываются в порядке наследования, начиная с супер класса, и заканчивая подклассом.
  • 25. Порядок вызова конструкторов Более того, поскольку super() должен быть первым оператором, выполняемым в конструкторе подкласса, этот порядок остается неизменным, независимо от того, используется ли форма super(). Если конструктор super() не применяется, программа использует конструктор каждого супер класса, заданный по умолчанию или не содержащий параметров.
  • 26. Порядок инициализации полей объекта инициализация полей в месте объявления и в инициализационном блоке происходит до инициализации в конструкторе инициализации полей в месте объявления и в инициализационных блоках выполняются в порядке их объявления в классе
  • 27. Порядок инициализации полей объекта инициализация полей базового класса происходит полностью до инициализации производного класса, т.е. сначала выполняются все инициализаторы базового класса, а потом все инициализаторы производного класса.