- •Интернет технологии
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •2. Перечень тем лабораторных занятий, их содержание и объем в часах
- •3.Индивидуальные практические работы, их характеристики
- •Теоретический раздел Лекции
- •1. Общая характеристика языкаJava
- •1.1 Что такоеJava?
- •1.2 ВыполнениеJava-программы
- •1.3 Что такоеJdk?
- •1.4 Установка и использованиеJdk
- •2. СинтаксисJava.
- •2.1 Первая программа наJava
- •2.2 Комментарии
- •2.3 Константы
- •2.4 Имена
- •2.5 Примитивные типы и операции над ними.
- •2.6 Выражения
- •2.7 Операторы
- •2.7 Массивы
- •3. Объектно-ориентированное программирование в Java
- •3.1 Парадигмы программирования
- •3.2 Принципы объектно-ориентированного программирования
- •3.3 Как описать класс и подкласс
- •3.4 Абстрактные методы и классы
- •3.5 Окончательные члены и классы
- •3.6 Класс Object
- •3.7 Конструкторы класса
- •3.7 Операция new
- •3.8 Статические члены класса
- •3.9 Метод main()
- •4. Пакеты и интерфейсы
- •4.1 Пакет и подпакет
- •4.2 Права доступа к членам класса
- •4.3 Размещение пакетов по файлам
- •4.4 Импорт классов и пакетов
- •4.5 Интерфейсы
- •5. Классы-оболочки
- •5.1 Числовые классы
- •5.2 Класс Boolean
- •5.3 Класс Character
- •5.4 Класс Class
- •6. Работа со строками
- •6.1 Класс String
- •6.2 Манипуляции строками
- •6.3 Класс StringBuffer
- •6.4 Синтаксический разбор строки
- •7. Классы-коллекции
- •7.1Класс Vector
- •7.2 Класс Stack.
- •7.3 Класс Hashtable
- •7.4 Класс Properties
- •8. Система ввода/вывода в Java
- •8.1 Класс File
- •8.2 Ввод и вывод
- •9. Потоки выполнения
- •9.1 КлассThread
- •9.2 Синхронизация потоков выполнения
- •9.3 Приоритеты подпроцессов
- •9.4 Подпроцессы-демоны
- •9.5 Группы подпроцессов
- •10. Сетевые средстваJava
- •10.1 Общие принципы взаимодействия по сети
- •10.2 Работа в www
- •10.3 Работа по протоколу tcp
- •10.4 Работа по протоколу udp
- •11. Работа с бд черезJdbc
- •11.1 Связь с базами данных через jdbc
- •12.1 Удаленный интерфейс
- •12.2 Регистрация
- •12.3 Создание якорей и скелетов
- •12.4 Использование удаленных объектов
- •13. СозданиеXml-документа для описания некоторых данных
- •Глава 1. Обработка документов xml 77
- •Практический раздел
4.3 Размещение пакетов по файлам
То обстоятельство, что class-файлы, содержащие байт-коды классов, должны быть размещены по соответствующим каталогам, накладывает свои особенности на процесс компиляции и выполнения программы.
Обратимся к тому же примеру. Пусть в каталоге D:\jdkl.3\MyProgs\ch3 есть пустой подкаталог classes и два файла — Base.java и Inp2.java, — содержимое которых показано в листингах 11 и 12. Рис. 9 демонстрирует структуру каталогов уже после компиляции.
Мы можем проделать всю работу вручную.
1. В каталоге classes создаем подкаталоги р! и р2.
2. Переносим файл Base.java в каталог р! и делаем р] текущим каталогом.
3. Компилируем Base.java, получая в каталоге р! три файла: Base.class, Inpl.class, Derivedpl.class.
4. Переносим файл Inp2java в каталог р2.
5. Снова делаем текущим каталог classes.
6. Компилируем второй файл, указывая путь p2\Inp2.java.
7. Запускаем программу java p2.inp2.
Вместо шагов 2 и 3 можно просто создать три class-файла в любом месте, а потом перенести их в каталог pi. В class-файлах не хранится никакая информация о путях к файлам.
Смысл действий 5 и 6 в том, что при компиляции файла Inp2.java компилятор уже должен знать класс p1.Base , а отыскивает он файл с этим классом по пути p1.Base.class, начиная от текущего каталога.
Обратите внимание на то, что в последнем действии 7 надо указывать полное имя класса.
Если использовать ключи (options) командной строки компилятора, то можно выполнить всю работу быстрее.
1. Вызываем компилятор с ключом -d путь, указывая параметром путь начальный каталог для пакета:
javac -d classes Base.java
Компилятор создаст в каталоге classes подкаталог р1 и поместит туда три class-файла.
2. Вызываем компилятор с еще одним ключом -classpath путь, указывая параметром путь каталог classes, в котором находится подкаталог с уже откомпилированным пакетом pi:
javac -classpath classes -d classes Inp2.java
Компилятор, руководствуясь ключом -d, создаст в каталоге classes подкаталог р2 и поместит туда два class-файла, при создании которых он "заглядывал" в каталог pi, руководствуясь ключом -classpath.
3. Делаем текущим каталог classes.
4. Запускаем профамму java p2.inp2.

Рис. 9. Структура каталогов

Рис. 10. Протокол компиляции и запуска программы
Для "юниксоидов" все это звучит, как музыка, ну а прочим придется вспомнить MS DOS.
Конечно, если вы используете для работы не компилятор командной строки, а какое-нибудь IDE, то все эти действия будут сделаны без вашего участия.
На рис. 9 отображена структура каталогов после компиляции.
На рис. 10 показан вывод этих действий в окно Command Prompt и содержимое каталогов после компиляции.
4.4 Импорт классов и пакетов
Внимательный читатель заметил во второй строке листинга 12 новый оператор import . Для чего он нужен?
Дело в том, что компилятор будет искать классы только в -одном пакете, именно, в том, что указан в первой строке файла. Для классов из другого пакета надо указывать полные имена. В нашем примере они короткие, и мы могли бы писать в листинге 12 вместо Base полное имяp1.Base.
Но если полные имена длинные, а используются классы часто, то стучать по клавишам, набирая полные имена, становится утомительно. Вот тут-то мы и пишем операторы import , указывая компилятору полные имена классов.
Правила использования оператора import очень просты: пишется словоimport и, через пробел, полное имя класса, завершенное точкой с запятой. Сколько классов надо указать, столько операторовimport и пишется.
Это тоже может стать утомительным и тогда используется вторая форма оператора import — указывается имя пакета или подпакета, а вместо короткого имени класса ставится звездочка *. Этой записью компилятору предписывается просмотреть весь пакет. В нашем примере можно было написать
import p1.*;
Напомним, что импортировать можно только открытые классы, помеченные модификатором public .
Внимательный читатель и тут настороже. Мы ведь пользовались методами классов стандартной библиотеки, не указывая ее пакетов? Да, правильно.
Пакет java.iang просматривается всегда, его необязательно импортировать. Остальные пакеты стандартной библиотеки надо указывать в операторахimport , либо записывать полные имена классов.
Подчеркнем, что оператор import вводится только для удобства программистов и слово "импортировать" не означает никаких перемещений классов.
Знатокам C/C++
Оператор import не эквивалентен директиве препроцессораinclude — он не подключает никакие файлы.
