|
||||||
Программирование мобильных телефонов
Программирование на Java
|
Классы-оболочки Java — полностью объектно-ориентированный язык. Это означает, что все, что только можно, в Java представлено объектами. Восемь примитивных типов нарушают это правило. Они оставлены в Java из-за многолетней привычки к числам и символам. Да и арифметические действия удобнее и быстрее производить с обычными числами, а не с объектами классов. Но и для этих типов в языке Java есть соответствующие классы — классы-оболочки (wrapper) примитивных типов. Конечно, они предназначены не для вычислений, а для действий, типичных при работе с классами — создания объектов, преобразования объектов, получения численных значений объектов в разных формах и передачи объектов в методы по ссылке. На рис. 4.1 показана одна из ветвей иерархии классов Java. Для каждого примитивного типа есть соответствующий класс. Числовые классы имеют общего предка — абстрактный класс Number , в котором описаны шесть методов, возвращающих числовое значение, содержащееся в классе, приведенное к соответствующему примитивному типу: bytevalue (), doubievalue () , floatValue (), intValue(), longValue (), shortValue () . Эти методы переопределены в каждом из шести числовых классов-оболочек.
Рис. 4.1. Классы примитивных типов Помимо метода сравнения объектов equals о, переопределенного из класса object , все описанные в этой главе классы, кроме Boolean и class , имеют метод compareTo () , сравнивающий числовое значение, содержащееся в данном объекте, с числовым значением объекта — аргумента метода compareTo() . В результате работы метода получается целое значение:
Что полезного в классах-оболочках? В каждом из шести числовых классов-оболочек есть статические методы преобразования строки символов типа 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 , заданные как аргумент метода, в строку символов, показывающую двоичное, шестнадцатеричное или восьмеричное представление числа. В листинге 4.1 показано применение этих методов, а рис. 4.2 демонстрирует вывод результатов.
Рис. 4.2. Методы числовых классов ; Листинг 4.1. Методы числовых классов 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.parselnt(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/0.0; System.out.println("i = " + i) ; System.outjprintln("sh - " + sh) ; System.out.println("d. = " + d) ; System.out.println("kl.intValue() = " + kl.intValue()); System.out.println("dl.intValue() '= "'+ dl.intValuei)); 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.islnfinite(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)); } } Методы parseint() и конструкторы классов требуют обработки исключений, поэтому в листинг 4.1 вставлен блок try{} catch(){} . Обработку исключительных ситуаций мы разберем в главе 16.
|
|
||||
Copyright © vzlom-1.ru 2020-2021
|