Лекция 4_Java.ppt
- Количество слайдов: 26
Лекция 4 Объявление и структура классов Java
Содержание • Система разграничения доступа • Структура объявления класса: элементов (полей и методов), конструкторов и инициализаторов. • Сигнатура метода main. Правила передачи параметров различных типов в методы. • Преобразование типов.
Зачем нужны модификаторы доступа? • Обеспечение инкапсуляции – Гарантия сохранения типов и правил обработки данных – Возможность расширять реализацию, не нарушая корректность имеющихся фрагментов – Внутренняя защита от некорректного использования полей и методов – Возможность вносить даже архитектурные изменения • Разделение класса – Внешний интерфейс – Внутренняя реализация
Разграничение доступа в Java • Модификаторы доступа применяются к: – Ссылочным типам (классам и интерфейсам) – Элементам ссылочных типов: полям, методам, внутренним типам; – Конструкторам классов. • Четыре уровня доступа – public – private – default – protected
Доступность элементов языка • • Пакеты доступны всегда (public) Типы верхнего уровня – public / default Массивы – в соответствии с типом элемента Элементы и конструкторы типов – все 4 уровня доступа Проверка уровня доступа осуществляется на этапе компиляции
Содержание • Система разграничения доступа • Структура объявления класса: элементов (полей и методов), конструкторов и инициализаторов. • Сигнатура метода main. Правила передачи параметров различных типов в методы. • Преобразование типов.
Структура объявления класса • Заголовок класса [модификатор доступа] [final] class <имя класса / интерфейса> [extends <имя класса>] [implements <имя интерфейса>[, …]] {[тело класса]}
Тело класса • Элементы (members) – Поля – Методы – Внутренние типы (классы / интерфейсы) • Другие конструкции – Конструкторы – Инициализаторы – Статические инициализаторы
Объявление полей • Объявление поля [модификатор доступа] [final|transient|volatile] <имя поля> [= значение]; • Значение поля – Константа компиляции – Переменная или вызов метода • Значения по умолчанию – Числовые поля = 0 – Булевские поля = false – Поля ссылочных типов = null
Объявление методов • Объявление метода [модификатор доступа] [final|native|synchronized] <тип возвращаемого значения | void> <имя метода> ( [[final] <тип> <имя>[, …]] ) [throws <имя>[, …]] { [тело метода] return <значение>; }
Особенности • Сигнатуры методов обязаны отличаться – Имена могут совпадать – Тип возвращаемого значения в сигнатуру не входит • Для void-методов return не обязателен • Компилятор анализирует структуру кода для нахождения всех возможных return – Поэтому return – не обязательно в конце метода
Объявление конструкторов • Объявление конструктора [модификатор доступа] <имя класса> ( [[final] <тип> <имя>[, …]] ) [throws <имя>[, …]] { // вызов конструктора родительского класса super(…); [тело конструктора] }
Особенности • Если конструктор не объявлен, добавляется пустой конструктор по умолчанию – Допустимо, если у родителя есть конструктор без параметров – Если super(…) не вызывается явно, вызывается super() • Возможны private-конструкторы – Доступ из других конструкторов – Использование только статических методов – Реализация шаблона Singleton
Объявление инициализаторов public class Test { private int x, y, z; { x = 3; if (x > 0) y = 4; z = Math. max(x, y); } }
Порядок инициализации • Конструкторы родительских классов – По цепочке, вплоть до Object • Инициализаторы полей и объекта – В порядке объявления (записи) • Конструктор этого же класса (если вызывается) – Инициализаторы повторно не выполняются
Содержание • Система разграничения доступа • Структура объявления класса: элементов (полей и методов), конструкторов и инициализаторов. • Сигнатура метода main. Правила передачи параметров различных типов в методы. • Преобразование типов.
Метод main public static void main() { } public static void main(String[] args) { System. exit(<код_возврата>); }
Особенности передачи параметров • Переменные примитивного типа – истинные хранилища своих данных – Передача параметра в метод = объявление новой переменной – Изменение значения параметра внутри метода не передается наружу • Ссылочные типы передаются по значению – Значением является ссылка на объект – Возможны изменения состояния того же объекта – Если внутри метода создать новый объект, его состояние не будет передано наружу
Содержание • Система разграничения доступа • Структура объявления класса: элементов (полей и методов), конструкторов и инициализаторов. • Сигнатура метода main. Правила передачи параметров различных типов в методы. • Преобразование типов.
Виды приведения типов • • Тождественное Расширение примитивного типа Сужение примитивного типа Расширение объектного типа Сужение объектного типа Преобразование к строке Запрещенные преобразования
Особенности • Тождественное преобразование – Для повышения удобства чтения кода print(get. City(). get. Street(). get. House(). get. Flat() print((Block. Flat)get. City(). get. Street(). get. House(). get. Flat()) • Расширение примитивного типа – Абсолютно безопасное – Производится компилятором по умолчанию byte b; int a = b;
Особенности • Сужение примитивного типа – Простое отбрасывание дробной части – Простое отбрасывание байтов – Без учета знакового бита – Результат предсказуем… … если учесть все особенности машинного представления чисел и интерпретации типов – Использовать с осторожностью
Особенности • Расширение объектного типа – Переход от детей к родителям – Присвоение значения null – Безопасно… … если помнить концепцию полиморфизма • Сужение объектного типа – Возможен только корректный переход – Проверяется во время исполнения – Можно использовать проверку instanceof
Особенности • Преобразование к строке – Числовые типы = запись десятичного строкового представления без потери точности – Булевский тип = строки “true” или “false” – Ссылка null = строка “null” – Объектный тип = строка, возвращаемая методом to. String() • По умолчанию (в реализации Object. to. String()) – «полное имя класса» @ «хэш-код объекта»
Применение приведения типов • Присвоение значений переменным – Компилятор контролирует корректность – Сужение вызывает ошибку компиляции • Вызов метода – Может возникнуть ошибка во время исполнения • Явное приведение (<тип>)<имя_переменной> – Может возникнуть ошибка во время исполнения • Конкатенация строк • Числовое расширение при вычислениях – Все члены выражения приводятся к максимальному типу до начала вычисления
Содержание • Система разграничения доступа • Структура объявления класса: элементов (полей и методов), конструкторов и инициализаторов. • Сигнатура метода main. Правила передачи параметров различных типов в методы. • Преобразование типов.
Лекция 4_Java.ppt