- •Интернет технологии
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •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
- •Практический раздел
5. Классы-оболочки
5.1 Числовые классы
Java — полностью объектно-ориентированный язык. Это означает, что все, что только можно, в Java представлено объектами.
Восемь примитивных типов нарушают это правило. Они оставлены в Java из-за многолетней привычки к числам и символам. Да и арифметические действия удобнее и быстрее производить с обычными числами, а не с объектами классов.
Но и для этих типов в языке Java есть соответствующие классы — классы-оболочки (wrapper) примитивных типов. Конечно, они предназначены не для вычислений, а для действий, типичных при работе с классами — создания объектов, преобразования объектов, получения численных значений объектов в разных формах и передачи объектов в методы по ссылке.
На рис. 12 показана одна из ветвей иерархии классов Java. Для каждого примитивного типа есть соответствующий класс. Числовые классы имеют общего предка — абстрактный класс Number , в котором описаны шесть методов, возвращающих числовое значение, содержащееся в классе, приведенное к соответствующему примитивному типу: bytevalue (), doubievalue () , floatValue (), intValue(), longValue (), shortValue () . Эти методы переопределены в каждом из шести числовых классов-оболочек.
Рис. 12. Классы примитивных типов
Помимо метода сравнения объектов equals о, переопределенного из класса object , все описанные в этой главе классы, кроме Boolean и class , имеют метод compareTo () , сравнивающий числовое значение, содержащееся в данном объекте, с числовым значением объекта — аргумента метода compareTo() . В результате работы метода получается целое значение:
0, если значения равны;
отрицательное число (—1), если числовое значение в данном объекте меньше, чем в объекте-аргументе;
положительное число (+1), если числовое значение в данном объекте больше числового значения, содержащегося в аргументе.
Что полезного в классах-оболочках?
В каждом из шести числовых классов-оболочек есть статические методы преобразования строки символов типа String лредставляющей число, в соответствующий примитивный тип:Byte.parseByte(), Double.parseDouble(), Float.parseFloat(), Integer.parselnt(), Long.parseLong(), Short.parseShort() . Исходная строка типаString , как всегда в статических методах, задается как аргумент метода. Эти методы полезны при вводе данных в поля ввода, обработке параметров командной строки, т. е. всюду, где числа представляются строками цифр со знаками плюс или минус и десятичной точкой.
В каждом из этих классов есть статические константы MAX_VALUE иMIN_VALUE , показывающие диапазон числовых значений соответствующих примитивных типов. В классахDouble иFloat есть еще константыPOSITIVE_INFINITY, NEGATIVE_INFINITY, NaN , о которых шла речь вглаве 1, и логические методы проверкиisNan() ,isInfinite() .
Если вы хорошо знаете двоичное представление вещественных чисел, то можете воспользоваться статическими методами floatTointBits() иdoubieToLongBits() , преобразующими вещественное значение в целое. Вещественное число задается как аргумент метода. Затем вы можете изменить отдельные биты побитными операциями и преобразовать измененное целое число обратно в вещественное значение методамиintsitsToFioat() иlongBitsToDouble() .
Статическими методами toBinaryString(), toHexString() и toOctalString() классовinteger иLong можно преобразовать целые значения типовint иlong , заданные как аргумент метода, в строку символов, показывающую двоичное, шестнадцатеричное или восьмеричное представление числа.
В листинге 15 показано применение этих методов, а рис. 13 демонстрирует вывод результатов.
Рис. 13. Методы числовых классов ;
Листинг 15. Методы числовых классов
class NumberTest {
public static void main(String[] args) {
int i = 0;
short sh = 0;
double d = 0;
Integer kl = new Integer(55);
Integer k2 = new Integer(100);
Double dl = new Double(3.14);
try {
i = Integer.parseInt(args[0]);
sh = Short.parseShort(args[0]);
d = Double.parseDouble(args[1]);
dl = new Double(args[1]);
kl = new Integer(args[0]);
} catch (Exception e) {
}
double x = 1.0;
System.out.println("i = " + i);
System.out.println("sh - " + sh);
System.out.println("d. = " + d);
System.out.println("kl.intValue() = " + kl.intValue());
System.out.println("dl.intValue() = " + dl.intValue());
System.out.println("kl > k2? " + kl.compareTo(k2));
System.out.println("x = " + x);
System.out.println("x isNaN? " + Double.isNaN(x));
System.out.println("x islnfinite? " + Double.isInfinite(x));
System.out.println("x == Infinity? " +
(x == Double.POSITIVE_INFINITY));
System.out.println("d = " + Double.doubleToLongBits(d));
System.out.println("i = " + Integer.toBinaryString(i));
System.out.println("i = " + Integer.toHexString(i));
System.out.println("i = " + Integer.toOctalString(i));
}
}