n Пакеты могут быть реализованы:
l в виде структуры каталогов с файлами классов
l в виде jar-архива
n Путь к используемым пакетам указывается:
l непосредственно при запуске JVM с помощью ключей
l через переменную окружения CLASSPATH
(по умолчанию CLASSPATH="")
Понятие имени
n Имена задаются посредством идентификаторов, указывают на компоненты программы
n Пространства имен
l пакеты
l типы
l поля
l методы
l локальные переменные и параметры
l метки
n Имена типов бывают
l составные (java.lang.Double)
l простые (Double)
Пример зависимости имени от контекста
package Reuse;
class Reuse {
Reuse Reuse (Reuse Reuse) {
Reuse:
for(;;) {
if (Reuse.Reuse(Reuse) == Reuse)
break Reuse;
}
return Reuse;
}
}
Понятие модуля компиляции
n Модуль компиляции хранится в .java файле и является единичной порцией входных данных для компилятора
n Состоит из:
l объявления пакета
(указывает принадлежность типов в модуле к пакету)
package mypackage ;
l выражений импортирования
(добавляют другие классы в область видимости)
import java . net . Socket ;
import java . io .*;
l объявлений верхнего уровня
(описания классов и интерфейсов)
Правила именования
n Пакеты
java . lang, javax . swing, ru . ssau . tk
n Типы
Student, ArrayIndexOutOfBoundException
Cloneable, Runnable, Serializable
n Поля
value, enabled, distanceFromShop
n Методы
getValue, setValue, isEnabled, length, toString
n Поля-константы
PI, SIZE_MIN, SIZE_MAX, SIZE_DEF
n Локальные переменные
Вопрос 4 Описание классов. Модификаторы класса. Модификаторы доступа элементов класса. 24-25; 46-47 Лекция основные понятия и принципы ООП
Описание класса
Класс может содержать:
n поля
n методы
n вложенные классы и интерфейсы
public class Body {
public long idNum;
public String name;
public Body orbits;
public static long nextID = 0;
}
Модификаторы объявления класса
n public
Признак общедоступности класса (класс виден вне пакета)
n abstract
Признак абстрактности класса (класс не полностью реализует поведение)
n final
Завершенность класса (класс не допускает наследования)
n strictfp
Повышенные требования к операциям с плавающей точкой (результаты операций одинаковые на различных платформах)
Модификаторы доступа
n Ключевые слова языка
n Определяют видимость (область доступа) элементов класса
n Являются средством обеспечения инкапсуляции
n В разных языках могут присутствовать
в разном количестве
n В разных языках один и тот же модификатор может обозначать разные вещи
Модификаторы доступа
n private
Доступ только в контексте класса
n (package, default, none)
Доступ для самого класса и классов в том же пакете
n protected
Доступ в пределах самого класса, классов-наследников
и классов пакета
n public
Доступ есть всегда, когда доступен сам класс
Вопрос 5 Описание полей классов. Модификаторы полей. 26-27 Лекция основные понятия и принципы ООП
Поля класса
По сути являются переменными: обладают типом, именем и значением
n Объявление поля
[модификаторы] <тип> {<имя> [= <инициализирующее выражение>]};
n Примеры
double sum = 2.5 + 3.7, a;
public double val = sum + 2 * Math.sqrt(2);
n Если поле явно не инициализируются, ему присваивается значение по умолчанию его типа (0, false или null)
Модификаторы полей класса
n модификаторы доступа
n static
поле статично (принадлежит контексту класса, а не объекта)
n final
поле не может изменять свое значение после инициализации
n transient
поле не сериализуется (влияет только на механизмы сериализации)
n volatile
усиливает требования к работе с полем в многопоточных программах
Вопрос 6 Описание методов классов. Модификаторы методов. 28-30 Лекция основные понятия и принципы ООП
Методы класса
n По сути являются функциями: обладают именем, параметрами и возвращаемым значением
n Объявление метода:
[модификаторы] <тип> <сигнатура> [ throws исключения] {<тело>}
n Тело метода состоит из набора инструкций
class Primes {
static int nextPrime(int current) {
<Вычисление простого числа в теле метода>
}
}
Модификаторы методов класса
n Модификаторы доступа
n abstract
абстрактность метода (метод объявляется, но тело при этом не описывается)
n static
статичность метода (метод принадлежит контексту класса, а не объекта)
n final
завершенность метода (метод не может быть переопределен при наследовании)
Модификаторы методов класса
n synchronized
синхронизированность метода (особенности вызова метода в многопоточных приложениях)
n native
«нативность» метода (тело метода не описывается, при вызове вызывается метод из native-библиотеки)
n strictfp
повышенные требования к операциям с плавающей точкой (результаты операций одинаковые на различных платформах)
Вопрос 7 Особенности методов, допустимые действия в методах. 31-33 Лекция основные понятия и принципы ООП
Особенности методов
n Для нестатических методов вызов через ссылку на объект или в контексте объекта
reference . method ();
methodReturningReference (). method ();
n Для статических методов вызов через имя типа, через ссылку на объект или в контексте класса
ClassName . staticMethod ();
reference . staticMethod ();
staticMethodReturningReference (). method ();
n Наличие круглых скобок при вызове обязательно, т.к. они являются оператором вызова метода
Особенности методов
n На время выполнения метода управление передается в тело метода
n Возвращается одно значение
return someValue ;
n Аргументы передаются по значению,
т.е. значения параметров копируются в стек:
l для примитивных типов копируются сами значения
l для ссылочных типов копируется значение ссылки
n Перегруженными являются методы
с одинаковыми именами и различными по типу списками параметров
Что можно делать в методе?
n Можно обращаться к данным
l Параметры метода
l Локальные переменные
l Поля объекта
l Статические поля классов
n Можно выполнять операции
n Можно объявлять переменные
n Можно создавать объекты
n Можно вызывать методы объектов и классов
Вопрос 8 Конструкторы в классах. 34-38 Лекция основные понятия и принципы ООП
Создание объектов
n Объявление переменной и создание объекта – различные операции
n Используется оператор new, он возвращает ссылку на объект
n После оператора указывается имя конструктора и его параметры
Body sun;
sun = new Body();
sun.idNum = Body.nextID++;
sun.name = "Sun";
sun.orbits = null;
Body earth = new Body();
earth.idNum = Body.nextID++;
earth.name = "Earth";
earth.orbits = sun;
Конструкторы
n Память для объекта выделяет оператор new
n Конструкторы предназначены для формирования начального состояния объекта
n Правила написания конструктора сходны с правилами написания методов
n Имя конструктора совпадает с именем класса
Особенности конструкторов
n Для конструкторов разрешено использование только модификаторов доступа
n При написании конструктор не имеет возвращаемого типа
n Оператор возврата return прекращает выполнение текущего конструктора
n Конструкторы могут быть перегружены
n Конструкторы могут вызывать друг друга с помощью ключевого слова this в первой строке конструктора
Особенности конструкторов
n Если в классе явно не описан ни один конструктор, автоматически создается т.н. конструктор по умолчанию, не имеющий параметров
n Если в классе описан хотя бы один конструктор, то автоматически конструктор по умолчанию не создается
n Также конструктором по умолчанию называют конструктор, не имеющий параметров
Конструкторы
class Body {
public long idNum;
public String name = "No Name";
public Body orbits = null;
private static long nextID = 0;
Body() {
idNum = nextID++;
}
Body(String name, Body orbits) {
this();
this.name = name;
this.orbits = orbits;
}
}
Вопрос 9 Автоматическая сборка мусора. 39-40 Лекция основные понятия и принципы ООП
Деструкторы?
n Явное уничтожение объектов является серьёзным источником ошибок: если после вызова деструктора где-то осталась ссылка (указатель) на объект, ее использование и приведет к возникновению ошибки
n В Java деструкторов нет, вместо них применяется механизм автоматической сборки мусора
n Задачу высвобождения ресурсов обычно выполняет простой метод объекта с говорящим названием (close (), dispose () и т.д.)
Дата: 2019-07-30, просмотров: 220.