- •Вопросы по java
- •Базовые типы данных и литералы. Операторы. Классы-оболочки.Операторы управления.
- •М ассивы.
- •Статические методы и поля. Модификатор native. Модификатор synchronized. Логические блоки.
- •Параметризованные классы. Параметризованные методы. Методы с переменным числом параметров.
- •Наследование. Использование final.
- •Использование super и this.
- •Переопределение методов и полиморфизм. Полиморфизм и расширяемость.
- •Клонирование объектов. “Сборка мусора” и освобождение ресурсов.
- •Интерфейсы.
- •Статический импорт.
- •Внутренние (inner) классы. Вложенные (nested) классы. Анонимные (anonymous).
- •Класс String.
- •Классы StringBuilder и StringBuffer.
- •Регулярные выражения.
- •Интернационализация текста.
- •Иерархия и способы обработки. Оператор throw.Ключевое слово finally.
- •Собственные исключения. Наследование и исключения. Отладочный механизм assertion.
- •Класс File. Байтовые и символьные потоки ввода/вывода. Предопределенные потоки.
- •Класс Scanner.
- •Коллекции. Общие определения.
- •Списки.
- •Множества.
- •Карты отображений.
- •Управление приоритетами и группы потоков. Управление потоками. Потоки-демоны.
- •Методы synchronized. Инструкция synchronized.
- •Интерфейс ServletContext. Интерфейс ServletConfig
- •Интерфейсы ServletRequest и HttpServletRequest. Интерфейсы ServletResponse и HttpServletResponse.
- •Обработка запроса. Многопоточность.
- •Стандартные элементы action. Jsp-документ.
- •Технология взаимодействия jsp и сервлета.
-
Клонирование объектов. “Сборка мусора” и освобождение ресурсов.
Объекты в методы передаются по ссылке, в результате чего в метод передает- ся ссылка на объект, находящийся вне метода. Поэтому если в методе изменить значение поля объекта, то это изменение коснется исходного объекта. Во избежа- ние такой ситуации для защиты внешнего объекта следует создать клон (копию) объекта в методе. Класс Object содержит protected-метод clone(), осу- ществляющий побитовое копирование объекта производного класса. Однако сна- чала необходимо переопределить метод clone() как public для обеспечения возможности вызова из другого пакета. В переопределенном методе следует вы- звать базовую версию метода super.clone(), которая и выполняет собственно клонирование. Чтобы окончательно сделать объект клонируемым, класс должен реализовать интерфейс Cloneable. Интерфейс Cloneable не содержит мето- дов относится к помеченным (tagged) интерфейсам, а его реализация гарантирует, что метод clone() класса Object возвратит точную копию вызвавшего его объекта с воспроизведением значений всех его полей. В противном случае метод генерирует исключение CloneNotSupportedException. Следует отметить, что при использовании этого механизма объект создается без вызова конструкто- ра. В языке C++ аналогичный механизм реализован с помощью конструктора ко- пирования.
Когда никаких ссылок на объект не существует, то есть все ссылки на него вышли из области видимости программы, предполагается, что объект больше не нужен, и память, занятая объектом, может быть освобождена. “Сборка мусора” происходит нере- гулярно во время выполнения программы. Форсировать “сборку мусора” невоз- можно, можно лишь “рекомендовать” ее выполнить вызовом метода Sys- tem.gc() или Runtime.getRuntime().gc(), но виртуальная машина выполнит очистку памяти тогда, когда сама посчитает это удобным. Вызов ме- тода System.runFinalization() приведет к запуску метода finalize() для объектов утративших все ссылки.
-
Интерфейсы.
Интерфейсы подобны полностью абстрактным классам, но не являются клас- сами. Ни один из объявленных методов не может быть реализован внутри интер- фейса. В языке Java существуют два вида интерфейсов: интерфейсы, определяю- щие контракт для классов посредством методов, и интерфейсы, реализация кото- рых автоматически (без реализации методов) придает классу определенные свой- ства. К последним относятся, например, интерфейсы Cloneable и Serializ- able, отвечающие за клонирование и сохранение объекта в информационном потоке соответственно. Все объявленные в интерфейсе методы автоматически трактуются как public и abstract, а все поля – как public, static и final, даже если они так не объявлены. Класс может реализовывать любое число интерфейсов, указы- ваемых через запятую после ключевого слова implements, дополняющего определение класса. После этого класс обязан реализовать все методы, получен- ные им от интерфейсов, или объявить себя абстрактным классом. На множестве интерфейсов также определена иерархия наследования, но она не имеет отношения к иерархии классов. Определение интерфейса имеет вид: [public] interface Имя [extends Имя1, Имя2,…, ИмяN] { /*реализация интерфейса*/