
- •Часть 1
- •Часть 1
- •Часть 1'
- •1. Задачи, поставленные при разработке языка. Компиляция и интерпретация.
- •2. Приложения и апплеты. Их жизненные циклы. Передача параметров.
- •3. Классы. Инкапсуляция. Описание полей и методов
- •4. Примитивные типы данных и операции над ними. Классы-оболочки.
- •Целочисленные типы данных.
- •Булев тип
- •5. Операторы реализации алгоритмов.
- •Нормальное и прерванное выполнение операторов
- •Пустой оператор
- •Оператор if
- •If (логическое выражение) выражение или блок 1 else выражение или блок 2
- •Оператор switch
- •Цикл while
- •Цикл do
- •Цикл for
- •Оператор continue
- •Оператор break
- •Оператор return
- •Использование оператора throw
- •6. Классы: наследование, полиморфизм. Полиморфиз
- •Защищенные (protected) методы и переменные.
Булев тип
Булев тип представлен всего одним типом boolean, который может хранить всего два возможных значения – true и false. Величины именно этого типа получаются в результате операций сравнения.
Над булевыми аргументами можно производить следующие операции:
операции сравнения
==, !=
логические операции
&&, || - вычисление по сокращённой схеме
&, | - вычисление по происходит по полной схеме
битовые операции [ну во всяком случае так они называются =) ]
^, !
оператор с условием ? :
оператор конкатенации со строкой +
Классы-оболочки (Wrapper)
Классы-оболочки соответствуют элементарным типам данных языка Java. Эти классы представляют элементарные значения как объекты. Все классы-оболочки, кроме Character, имеют два конструктора - один принимает элементарное значение, а другой представление значения String. Например:
Integer i1 = new Integer(50);
Integer i2 = new Integer("50");
Конструкторы класса Character принимает элемент char type как аргумент:
Character c = new Character('A');
Объекты этого класса-оболочки неизменны, т. е. их значение, присвоенное однажды, не может быть изменено.
С версии 1.5 введён механизм autoboxing/auto-unboxing, благодаря которому теперь можно писать:
Integer integer = 5; // Раньше надо было Integer integer = new Integer(5);
int intValue= integer; // Раньше int intValue = integer.intValue();
Если рассматривать классы оболочки в качестве носителейменно значений, то между ними и примитивными типами существует 3 больших отличия.
Сам объект класса и его хранимое значение - разные вещи, тогда как в примитивных - это одно и то же. Т.е. может существовать 2 различных объекта класса Integer со значением 12345, которые на == дадут false. Из этого могут быть неприятные ситуации, например: Integer i1 = 1234; Integer i2 = 1234; System.out.println(i1 < i2); // Нормально, false, используется auto-unboxing System.out.println(i1 > i2); // Нормально, false, используется auto-unboxing System.out.println(i1 == i2);// Ненормально, false, НЕ используется auto-unboxing, т.к. это классы, а для них == сравнивается по адресам. А они не равны.
Классы-оболочки имеют на 1 значение больше, чем примитивные. Они могут быть равны null. И например следующий код даст NullPointerException: Integer i = null; System.out.println(i == 42); //Попытается распаковать i, а зря...
Работа с классами-оболочками гораздо более дорогостоящая, т.к. для каждой арифметической операции приходится распаковывать класс-оболочку в примитивный типа, производить действия над этим типом, а потом снова запаковывать в класс.
Поэтому рекомендуется ипользовать везде примитивные типа, кроме случаев параметризации, где можно использовать только классы-оболочки, а не примитивные.
Метод valueOf()
Все классы-оболочки (кроме Character) определяют статический метод valueOf(), который возвращает объекты класса, соответствующие элементарному значению, представленному аргументом String. Например:
Float f1 = Float.valueOf("1.5f");
Перегруженная форма этого метода принимает представление базы (двоичной, восьмеричной или шестнадцатеричной) первого аргумента как второй аргумент. Например:
Integer I = Integer.valueOf("10011110", 2);
Преобразование объектов-оболочек в элементарные типы
Все числовые классы-оболочки имеют шесть методов, которые используются для преобразования числового объекта-оболочки в любой элементарный числовой тип: byteValue, doubleValue, floatValue, intValue, longValue и shortValue. Например:
Integer i = new Integer(20);
byte b = i.byteValue();
Методы парсеров
Существует шесть методов парсеров parseInt, parseDouble, parseFloat, parseLong, parseByte и parseShort. Они принимают String как аргумент и преобразуют его в соответствующий примитив. Они генерируют исключение NumberFormatException, если строка (String) построена некорректно. Например:
double d = Double.parseDouble("4.23");
Он также может принять корень (базу) как второй аргумент:
int i = Integer.parseInt("10011110", 2);
Преобразование базы
В классах-оболочках Integer и Long есть методы toBinaryString() и toOctalString(), которые преобразуют числа в базе 10 в другие базы. Например:
String s = Integer.toHexString(25);