
Лекции Java / 01. Основные понятия и принципы ООП. Язык программирования Java.pptx
.pdf
Конструкторы
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 |