
- •Амурский государственный университет Факультет математики и информатики
- •Допущено учебно-методическим объединением (умо) вузов
- •Методические указания к лабораторной работе
- •1. Простейшее приложение Hello
- •2. Структура Java-программы
- •2.1 Переменные
- •2.1.1 Примитивные типы
- •2.1.2 Ссылочные типы
- •2.2 Методы
- •2.3 Классы
- •2.3.1 Статические и динамические элементы (модификатор static)
- •2.3.2 Модификаторы доступа
- •2.3.3 Наследование классов
- •2.3.4 Специальные переменные
- •2.4 Пакеты и импортирование
- •2.4.1 Использование пакетов
- •2.4.2 Создание пакетов
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Простейший апплет Hello
- •1.1 Апплет Неllo, управляемый мышью
- •2. Простейший апплет HelloApplet, созданный Java Applet Wizard
- •2.1 Создание шаблона апплета HelloApplet
- •2.2 Исходные файлы апплета HelloApplet
- •2.3 Упрощенный вариант исходного текста апплета HelloApplet
- •3. Аргументы апплета
- •3.1 Передача параметров апплету
- •3.2 Апплет, принимающий параметры
- •3.4 Двойная буферизация графического изображения
- •4. События и их обработка
- •4.1 Обработчики событий от мыши и клавиатуры
- •4.2 Обработка событий
- •4.3 Апплет, обрабатывающий события
- •4.4 Устранение мерцания при выводе, двойная буферизация
- •5. Апплеты двойного назначения
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Рисование в окне
- •1.1 Графика
- •1.2 Цвет
- •1.3 Шрифты
- •1.4 Приложение FontsList
- •2. Обработка событий
- •2.1 Как обрабатываются события
- •2.2 События от мыши
- •2.3 Приложение LinesDraw
- •2.4 События от клавиатуры
- •2.5 Приложение KeyCodes
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Компоненты gui
- •2. Устройства или элементы управления
- •2.1 Кнопки
- •2.2 Флажки (или переключатели)
- •2.3 Меню выбора (или выпадающие списки)
- •2.4 Раскрывающиеся списки
- •2.5 Полосы прокрутки
- •2.6 Метки
- •2.7 Текстовые компоненты
- •3. Приложение AllElements
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Контейнеры
- •1.1 Панели
- •1.2 Окна
- •1.3 Рамки, фреймы
- •2. Менеджеры размещения компонентов
- •2.1 Типы менеджеров размещения
- •3. Поведение контейнера при наличии элементов управления
- •4. Приложение PanelsDemo1
- •5. Приложение PanelsDemo2
- •6. Приложение WindowsDemo
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Процессы, задачи и приоритеты
- •2. Реализация многозадачности в Java
- •2.1 Создание подкласса Thread
- •2.2 Реализация интерфейса Runnable
- •2.3 Применение мультизадачности для анимации
- •2.4 Апплет двойного назначения, реализующий интерфейс Runnable
- •3. Потоки (нити)
- •3.1 Состояние потока
- •3.2 Исключительные ситуации для потоков
- •3.3 Приоритеты потоков
- •3.4 Группы потоков
- •4. Приложение VertScroller
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Автономные приложения. Потоки данных. Работа с локальными файлами (2 часа) методические указания к лабораторной работе
- •1. Самостоятельные графические приложения
- •2. Потоки ввода-вывода в Java
- •2.1. Обзор классов Java для работы с потоками
- •2.2 Стандартные потоки ввода-вывода
- •2.3 Потоки, связанные с локальными файлами
- •2.3.1 Создание потоков, связанных с локальными файлами
- •2.3.2 Запись данных в поток и чтение их из потока
- •2.3.3 Закрытие потоков
- •2.3.4 Принудительный сброс буферов
- •2.3.5 Приложение StreamDemo
- •2.4 Потоки в оперативной памяти
- •3 Работа с локальной файловой система
- •3.1 Работа с файлами и каталогами
- •3.2 Приложение DirList
- •3.3 Произвольный доступ к файлам
- •3.4 Просмотр локальной файловой системы
- •3.5 Приложение FileDialogDemo
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Сетевые приложения: передача данных с использованием сокетов (2 часа)
- •1. Сокеты
- •2. Протокол tcp/ip, адрес ip и класс InetAddress
- •3. Потоковые сокеты
- •3.1 Создание и использование канала передачи данных
- •3.2 Конструкторы и методы класса Socket
- •3.3 Пример использования потоковых сокетов
- •4. Датаграммные сокеты (несвязываемые датаграммы)
- •4.1 Конструкторы и методы класса DatagramSocket
- •4.3 Пример использования датаграммных сокетов
- •5 Приложения ServerSocketApp и ClientSocketApp
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Связь по сети с помощью url (2 часа) методические указания к лабораторной работе
- •1. Универсальный адрес ресурсов url
- •2. Класс java.Net.Url в библиотеке классов Java
- •3. Использование класса java.Net.Url
- •3.1 Чтение из потока класса InputStream, полученного от объекта класса url
- •3.2 Получение содержимого файла, связанного с объектом класса url
- •4. Соединение с помощью объекта класса urlConnection
- •5. Приложение Diagram
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Создание и использование сервлетов (2 часа) методические указания к лабораторной работе
- •1. Как устроен сервлет
- •2. Вспомогательные классы
- •3. Запуск и настройка сервлетов
- •4. Сервлет example, принимающий параметры
- •5. Сервлет, обрабатывающий запросы на основе методов cet и post
- •6. Сервлет MyselfInfo
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Работа с базами данных, использование интерфейса jdbc(2 часа) методические указания к лабораторной работе
- •1. Написание апплетов, сервлетов и приложений jdbc
- •1.1 Соединение с базой данных
- •1.2 Применение интерфейса DatabaseMetaData
- •1.3 Посылка статичных sql-запросов
- •1.4 Посылка параметризированных и частовыполняемых sql-запросов
- •1.5 Выборка результатов
- •1.6 Применение интерфейса ResultSetMetaData
- •1.7 Доступ к хранимым функциям и процедурам
- •1.8 Применение выходных параметров
- •2. Обработка исключений jdbc
- •3. Отладка приложений jdbc
- •4. Сервлет, работающий с информацией из базы данных
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Приложение 1 java-файл простейшего апплета и html-документ со ссылкой на него
- •Приложение 2 java-файл апплета, принимающего параметры, и html-документ со ссылкой на него
- •Приложение 3 java-файл апплета, обрабатывающего простые события мыши, и html-документ со ссылкой на него
- •Приложение 4 java-файлы апплета двойного назначения и html-документ со ссылкой на него
- •Приложение 5 java-файлы апплета двойного назначения, обрабатывающего сообщения от мыши, и html-документ со ссылкой на него
- •Приложение 6 java-файл апплета двойного назначения, реализующего интерфейс runnable, и html-документ со ссылкой на него
- •Приложение 7 самостоятельное графическое java-приложение
1. Простейший апплет Hello
Исходный текст Java-файла простейшего апплета выглядит следующим образом:
/*------------- Пример 1. Файл Hello.java -------------*/
import java.applet.*;
import java.awt.*;
public class Hello extends Applet
{
public void init()
{ resize(150,150);
}
public void paint(Graphics g)
{ g.drawString("Hello, WWW", 10, 20);
}
}/*-----------------------------------------------------------*/
Файл HTML-документа со ссылкой на апплет Hello должен содержать следующий код:
<!-- .............. Пример 1. HTML-файл .............. -->
<html>
<head>
<title>Hello</title>
</head>
<body>
<applet code=Hello.class width=200 height=200></applet>
</body>
</html>
<!-- ........................................................................ -->
Теперь рассмотрим, из каких обязательных частей состоит апплет. Класс Hello, определенный в этом апплете, также является первичным классом, хотя он достаточно сильно отличается от первичных классов для простых приложений. Для обычной Java-программы необходимо было определить только один обязательный метод в первичном классе - метод main(). В первичном классе апплета необходимо определить как минимум два метода. Другие методы определяются в случае необходимости создания некоторых специальных эффектов.
Класс Hello определяется как public, а это значит, что он доступен для других объектов. Кроме того, явно установлен суперкласс класс Hello. Им является класс Applet (java.applet.Applet). Класс Applet должны расширять все апплеты, в том числе и класс Hello. Покажем иерархию классов (или дерево наследования) для апплетов:
Hello Aplet Panel Container Component Object
Класс Hello наследует данные и поведение класса Applet. Являясь подклассом класса Applet, класс Hello может считаться его более специализированным вариантом.
Большинство апплетов объявляет как минимум два метода: init() и paint(). Эти методы уже существуют в классе Applet, расширяемом всеми апплетами, включая и подкласс Hello. Объявление в подклассе метода с тем же самым именем, который есть и в суперклассе, заменяет метод суперкласса методом подкласса. Таким образом, происходит переопределение методов суперкласса с помощью специализированных версий этих методов подкласса.
Переопределяемый метод init() не имеет параметров, ничего не возвращает и объявляется открытым. Единственное, что делает в этом методе апплет Hello - это заставляет изменить размеры окна апплета. Метод resize() является методом класса Applet, поэтому можно использовать его и другие методы этого класса.
Вторым переопределяемым методом является paint(), который представляет собой подпрограмму, используемую для создания на экране изображения. Подобно методу init(), он объявлен открытым и ничего не возвращает. Но у него есть параметр, а именно - объект класса Graphics. Методами этого класса можно пользоваться для вывода графической информации в окно апплета.
Рассмотрим еще раз более систематизировано основные различия между первичным классом апплета и обычной Java-программы:
Ни один из методов в первичном классе апплета не является статическим. Из этого можно сделать вывод, что этот класс должен быть в какой-то момент явным образом реализован (в отличие от первичного класса приложения). Но в тексте апплета Hello оператора реализации класса нет. Отсюда следует, что оболочка времени выполнения апплета, встроенная в WWW-броузер, сама реализует первичный класс апплета.
Первичный класс апплета является расширением класса Applet (или подклассом Applet). Класс Applet включает в себя те функции, которые должен иметь каждый апплет.
Если проверить выполнение апплета Hello, то видно, что оба включенных в первичный класс метода отработали несмотря на то, что код самого апплета не содержал явных вызовов этих методов. Это объясняется тем, что также, как и оболочка времени выполнения Java сама ищет и вызывает метод main() в первичном классе программы, оболочка времени апплета самостоятельно вызывает методы, входящие в подкласс Hello класса Applet.
Для более полного понимания принципа функционирования апплетов обратим особое внимание на последний пункт. В обычных приложениях оболочка времени выполнения вызывает метод main(), который вызывал остальные методы и реализовывал алгоритм программы. В отличие от этого, когда оболочка времени выполнения броузера запускает апплет, она прежде всего ищет и вызывает метод init(). Метод init() выполняет только служебные действия и не отвечает за работу всей программы. Метод же paint() вызывается самой системой всегда, когда содержимое окна требуется обновить. Например, если при работе в Windows окно броузера перекрыть окном другого Windows-приложения, то после того, как окно броузера снова откроется, система сразу же вызовет метод paint(), чтобы восстановить содержимое окна.
За исключением того факта, что оболочка времени выполнения броузера во время работы апплета сама вызывает методы, которые являются переопределениями методов стандартного класса Applet, первичный подкласс апплета ведет себя также, как и первичные классы простых приложения. В первичном классе апплета также можно определять новые методы (а не только переопределять методы, определенные в стандартном классе Applet), объявлять переменные и реализовывать новые классы.