Вот мы и закончили первую часть книги. Теперь вы знаете все основные конструкции языка Java, позволяющие спроектировать и реализовать проект любой сложности на основе ООП. Оставшиеся конструкции языка, не менее важные, но реже используемые, отложим до
Язык Java, как и все современные языки программирования, — это не только синтаксические конструкции, но и богатая библиотека классов. Знание этих классов и умение пользоваться ими как раз и определяет программиста-практика.
Вопросы для самопроверки
1. Что такое пакет в Java?
2. Могут ли классы и интерфейсы, входящие в один пакет, располагаться в нескольких каталогах файловой системы?
3. Обеспечивает ли "пакетный" доступ возможность обращения к полям и методам классов, расположенных в подпакете?
4. Можно ли в аналогичной ситуации обратиться из подпакета к полям и методам классов, расположенных в объемлющем пакете?
5. Могут ли два экземпляра одного класса пользоваться закрытыми полями друг друга?
6. Почему метод main() должен быть открытым (public)?
7. Обеспечивает ли импорт пакета поиск классов, расположенных в его подпакетах?
8. Зачем в Java есть и абстрактные классы, и интерфейсы? Нельзя ли было обойтись одной из этих конструкций?
9. Зачем в Java введены перечисления? Нельзя ли обойтись интерфейсами?
ЧАСТЬ II
Использование классов из Java API
Глава 4. | Классы-оболочки и generics |
Глава 5. | Работа со строками |
Глава 6. | Классы-коллекции |
Глава 7. | Классы-утилиты |
ГЛАВА 4
Классы-оболочки и generics
Java — полностью объектно-ориентированный язык. Это означает, что все, что только можно, в Java представлено объектами.
Восемь примитивных типов нарушают это правило. Они оставлены в Java не только из-за многолетней привычки к числам и символам. Арифметические действия удобнее и быстрее производить с обычными числами, а не с объектами классов, которые требуют много ресурсов от компьютера.
Но и для этих типов в языке Java есть соответствующие классы —
На рис. 4.1 показана одна из ветвей иерархии классов Java. Для каждого примитивного типа в пакете j ava. lang есть соответствующий класс. Числовые классы имеют общего предка — абстрактный класс Number, в котором описаны шесть методов, возвращающих числовое значение, содержащееся в классе, приведенное к соответствующему примитивному типу: byteValue(), doubleValue(), floatValue(), intValue(), longVaiue (), shortValue (). Эти методы переопределены в каждом из шести числовых классов-оболочек Byte, Short, Integer, Long, Float и Double. Имена классов-оболочек, за исключением класса Integer, совпадают с именами соответствующих примитивных типов, но начинаются с заглавной буквы.
Помимо метода сравнения объектов equals(), переопределенного из класса Object, все описанные в этой главе числовые классы, класс Character и класс Boolean имеют метод
Object—р Number-
- Boolean
-Character
-Class
■ — BigDecimal —Blglnteger
— Byte
— Double —Float —Integer
— Long
— Short
LCharacter.Subset-i— InputSubset
Character.UnicodeBlock
Рис. 4.1. Классы примитивных типов
compareTo (), сравнивающий числовое значение, символ или булево значение, содержащееся в данном объекте, с числовым значением объекта — аргументом метода compareTo (). В результате работы метода получается целое значение:
□ 0, если сравниваемые значения равны;
□ отрицательное число (-1), если числовое значение в данном объекте меньше, чем в объекте-аргументе или, для класса Boolean, в данном объекте false, а в аргументе — true;
□ положительное число (+1), если числовое значение в данном объекте больше числового значения, содержащегося в аргументе или в данном объекте true, а в аргументе — false.
В каждом из этих классов есть статический метод
int compare(xxx a, xxx b);
который сравнивает значения двух чисел, символов или логических переменных a и b, заданных простыми типами boolean, byte, short, char, int, long, float, double, так же, как и метод compareTo (), и возвращает те же значения.
Еще один полезный статический метод
Xxx valueOf(xxx a);
в котором xxx — это один из простых типов boolean, byte, short, char, int, long, float, double, возвращает объект соответствующего типа. Документация настоятельно рекомендует применять этот метод для создания объектов из простых типов, а не конструктор соответствующего класса.