- •ОГЛАВЛЕНИЕ
- •ВВЕДЕНИЕ
- •ГЛАВА 1. ПРИНЦИПЫ ООП. КЛАССЫ И ОБЪЕКТЫ
- •1.1 Основные принципы ООП
- •1.2 Достоинства ООП
- •1.3 Недостатки ООП
- •1.4 Классы и объекты
- •1.5 Члены класса
- •1.6 Модификаторы объявления класса
- •1.7 Пакеты
- •1.8 Понятие имени
- •1.9 Понятие модуля компиляции
- •1.10 Поля
- •1.11 Управление доступом
- •1.12 Создание объектов
- •1.13 Конструкторы
- •1.14 Блоки инициализации
- •1.15 Статическая инициализация
- •1.16 Методы
- •1.16.1 Модификаторы методов
- •1.16.2 Статические методы
- •1.16.3 Вызов метода
- •1.16.4 Выполнение метода и возврат из него
- •1.16.5 Параметры метода
- •1.16.6 Применение методов для управления доступом
- •1.16.7 Ключевое слово this
- •1.16.8 Перегруженные методы
- •1.16.9 Метод main
- •1.16.10 Методы native
- •ГЛАВА 2. ОСНОВЫ ЛЕКСИКИ
- •2.1 Комментарии
- •2.2 Служебные слова
- •2.3 Идентификаторы
- •2.4 Литералы
- •2.4.1 Целочисленные литералы
- •2.4.2 Литералы с плавающей точкой
- •2.4.3 Логические литералы
- •2.4.4 Символьные литералы
- •2.4.5 Строковые литералы
- •2.5 Операторы
- •2.6 Разделители
- •2.7 Переменные
- •2.8 Простые типы
- •2.8.1 Целочисленные типы
- •byte
- •short
- •long
- •2.8.2 Числовые типы с плавающей точкой
- •float
- •double
- •2.8.3 Приведение типа
- •2.8.4 Автоматическое преобразование типов в выражениях
- •2.8.5 Символьный тип
- •2.8.6 Логический тип
- •2.9 Массивы
- •2.9.1 Многомерные массивы
- •2.9.2 Инициализация массивов
- •2.10 Операторы
- •2.10.1 Арифметические операторы
- •Операторы арифметических действий
- •Оператор деления по модулю
- •Операторы арифметических действий с присваиванием
- •Целочисленная арифметика
- •Арифметика с плавающей запятой
- •2.10.2 Инкремент и декремент
- •2.10.3 Целочисленные битовые операторы
- •Операторы битовой арифметики
- •Оператор побитового сдвига влево
- •Операторы побитового сдвига вправо
- •Операторы битовой арифметики с присваиванием
- •2.10.4 Операторы сравнения
- •2.10.5 Логические операторы
- •2.10.6 Оператор проверки соответствия типа
- •2.10.7 Условный тернарный оператор
- •2.10.8 Приоритеты операторов
- •2.11 Управление выполнением метода
- •2.11.1 Завершение работы метода
- •2.11.2 Ветвление
- •2.11.3 Циклы
- •while
- •do-while
- •2.11.4 Прерывание блоков инструкций
- •2.11.5 Переход на следующий виток цикла
- •2.11.6 Блок переключателей
- •ГЛАВА 3. ИСКЛЮЧЕНИЯ
- •3.1 Общие сведения об исключениях
- •3.2 Инструкция throw
- •3.3 Предложения throws
- •3.4 Предложения throws и переопределение методов
- •3.5 Предложения throws и методы native
- •3.6 Блок try-catch-finally
- •ГЛАВА 4. НАСЛЕДОВАНИЕ
- •4.1 Расширенный класс. Конструкторы расширенных классов
- •4.2 Порядок выполнения конструкторов
- •4.3 Переопределение методов при наследовании
- •4.4 Сокрытие полей
- •4.5 Доступ к унаследованным членам класса
- •4.6 Возможность доступа и переопределение
- •4.7 Сокрытие статических членов
- •4.8 Служебное слово super
- •4.9 Совместимость и преобразование типов
- •4.9.1 Совместимость
- •4.9.2 Явное преобразование типов
- •4.10 Проверка типа
- •4.11 Завершённые методы и классы
- •4.12 Абстрактные методы и классы
- •4.13 Класс Object
- •4.13.1 Метод сравнения объектов
- •4.13.2 Метод вычисления хеш-кода
- •4.13.3 Метод клонирования объектов
- •4.13.4 Метод получения ссылки на описание класса
- •4.13.5 Метод завершения работы объекта
- •4.13.6 Метод получения строкового представления
- •ГЛАВА 5. ИНТЕРФЕЙСЫ
- •5.1 Пример простого интерфейса
- •5.2 Объявление интерфейса
- •5.3 Константы в интерфейсах
- •5.4 Методы в интерфейсах
- •5.5 Модификаторы в объявлениях интерфейсов
- •5.6 Расширение интерфейсов
- •5.7 Наследование и сокрытие констант
- •5.8 Наследование, переопределение и перегрузка методов
- •5.9 Пустые интерфейсы
- •5.10 Абстрактный класс или интерфейс?
- •СПИСОК СОКРАЩЕНИЙ
- •СПИСОК ЛИТЕРАТУРЫ
Пример 41. Побитовые операции с присваиванием class OpBitEquals {
public static void main(String[] args) { int a = 1;
int b = 2; int с = 3; a |= 4;
b >>= 1; с <<= 1; a ^= с;
System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + с);
}
}
Результат работы программы будет следующим:
а = 3 b = 1 с = 6
2.10.4 Операторы сравнения
Для того, чтобы можно сравнивать два значения, в Java имеется набор операторов, описывающих отношения и равенство. Список таких операторов приведен в таблице 13.
Таблица 13. Операторы сравнения
Оператор |
Результат |
|
|
== |
равно |
!= |
не равно |
> |
больше |
< |
меньше |
>= |
больше или равно |
<= |
меньше или равно |
96
Обратите внимание: в языке Java, так же, как в С и C++ проверка на равенство обозначается последовательностью (==). Один знак (=)
– это оператор присваивания.
Значения любых типов, включая целые и вещественные числа, символы, логические значения и ссылки, можно сравнивать, используя оператор проверки на равенство == и неравенство !=. Эти операторы можно применять, если их операнды приводимы по типу, т.е. можно сравнивать ссылки со ссылками, любые числа с любыми числами, но нельзя сравнить ссылку с числом.
Результатом выполнения любого оператора сравнения является логическое значение (т.е. истина или ложь).
2.10.5 Логические операторы
Логические операторы (см. таблицу 14) применимы операндам типа boolean. Некоторые из них сходны с уже знакомыми вам операторами, но при применении к логическим выражениям они могут иметь немного другой смысл.
Все бинарные логические операторы воспринимают в качестве операндов два значения типа boolean и возвращают результат того же типа.
Результаты воздействия логических операторов на различные комбинации значений операндов показаны в таблице 15.
Программа в примере 42 практически полностью повторяет уже знакомый вам пример класса BitLogic. Только на этот раз мы работаем с булевыми логическими значениями.
97
Таблица 14. Булевы логические операторы
Оператор |
Результат |
& |
Логическое И (AND) |
| |
Логическое ИЛИ (OR) |
^Логическое исключающее ИЛИ (XOR)
||Оператор OR быстрой оценки выражений (short circuit OR)
&&Оператор AND быстрой оценки выражений (short circuit AND)
!Логическое унарное отрицание (NOT)
&= |
|
|
|
|
И (AND) с присваиванием |
|
|||||
|= |
|
|
|
|
ИЛИ (OR) с присваиванием |
|
|||||
^= |
|
|
|
Исключающее ИЛИ (XOR) с присваиванием |
|
||||||
== |
|
|
|
|
|
Равно |
|
|
|
||
!= |
|
|
|
|
|
Не равно |
|
|
|
||
?: |
|
|
|
|
Тернарный оператор if-then-else |
|
|||||
|
Таблица 15 |
|
|
|
|
|
|
|
|
||
|
a |
|
b |
|
|
a | b |
a & b |
|
a ^ b |
|
!a |
|
false |
|
false |
|
false |
false |
|
false |
|
true |
|
|
true |
|
false |
|
true |
false |
|
true |
|
false |
|
|
false |
|
true |
|
true |
false |
|
true |
|
true |
|
|
true |
|
true |
|
true |
true |
|
false |
|
false |
|
|
Пример 42. Логические операторы |
|
|
|
|
|
|||||
|
class BoolLogic |
{ |
|
|
|
|
|
|
|
||
|
public static |
void main(String[] args) { |
|
||||||||
|
|
boolean |
a |
= true; |
|
|
|
|
|
||
|
|
boolean |
b |
= false; |
|
|
|
|
|
||
|
|
boolean |
с |
= a | b; |
|
|
|
|
|
||
|
|
boolean |
d |
= a & b; |
|
|
|
|
|
||
|
|
boolean |
e |
= a ^ b; |
|
|
|
|
|
||
|
|
boolean |
f |
= (!a & b) | (a & !b); |
|
|
|
||||
|
|
boolean |
g |
= !a; |
|
|
|
|
|
System.out.println("a = " + a);
System.out.println("b = " + b);
98
System.out.println("a|b = " + с); System.out.println("a&b = " + d); System.out.println("a^b = " + e); System.out.println("!a&b|a&!b = " + f); System.out.println("!a = " + g);
}
}
Результат выполнения программы будет следующим:
а = true b = false a|b = true
a&b = false a^b = true
!a&b|a&!b = true !a = false
Существуют два интересных дополнения к набору логических операторов: это альтернативные версии операторов AND и OR, служащие для быстрой оценки логических выражений. Если первый операнд оператора OR имеет значение true, то независимо от значения второго операнда результатом операции будет величина true. Аналогично, в случае оператора AND, если первый операнд – false, то значение второго операнда на результат не влияет – он всегда будет равен false. Если вы используете операторы && и || вместо обычных форм & и |, то Java не производит вычисление правого операнда логического выражения, если ответ ясен из значения левого операнда. Общепринятой практикой является использование операторов && и || практически во всех случаях оценки булевых логических выражений.
2.10.6 Оператор проверки соответствия типа
Оператор instanceof проверяет, принадлежит ли объект некоторому типу. В левой части выражения instanceof указывается ссылка, а в правой – имя класса или интерфейса. Оператор
99