- •Вопросы по 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 и сервлета.
-
Собственные исключения. Наследование и исключения. Отладочный механизм assertion.
Разработчик может создать собственное исключение как подкласс класса Exception и затем использовать его при обработке ситуаций, не являющихся исключениями с точки зрения языка, но нарушающих логику вещей.
Борьба за качество программ ведется всеми возможными способами. На этапе отладки найти неявные ошибки в функционировании приложения бывает доволь- но сложно. Например, в методе, устанавливающем возраст пользователя, инфор- мация о возрасте извлекается из внешних источников (файл, БД), и в результате получается отрицательное значение. Далее неверные данные влияют на результат вычисления среднего возраста пользователей и т.д. Определять и исправлять та- кие ситуации позволяет механизм проверочных утверждений (assertion). При по- мощи этого механизма можно сформулировать требования к входным, выходным и промежуточным данным методов классов в виде некоторых логических условий. Попытка обработать ситуацию появления отрицательного возраста может вы- глядеть следующим образом: int age = ob.getAge(); if (age >= 0) { // реализация } else { // сообщение о неправильных данных } Теперь механизм assertion позволяет создать код, который будет генерировать исключение на этапе отладки проверки постусловия или промежуточных данных в виде: int age = ob.getAge(); assert (age >= 0): "NEGATIVE AGE!!!"; // реализация
Правописание инструкции assert: assert (boolexp): expression; assert (boolexp); Выражение boolexp может принимать только значение типов boolean или Boolean, а expression – любое значение, которое может быть преобра- зовано к строке. Если логическое выражение получает значение false, то гене- рируется исключение AssertionError, и выполнение программы прекращает- ся с выводом на консоль значения выражения expression (если оно задано).
-
Класс File. Байтовые и символьные потоки ввода/вывода. Предопределенные потоки.
Для работы с физическим файлами и каталогами (директориями), располо- женными на внешних носителях, в приложениях Java используются классы из пакета java.io. Класс File служит для хранения и обработки в качестве объектов каталогов и имен файлов. Этот класс не содержит методы для работы с содержимым файла, но позволяет манипулировать такими свойствами файла, как права доступа, дата и время создания, путь в иерархии каталогов, создание, удаление файла, изменение его имени и каталога и т.д.
При создании объекта класса File любым из конструкторов компилятор не выполняет проверку на существование физического файла с заданным путем. Существует разница между разделителями, употребляющимися при записи пути к файлу: для системы Unix – “/”, а для Windows – “\\”. Для случаев, когда неизвестно, в какой системе будет выполняться код, предусмотрены специальные поля в классе File: public static final String separator; public static final char separatorChar; С помощью этих полей можно задать путь, универсальный в любой системе: File myFile = new File(File.separator + ”com” + File.separator + ”myfile.txt” ); Также предусмотрен еще один тип разделителей – для директорий: public static final String pathSeparator; public static final char pathSeparatorChar; К примеру, для ОС Unix значение pathSeparator=”;”, а для Windows – pathSeparator=”:”.
При создании приложений всегда возникает необходимость прочитать инфор- мацию из какого-либо источника и сохранить результат. Действия по чтению/за- писи информации представляют собой стандартный и простой вид деятельности. Самые первые классы ввода/вывода связаны с передачей и извлечением последо- вательности байтов. Потоки ввода последовательности байтов являются подклассами абстракт- ного класса InputStream, потоки вывода подклассами абстрактного класса OutputStream. Эти классы являются суперклассами для ввода массивов бай- тов, строк, объектов, а также для выбора из файлов и сетевых соединений. При работе с файлами используются подклассы этих классов соответственно FileInputStream и FileOutputStream, конструкторы которых открыва- ют поток и связывают его с соответствующим физическим файлом.
Для чтения байта или массива байтов используются абстрактные методы read() и read(byte[] b) класса InputStream. Метод возвращает -1, если достигнут конец потока данных, поэтому возвращаемое значение имеет тип int, не byte. При взаимодействии с информационными потоками возмож- ны различные исключительные ситуации, поэтому обработка исключений вида try-catch при использовании методов чтения и записи является обязатель- ной. В конкретных классах потоков ввода указанные выше методы реализованы в соответствии с предназначением класса. В классе FileInputStream данный метод читает один байт из файла, а поток System.in как встроенный объект подкласса InputStream позволяет вводить информацию с консоли. Абстракт- ный метод write(int b) класса OutputStream записывает один байт в поток вывода. Оба эти метода блокируют поток до тех пор, пока байт не будет записан или прочитан. После окончания чтения или записи в поток его всегда следует закрывать с помощью метода close(), для того чтобы освободить ре- сурсы приложения.
В отличие от классов FileInputStream и FileOutputStream класс RandomAccessFile позволяет осуществлять произвольный доступ к потокам как ввода, так и вывода. Поток рассматривается при этом как массив байтов, до- ступ к элементам осуществляется с помощью метода seek(long poz). Для создания потока можно использовать один из конструкторов: RandomAccessFile(String name, String mode); RandomAccessFile(File file, String mode);
Система ввода/вывода языка Java содержит стандартные потоки ввода, выво- да и вывода ошибок. Класс System пакета java.lang содержит поле in, ко- торое является ссылкой на объект класса InputStream, и поля out, err – ссылки на объекты класса PrintStream, объявленные со спецификаторами public static и являющиеся стандартными потоками ввода, вывода и вы- вода ошибок соответственно. Эти потоки связаны с консолью, но могут быть переназначены на другое устройство.