Пакет Java.util
Это один из больших пакетов. В данном пакете содержится одно из новшеств Java 2 — коллекции. Коллекцией называется некоторый набор объектов, объединяемых с целью максимально эффективного их использования. Коллекции — достаточно сложная тема и начинающим она ни к чему, поэтому в этой книге она рассматриваться не будет.
Однако упомянутый пакет имеет набор классов, не относящихся к коллекциям. Ниже приведено описание некоторых таких классов.
• Класс Calendar. Этот класс не содержит конструкторов. Есть множество констант, среди них — константы, содержащие текущую дату и время (они, соответственно, обозначаются английскими эквивалентами компонентов— например, DAY, HOUR и др.), названия месяцев (тоже по-английски), еще некоторые константы. Вот несколько методов этого класса:
— after— значение true, если указанный в параметре Calendar-объект более «ранний», чем объект, который этот метод вызвал;
— before — полностью противоположен предыдущему методу;
— clone — копирует объект;
— get — возвращает значение какой-либо константы;
— get Ins tance — возвращает текущую дату в виде Calendar-объекта;
— getTime — преобразует Calendar в Date;
— getTimeZone — преобразует Calendar в TimeZone;
— set — устанавливает значения даты и времени для объекта;
— setTime — преобразует в Calendar Date-объект;
— setTimeZone — преобразует в Calendar TimeZone-объект.
• Класс Date. Имеет два конструктора: первый не имеет параметров и присваивает объекту текущую дату и время, второй устанавливает их с помощью задания в параметре количества миллисекунд, прошедших с 1.1.70. Имеет основные методы after, before, clone, getTime (возвращение миллисекунд) и setTime (установление миллисекунд). О методе toString мы не упоминаем, так как он присутствует почти у всех объектов.
• Класс GregorianCalendar. Расширяет класс Calendar. Нужен для установки даты и времени с учетом текущих часовым поясом и регионом. В конструкторах можно указывать дату и время в разных вариациях. Можно также указывать регион и часовой пояс в виде объектов Locale и TimeZone соответственно.
• Класс Locale. Нужен для определения языкового региона. Содержит несколько констант с названиями различных стран, например GERMANY и ITALY. В конструкторе можно установить язык и страну. С помощью статического метода setDefault можно установить регион по умолчанию. С помощью метода getDisplayCountry () можно получить название страны, а с помощью метода getDisplayLanguage () — язык.
• Класс Random. Отвечает за генерацию случайных чисел. Основные методы:
— nextBoolean — случайное значение типа boolean;
— nextDouble — то же самое для типа данных double;
— nextFloat —то же для типа данных float;
— nextInt — то же для типа данных int;
— nextLong — то же для типа данных long.
• Класс TimeZone. Этот класс позволяет установить отклонение от времени по Гринвичу. Есть множество методов этого класса, я приведу лишь три из них:
— getDefault — возвращает заданный по умолчанию часовой пояс;
— getTimeZone — возвращает объект для параметра, в котором указывается
имя часового пояса;
— setDefault — устанавливает задаваемый по умолчанию часовой пояс.
Приведем пример использования упомянутых выше классов (листинг 6.6).
Листинг 6.6.
Пример использования классов пакета java.util
Несколько слов о пакете java.io
В этом разделе я в двух словах расскажу о принципах ввода-вывода в Java.
Ввод-вывод происходит с помощью так называемых потоков, которые могут получать/отдавать информацию.
Ввод-вывод бывает символьным и байтовым. Байтовые потоки используются для операций ввода-вывода с байтами. Символьные потоки предназначены для операций ввода-вывода с символами Unicode.
Обычный консольный ввод-вывод идет через байтовые потоки. Основные абстрактные классы, от которых наследуются все классы байтового ввода-вывода, — Inputstream и OutputStream.
Переменные out и err объекта System являются экземплярами класса OutputStream, переменная in— экземпляром класса inputstream. Мы будем использовать символьный ввод-вывод, основными абстрактными классами которого являются классы Reader и Writer.
Все потоки имеют методы write и read, используемые чаще всего.
Если будете тестировать программы с помощью командной строки (как это сделать — см. главу 7), то столкнетесь с тем, что выполнение программ приводит к тому, что текст на русском языке отображается странными символами. Это происходит потому, что мы используем байтовый ввод-вывод и, соответственно, мы должны применять только английские символы.
Теперь же давайте будем использовать вывод с помощью класса PrintWriter.
Он позволяет выводить русский текст при указании необходимой кодировки в процессе создания необходимого объекта класса OutputStreamWriter (а это уже байтовый ввод-вывод) — в данном случае Ср866.
В конструкторе этого байтового класса мы вначале указываем, какой объект для вывода мы будем использовать, а затем можно указать и кодировку. Вот текст программы, приведенной в конце главы 3, переписанный так, что будет выводиться русский текст (листинг 6.7).
Листинг 6.7.
Вывод данных с помощью класса PrintWriter
Стандартный ввод обычно происходит с помощью класса символьного ввода Buffered- Reader.
В его конструкторе можно указать объект байтового класса inputStreairiReader.
Можно использовать метод read для ввода одного символа и метод readLine — для ввода целой строки. Не надо только забывать преобразовывать тип данных int в тип данных char (при работе с методом read).
Пример программы (листинг 6.8).
Листинг 6.8.
Ввод данных с помощью класса символьного ввода Buffered Reader
Теперь рассмотрим файловый ввод-вывод. Для чтения из файла используют класс FilelnputStream или класс FileReader с методом read. Этот метод читает файл посимвольно, а по достижении конца файла получает значение 1. Обычно для чтения из файла используется цикл do…while.
Для записи в файл используются классы FileWriter и FileOutputStream с методом посимвольной записи write. В параметрах конструкторов у всех этих классов указывается имя и путь файла.
Еще о некоторых пакетах
Кратко остановимся на работе трех других основных пакетов.
• Пакет java. net. Существует для работы в Сети. Поддерживает технологию так называемых сокетов.
• Пакет java. awt. Набор графических компонентов (множество элементов управления); многие из них мы дальше рассмотрим на примерах. Кроме того, есть обширный класс Graphics, который содержит методы drawstring (рисует строку по координатам), drawLine (рисует линию), drawRect (рисует незаполненный прямоугольник) и др.
• Пакет javax. swing. Содержит набор облегченных дополненных новыми возможностями swing-компонентов; мы также рассмотрим его дальше на примере.
Существует еще множество пакетов, например java. applet, — пакет для работы с аплетами. Об этом можно прочесть в справочной литературе и прилагаемой документации, поэтому не буду больше об этом говорить.
Рассмотрение языка Java я на этом заканчиваю. Теперь вы умеете читать и писать Java-программы.
Резюме
1. Пакет — это набор классов для индивидуализации имен классов.
2. Пакет java. lang содержит классы для работы с основными типами данных.
3. Пакет java.util содержит так называемые коллекции, а также несколько классов для работы с датой и временем, случайными числами и т.д.
Вопросы
1. Что такое пакет?
2. Что такое пакет java.util?
3. Что такое пакет java. lang?
4. Что такое пакет java. io?
5. Что такое пакет java. net?
6. Что такое пакет java. awt?
7. Что такое пакет javax. swing?
Контрольные упражнения
1. Создайте свой пакет с одним классом.
Вопросы к курсу «Основы Java»
1. Кто и когда создал язык Java?
2. Из каких компонентов состоит Java-программа?
3. Какие виды данных в Java вы знаете?
4. Что такое конструкции выбора, циклы и инструкции выхода?
5. Что такое класс?
6. Что такое метод?
7. Что такое интерфейс?
8. Что такое исключение?
9. Какие есть теги документирования кода?
10. Что такое многопоточное программирование?
11. Что такое пакеты и какие из них вы знаете?