Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции Java / 01. Основные понятия и принципы ООП. Язык программирования Java.pptx

.pdf
Скачиваний:
163
Добавлен:
16.03.2015
Размер:
210.31 Кб
Скачать

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

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;

}

}

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

41

Деструкторы?

nЯвное уничтожение объектов является серьёзным источником ошибок: если после вызова деструктора где-то осталась ссылка (указатель) на объект, ее использование и приведет к возникновению ошибки

nВ Java деструкторов нет, вместо них применяется механизм автоматической сборки мусора

nЗадачу высвобождения ресурсов обычно выполняет простой метод объекта с говорящим названием (close(), dispose() и т.д.)

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

42

Автоматическая сборка мусора

nВ случае нехватки памяти для создания очередного объекта виртуальная машина находит недостижимые объекты и удаляет их

nПроцесс сборки мусора можно инициировать принудительно

nДля явного удаления объекта следует утратить все ссылки на этот объект и инициировать сбор мусора

nВзаимодействие со сборщиком осуществляется через системные классы java.lang.System и java.lang.Runtime

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

43

Блоки инициализации

nЕсли некоторые действия по инициализации должны выполняться в любом варианте создания объекта, удобнее использовать блоки инициализации

nТело блока инициализации заключается в фигурные скобки и располагается на одном уровне с полями и методами

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

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

44

Блоки инициализации

class Body {

public long idNum;

public String name = "No Name"; public Body orbits = null;

private static long nextID = 0;

{

idNum = nextID++;

}

Body(String name, Body orbits) { this.name = name;

this.orbits = orbits;

}

}

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

45

Статическая инициализация

class Primes {

static int[] knownPrimes = new int[4];

static { knownPrimes[0] = 2;

for (int i=1; i<knownPrimes.length; i++) knownPrimes[i] = nextPrime(i);

}

//nextPrime() declaration etc.

}

nСтатический блок инициализации выполняет инициализацию контекста класса

nВызов статического блока инициализации происходит в процессе загрузки класса в виртуальную машину

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

46

Точка входа программы

n Метод

n С параметрами-

n Статический

аргументами

n Доступный

n Без возвращаемого

 

значения

class Echo {

public static void main(String[] args) { for (int i = 0; i < args.length; i++)

System.out.println(args[i] + " "); System.out.println();

}

}

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

47

Модификаторы доступа

nКлючевые слова языка

nОпределяют видимость (область доступа) элементов класса

nЯвляются средством обеспечения инкапсуляции

nВ разных языках могут присутствовать в разном количестве

nВ разных языках один и тот же модификатор может обозначать разные вещи

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

48

Модификаторы доступа

n private

Доступ только в контексте класса

n

(package, default, none)

Доступ для самого класса и классов в том же пакете

n protected

Доступ в пределах самого класса, классов-наследников и классов пакета

n public

Доступ есть всегда, когда доступен сам класс

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

49

Реализация инкапсуляции

class Rectangle {

public int width, height;

}

nЗначения публичных полей могут быть изменены извне объекта без его контроля

nСамо по себе публичное поле – не нарушение инкапсуляции, пока…

С его элементом состояния не связано поведение

На значение не накладываются ограничения

Его значение не связано со значениями других полей

class public public

}

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

50