- •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
- •Портлеты
Нововведения версий 5.0 и 6.0
В версии языка J2SE 5.0 внесены некоторые изменения и усовершенствования:
введена возможность параметризации класса;
поддерживается перечисляемый тип;
упрощен обмен информацией между примитивными типами данных и их классами-оболочками;
разрешено определение метода с переменным количеством параметров;
возможен статический импорт констант и методов;
улучшен механизм формирования коллекций;
добавлен форматированный консольный ввод/вывод;
увеличено число математических методов;
введены новые способы управления потоками;
используется поддержка стандарта Unicode 4.0;
добавлены аннотации, новые возможности в ядре и др.
Для версии Java SE 6 характерны высокая скорость, стабильность и оптимальное потребление памяти.
Изменения и усовершенствования:
новый механизм исполнения сценариев Scripting API;
поддержка Java-XML Web Service (JAX-WS) для создания приложений поколения Web 2.0;
улучшены возможности интернационализации ПО, в том числе использования различных региональных форматов и методов преобразования данных;
новый набор java.awt.Desktop API;
поддержка области состояния: два новых класса, SystemTray и TrayIcon;
модернизация в Java Foundation Classes (JFC) и Swing;
Java-XML Binding (JAXB 2.0);
JDBC 4.0.
Простое приложение
Изучение любого языка программирования удобно начинать с программы вывода обычного сообщения.
// пример # 1 : простое линейное приложение: First.java
package chapt01;
public class First {
public static void main(String[] args) {
// вывод строк
System.out.print("Мустанг ");
System.out.println("уже здесь!");
}
}
В следующем примере то же самое будет сделано с использованием метода класса, реализованного на основе простейшего применения объектно-ориентированного программирования:
/* пример # 2 : простое объектно-ориентированное приложение :
FirstProgram.java */
package chapt01;
public class FirstProgram {
public static void main(String[] args) {
//объявление и создание объекта firstObject
MustangLogic firstObject = new MustangLogic();
//вызов метода, содержащего вывод строки
firstObject.jumpMustang();
}
}
// пример # 3 : простой класс: MustangLogic
class MustangLogic {
public void jumpMustang() {// определение метода
// вывод строки
System.out.println("Мустанг уже здесь!");
}
}
Здесь класс FirstProgram используется для того, чтобы определить метод main(), который запускается автоматически интерпретатором Java и может называться контроллером этого простейшего приложения. Метод main() содержит аргументы-параметры командной строки String[] args, представляющие массив строк, и является открытым (public) членом класса. Это означает, что метод main() виден и доступен любому классу. Ключевое слово static объявляет методы и переменные класса, используемые при работе с классом в целом, а не только с объектом класса. Символы верхнего и нижнего регистров здесь различаются, как и в С++. Тело метода main() содержит объявление объекта
MustangLogic firstObject = new MustangLogic();
и вызов его метода
firstObject.jumpMustang();
Вывод строки "Мустанг уже здесь!" в примере осуществляет метод println() (ln – переход к новой строке после вывода) свойства out класса System, который подключается к приложению автоматически вместе с пакетом java.lang. Приведенную программу необходимо поместить в файл FirstProgram.java (расширение .java обязательно), имя которого совпадает с именем класса.
Объявление классов предваряет строка
package chapt01;
указывающая на принадлежность классов пакету с именем chapt01, который является на самом деле каталогом на диске. Для приложения, состоящего из двух классов, наличие пакетов не является необходимостью. При отсутствии слова package классы будут отнесены к пакету по умолчанию, размещенному в корне проекта. Если же приложение состоит из нескольких сотен классов (вполне обычная ситуация), то размещение классов по пакетам является жизненной необходимостью.
Классы из примеров 2 и 3 сохраняются в файлах FirstProgram.java. На практике рекомендуется хранить классы в отдельных файлах.
Простейший способ компиляции – вызов строчного компилятора из корневого каталога (в нем находится каталог chapt01):
javac chapt01/FirstProgram.java
При успешной компиляции создаются файлы FirstProgram.class и Mustang.class. Запустить этот виртуальный код можно с помощью интерпретатора Java:
java chapt01.FirstProgram
Здесь к имени приложения FirstProgram.class добавляется имя пакета chapt01, в котором он расположен.
Чтобы выполнить приложение, необходимо загрузить и установить последнюю версию пакета, например с сайта java.sun.com. При инсталляции рекомендуется указывать для размещения корневой каталог. Если JDK установлена в директории (для Windows) c:\jdk1.6.0, то каталог, который компилятор Java будет рассматривать как корневой для иерархии пакетов, можно вручную задавать с помощью переменной среды окружения СLASSPATH в виде:
СLASSPATH=.;c:\jdk1.6.0\
Переменной задано еще одно значение ‘.’ для использования текущей директории, например с:\temp, в качестве рабочей для хранения своих собственных приложений.
Чтобы можно было вызывать сам компилятор и другие исполняемые программы, переменную PATH нужно проинициализировать в виде
PATH=c:\jdk1.6.0\bin
Этот путь указывает на месторасположение файлов javac.exe и java.exe. В различных версиях операционных систем путь к JDK может указываться различными способами.
Однако при одновременном использовании нескольких различных версий компилятора и различных библиотек применение переменных среды окружения начинает мешать эффективной работе, так как при выполнении приложения поиск класса осуществляется независимо от версии. Когда виртуальная машина обнаруживает класс с подходящим именем, она его и подгружает. Такая ситуация предрасполагает к ошибкам, порой трудноопределимым. Поэтому переменные окружения лучше не определять вовсе.
Следующая программа отображает в окне консоли аргументы командной строки метода main(). Аргументы представляют последовательность строк, разделенных пробелами, значения которых присваиваются объектам массива String[] args. Объекту args[0] присваивается значение первой строки и т.д. Количество аргументов определяется значением args.length.
/* пример # 4 : вывод аргументов командной строки: OutArgs.java */
package chapt01;
public class OutArgs {
public static void main(String[] args) {
for (String str : args)
System.out.printf("Aрг-> %s%n", str);
}
}
В данном примере используется новый вид цикла версии Java 5.0 for языка Java и метод форматированного вывода printf(). Тот же результат был бы получен при использовании традиционного цикла
for (int i = 0; i < args.length; i++)
System.out.println("Aрг-> " + args[i]);
Запуск этого приложения осуществляется с помощью следующей командной строки вида:
java chapt01.OutArgs 2007 Mustang "Java SE 6"
что приведет к выводу на консоль следующей информации:
Арг-> 2007
Арг-> Mustang
Арг-> Java SE 6
Приложение, запускаемое с аргументами командной строки, может быть использовано как один из способов ввода строковых данных.