- •724 Содержание
- •Глава 6. Интерфейсы и внутренние классы 139
- •У казания и ответы
- •Вопрос 3.2.
- •Вопрос 8.2.
- •Вопрос 8.3.
- •Вопрос 14.2.
- •Вопрос 21.5.
- •Ч асть 1. Основы языка java
- •Глава 1 введение в классы и объекты Основные понятия ооп
- •Язык Java
- •Нововведения версий 5.0 и 6.0
- •Простое приложение
- •Классы и объекты
- •Сравнение объектов
- •Консоль
- •Простой апплет
- •Задания к главе 1 Вариант a
- •Вариант b
- •Тестовые задания к главе 1
- •Вопрос 1.5.
- •Г лава 2 типы данных и операторы
- •Базовые типы данных и литералы
- •Документирование кода
- •Операторы
- •Классы-оболочки
- •Операторы управления
- •Массивы
- •Класс Маth
- •Управление приложением
- •Задания к главе 2 Вариант a
- •Вариант в
- •Тестовые задания к главе 2
- •Переменные класса и константы
- •Ограничение доступа
- •Конструкторы
- •Статические методы и поля
- •Модификатор final
- •Абстрактные методы
- •Модификатор native
- •Модификатор synchronized
- •Логические блоки
- •Перегрузка методов
- •Параметризованные классы
- •Параметризованные методы
- •Методы с переменным числом параметров
- •Перечисления
- •1 : Fpmi : Балаганов
- •Аннотации
- •Задания к главе 3 Вариант a
- •Вариант b
- •Тестовые задания к главе 3
- •Использование final
- •Использование super и this
- •Переопределение методов и полиморфизм
- •Методы подставки
- •Полиморфизм и расширяемость
- •Статические методы и полиморфизм
- •Абстракция и абстрактные классы
- •Класс Object
- •Клонирование объектов
- •“Сборка мусора” и освобождение ресурсов
- •Задания к главе 4 Вариант a
- •Вариант в
- •Тестовые задания к главе 4
- •Вопрос 4.7.
- •Г лава 5 проектирование классов Шаблоны проектирования grasp
- •Шаблон Expert
- •Шаблон Creator
- •Шаблон Low Coupling
- •Шаблон High Cohesion
- •Шаблон Controller
- •Шаблоны проектирования GoF
- •Порождающие шаблоны
- •К порождающим шаблонам относятся:
- •Шаблон Factory
- •Шаблон AbstractFactory
- •Шаблон Builder
- •Шаблон Singleton
- •Структурные шаблоны
- •К структурным шаблонам относятся:
- •Шаблон Bridge
- •Шаблон Decorator
- •Шаблоны поведения
- •К шаблонам поведения относятся:
- •Шаблон Command
- •Шаблон Strategy
- •Шаблон Observer
- •Тестовые задания к главе 5
- •Статический импорт
- •Внутренние классы
- •Внутренние (inner) классы
- •Вложенные (nested) классы
- •Анонимные (anonymous) классы
- •Задания к главе 6 Вариант а
- •Вариант b
- •Вариант c
- •Тестовые задания к главе 6
- •Вопрос 6.5.
- •Класс String
- •Классы StringBuilder и StringBuffer
- •Форматирование строк
- •Лексический анализ текста
- •Регулярные выражения
- •Интернационализация текста
- •Интернационализация чисел
- •Интернационализация дат
- •3 Апрель 2006 г.
- •Задания к главе 7 Вариант a
- •Вариант b
- •Тестовые задания к главе 7
- •Оператор throw
- •Ключевое слово finally
- •Собственные исключения
- •Наследование и исключения
- •Отладочный механизм assertion
- •Задания к главе 8
- •Байтовые и символьные потоки ввода/вывода
- •Предопределенные потоки
- •Сериализация объектов
- •Консоль
- •Класс Scanner
- •Архивация
- •Задания к главе 9 Вариант a
- •Вариант b
- •Вариант с
- •Тестовые задания к главе 9
- •Множества
- •Карты отображений
- •14El - найден по ключу '12'
- •Унаследованные коллекции
- •Класс Collections
- •Класс Arrays
- •Задания к главе 10 Вариант a
- •Вариант b
- •Тестовые задания к главе 10
- •Апплеты
- •Задания к главе 11
- •Тестовые задания к главе 11
- •Классы-адаптеры
- •Задания к главе 12
- •Тестовые задания к главе 12 Вопрос 12.1.
- •Вопрос 12.2.
- •Вопрос 12.3.
- •Вопрос 12.4.
- •Вопрос 12.5.
- •Г лава 13 элементы компоновки и управления
- •Менеджеры размещения
- •Элементы управления
- •Визуальные компоненты JavaBeans
- •Задания к главе 13 Вариант а
- •Вариант b
- •Жизненный цикл потока
- •Управление приоритетами и группы потоков
- •Управление потоками
- •Потоки-демоны
- •Потоки в графических приложениях
- •Методы synchronized
- •Инструкция synchronized
- •Состояния потока
- •Потоки в j2se 5
- •Задания к главе 14 Вариант а
- •Вариант b
- •Тестовые задания к главе 14
- •Вопрос 14.1.
- •Вопрос 14.2.
- •Вопрос 14.3.
- •Вопрос 14.4.
- •Вопрос 14.5.
- •Г лава 15 сетевые программы Поддержка Интернет
- •Сокетные соединения по протоколу tcp/ip
- •Многопоточность
- •Датаграммы и протокол udp
- •Задания к главе 15 Вариант а
- •Вариант b
- •Древовидная модель
- •Элементы таблицы стилей
- •Задания к главе 16 Вариант а
- •Тестовые задания к главе 16
- •Запуск контейнера сервлетов и размещение проекта
- •Первая jsp
- •Взаимодействие сервлета и jsp
- •Задания к главе 17 Вариант а
- •Вариант b
- •Интерфейс ServletContext
- •Интерфейс ServletConfig
- •Интерфейсы ServletRequest и HttpServletRequest
- •Интерфейсы ServletResponse и HttpServletResponse
- •Обработка запроса
- •Многопоточность
- •Электронная почта
- •Задания к главе 18 Вариант а
- •Вариант b
- •Стандартные элементы action
- •Неявные объекты
- •Демонстрация работы тегов c:forEach, c:choose, c:when, c:otherwise
- •Данная страница демонстрирует работу тегов
- •Включение ресурсов
- •Обработка ошибок
- •Технология взаимодействия jsp и сервлета
- •Задания к главе 19
- •Вариант а
- •Вариант b
- •Субд MySql
- •Простое соединение и простой запрос
- •Метаданные
- •Подготовленные запросы и хранимые процедуры
- •Транзакции
- •Id студента: 83, Petrov Внесены данные в students: 83, Petrov Внесены данные в course: 83, xml Данные внесены - транзакция завершена
- •Точки сохранения
- •Пул соединений
- •Задания к главе 20 Вариант а
- •Вариант b
- •Обработка событий
- •Фильтры
- •Задания к главе 21 Вариант а
- •Вариант b
- •Вопрос 21.5.
- •Вопрос 21.6.
- •Г лава22 пользовательские теги
- •Простой тег
- •Тег с атрибутами
- •Тег с телом
- •Элементы action
- •Задания к главе 22 Вариант а
- •Вариант b
- •П риложение 2
- •Включение скриптов на языке JavaScript в html-код
- •Отладка скриптов JavaScript
- •Типы данных
- •Специальные числа
- •Булев тип
- •Переменные типа Undefined и Null
- •Массивы
- •Операторы и выражения
- •Оператор with
- •Оператор switch
- •Метод eval()
- •Функции
- •Передача параметров по значению и по ссылке
- •Глобальные и локальные переменные
- •Пользовательские объекты
- •Прототипы
- •Встроенные объекты Array, Date, Math Объект Array
- •Объект Date
- •Объект Math
- •Объекты window и document
- •Создание новых узлов
- •Добавление новых узлов в документ
- •Удаление и замена узлов в документе
- •Использование каскадных таблиц стилей в dom
- •Свойство элемента innerHtml и outerHtml
- •Динамическое назначение событий
- •Ключевое слово this
- •П риложение3
- •Проектная модель
- •Uml как программный язык
- •Нотации и метамодель
- •Диаграммы, которые ниже будут рассмотрены с разной степенью детализации:
- •Свойства
- •Множественность
- •Операторы
- •П риложение 4 базы данных и язык sql
- •Реляционные субд Модель данных в реляционных субд
- •Нормализация модели данных
- •Язык sql
- •Команды sql
- •Команды определения структуры данных (DataDefinitionLanguage–ddl)
- •Команды манипулирования данными (Data Manipulation Language – dml)
- •Команды управления транзакциями (TransactionControlLanguage–tcl)
- •Команды управления доступом (DataControlLanguage–dcl)
- •Работа с командами sql
- •Ключевое слово distinct
- •Секция from, логическое связывание таблиц
- •Секция where
- •Секция orderby
- •Групповые функции
- •Секция group by
- •Секция having
- •Изменение данных
- •Команда insert
- •Команда delete
- •Команда update
- •Определение структуры данных Команда createtable
- •Команда droptable
- •П риложение5
- •П риложение 6
- •П риложение7 журнал сообщений (logger)
- •П риложение 8
- •Портлеты
Отладочный механизм assertion
Борьба за качество программ ведется всеми возможными способами. На этапе отладки найти неявные ошибки в функционировании приложения бывает довольно сложно. Например, в методе, устанавливающем возраст пользователя, информация о возрасте извлекается из внешних источников (файл, БД), и в результате получается отрицательное значение. Далее неверные данные влияют на результат вычисления среднего возраста пользователей и т.д. Определять и исправлять такие ситуации позволяет механизм проверочных утверждений (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 (если оно задано).
Механизм assertion хорошо подходит для проверки инвариантов, например, перечислений:
enum Mono { WHITE, BLACK }
…
String str = "WHITE";//"GRAY"
Mono mono = Mono.valueOf(str);
// …
switch (mono) {
case WHITE : // …
break;
case BLACK : // …
break;
default :
assert false : "Colored!";
}
Создателями языка не рекомендуется использовать assertion при проверке параметров public-методов. В таких ситуациях лучше генерировать исключения одного из типов: IllegalArgumentException, NullPointerException или собственное исключение. Нет также особого смысла в механизме assertion при проверке пограничных значений переменных, поскольку исключительные ситуации генерируются в этом случае без посторонней помощи.
Assertion можно включать для отдельных классов и пакетов при запуске виртуальной машины в виде:
java –enableassertions MyClass
или
java –ea MyClass
Для выключения применяется –da или -disableassertions.
Задания к главе 8
Вариант A
Выполнить задания на основе варианта А главы 4, контролируя состояние потоков ввода/вывода. При возникновении ошибок, связанных с корректностью выполнения математических операций, генерировать и обрабатывать исключительные ситуации. Предусмотреть обработку исключений, возникающих при нехватке памяти, отсутствии требуемой записи (объекта) в файле, недопустимом значении поля и т.д.
Вариант B
Выполнить задания из варианта В главы 4, реализуя собственные обработчики исключений и исключения ввода/вывода.
Тестовые задания к главе 8
Вопрос 8.1.
Дан код:
class Quest1{
int counter;
java.io.OutputStream out;
Quest1(){/* инициализация out */}
float inc() {
try { counter++; out.write(counter); }
//комментарий
}}
Какой код достаточно добавить в метод inc() вместо комментария, чтобы компиляция прошла без ошибок? (выберите два).
catch (java.io.OutputStreamException e){};
catch (java.io.IOException e){};
catch (java.io.OutputException e){};
finally{};
return counter;
return;.
Вопрос 8.2.
Какое значение будет возвращено при вызове meth(5)?
public int meth(int x) {
int y = 010; //1 try { y += x; //2
if(x<=5) throw new Exception(); //3
y++; } //4 catch(Exception e) { y--; } //5
return y; } //6
12;
13;
14;
15;
ошибка компиляции: невыполнимый код в строке 4.
Вопрос 8.3.
Какое значение будет возвращено при вызове meth(12), если при вызове mexcept(int x) возникает исключительная ситуация ArithmeticException?
int meth(int x) {
int count=0;
try { count += x;
count += mexcept(count);
count++;
}catch(Exception e) {
--count;
return count;
}
finally {
count += 3;
return count;
}
}
11;
12;
13;
14;
ошибка компиляции из-за отсутствия return после блока finally.
Вопрос 8.4.
Какое из следующих определений метода show() может законно использоваться вместо комментария //КОД в классе Quest4?
class Base{
public void show(int i) {/*реализация*/} } public class Quest4 extends Base{ //КОД }
void show (int i) throws Exception {/*реализация*/}
void show (long i) throws IOException {/*реализация*/}
void show (short i){ /*реализация*/}
public void show (int i) throws IOException {/*реализация*/}
Вопрос 8.5.
Дан код:
import java.io.*;
public class Quest5 {
//ОБЪЯВЛЕНИЕ ioRead()
public static void main(String[] args) {
try {
ioRead();
}catch(IOException e){}
}}
Какое объявление метода ioRead() должно быть использовано вместо комментария, чтобы компиляция и выполнение кода прошли успешно?
private static void ioRead()
throws IOException{};
public static void ioRead()
throw IOException{};
public static void ioRead(){};
public static void ioRead()
throws Exception{}.
Г
ФАЙЛЫ. ПОТОКИ ВВОДА/ВЫВОДА
Потоки ввода/вывода используются для передачи данных в файловые потоки, на консоль или на сетевые соединения. Потоки представляют собой объекты соответствующих классов. Библиотека ввода/вывода предоставляет пользователю большое число классов и методов и постоянно обновляется.
Класс File
Для работы с физическим файлами и каталогами (директориями), расположенными на внешних носителях, в приложениях Java используются классы из пакета java.io.
Класс File служит для хранения и обработки в качестве объектов каталогов и имен файлов. Этот класс не содержит методы для работы с содержимым файла, но позволяет манипулировать такими свойствами файла, как права доступа, дата и время создания, путь в иерархии каталогов, создание, удаление файла, изменение его имени и каталога и т.д.
Объект класса File создается одним из нижеприведенных способов:
File myFile = new File(”\\com\\myfile.txt”);
File myDir = new File(”c:\\jdk1.6.0\\src\\java\\io”);
File myFile = new File(myDir, ”File.java”);
File myFile = new File(”c:\\com”, ”myfile.txt”);
File myFile = new File(new URI(”Интернет-адрес”));
В первом случае создается объект, соответствующий файлу, во втором – подкаталогу. Третий и четвертый случаи идентичны. Для создания объекта указывается каталог и имя файла. В пятом – создается объект, соответствующий адресу в Интернете.
При создании объекта класса 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=”:”.
В классе File объявлено более тридцати методов, наиболее используемые из них рассмотрены в следующем примере:
/* пример # 1 : работа с файловой системой: FileTest.java */
package chapt09;
import java.io.*;
import java.util.*;
public class FileTest {
public static void main(String[] args) {
//c объектом типа File ассоциируется файл на диске FileTest2.java
File fp = new File("chapt09" + File.separator
+ "FileTest2.java");
if(fp.exists()) {
System.out.println(fp.getName() + " существует");
if(fp.isFile()) {//если объект – дисковый файл
System.out.println("Путь к файлу:\t"
+ fp.getPath());
System.out.println("Абсолютный путь:\t"
+ fp.getAbsolutePath());
System.out.println("Размер файла:\t"
+ fp.length());
System.out.println("Последняя модификация :\t"
+ new Date(fp.lastModified()));
System.out.println("Файл доступен для чтения:\t"
+ fp.canRead());
System.out.println("Файл доступен для записи:\t"
+ fp.canWrite());
System.out.println("Файл удален:\t"
+ fp.delete());
}
} else
System.out.println("файл " + fp.getName()
+ " не существует");
try{
if(fp.createNewFile())
System.out.println("Файл " + fp.getName()
+ " создан");
} catch(IOException e) {
System.err.println(e);
}
//в объект типа File помещается каталог\директория
// в корне проекта должен быть создан каталог com.learn с несколькими файлами
File dir = new File("com" + File.separator + "learn");
if (dir.exists() && dir.isDirectory())/*если объект
является каталогом и если этот
каталог существует */
System.out.println("каталог "
+ dir.getName() + " существует");
File[] files = dir.listFiles();
for(int i = 0; i < files.length; i++){
Date date = new Date(files[i].lastModified());
System.out.print("\n" + files[i].getPath()
+ " \t| " + files[i].length() + "\t| "
+ date.toString());
//использовать toLocaleString() или toGMTString()
}
// метод listRoots() возвращает доступные корневые каталоги
File root = File.listRoots()[1];
System.out.printf("\n%s %,d из %,d свободно.", root.getPath(),root.getUsableSpace(),root.getTotalSpace());
}
}
В результате файл FileTest2.java будет очищен, а на консоль выведено:
FileTest2.java существует
Путь к файлу: chapt09\FileTest2.java
Абсолютный путь: D:\workspace\chapt09\FileTest2.java
Размер файла: 2091
Последняя модификация : Fri Mar 31 12:26:50 EEST 2006
Файл доступен для чтения: true
Файл доступен для записи: true
Файл удален: true
Файл FileTest2.java создан
каталог learn существует
com\learn\bb.txt | 9 | Fri Mar 24 15:30:33 EET 2006
com\learn\byte.txt| 8 | Thu Jan 26 12:56:46 EET 2006
com\learn\cat.gif | 670 | Tue Feb 03 00:44:44 EET 2004
C:\ 3 665 334 272 из 15 751 376 896 свободно.
У каталога как объекта класса File есть дополнительное свойство просмотр списка имен файлов с помощью методов list(), listFiles(), listRoots().