- •Содержание
- •Глава 1. Общие представления о языке Java 6
- •Глава 2. Объектно-ориентированное проектирование и платформа NetBeans 26
- •Глава 3. Примитивные типы данных и операторы для работы с ними 78
- •Глава 4. Работа с числами в языке Java 95
- •Глава 5. Управляющие конструкции 112
- •Глава 6. Начальные сведения об объектном программировании 128
- •Глава 7. Важнейшие объектные типы 175
- •Глава 1. Общие представления о языке Java
- •1.1. Java и другие языки программирования. Системное и прикладное программирование
- •Введение
- •1.2. Виртуальная Java-машина, байт-код, jit-компиляция. Категории программ, написанных на языке Java
- •1.3.Алфавит языка Java. Десятичные и шестнадцатеричные цифры и целые числа. Зарезервированные слова Алфавит языка Java
- •Десятичные и шестнадцатеричные цифры и целые числа
- •Зарезервированные слова языка Java
- •1.4. Управляющие последовательности. Символы Unicode. Специальные символы Управляющие последовательности
- •Простые специальные символы
- •Составные специальные символы
- •1.5.Идентификаторы. Переменные и типы. Примитивные и ссылочные типы
- •Краткие итоги по главе 1
- •Задания
- •Глава 2. Объектно-ориентированное проектирование и платформа NetBeans
- •2.1.Процедурное и объектно-ориентированное программирование. Инкапсуляция
- •2.2. Работа со ссылочными переменными. Сборка мусора
- •2.3. Проекты NetBeans. Пакеты. Уровни видимости классов. Импорт классов
- •2.4. Базовые пакеты и классы Java
- •2.5. Создание в NetBeans простейшего приложения Java
- •2.6. Компиляция файлов проекта и запуск приложения
- •2.7. Структура проекта NetBeans
- •2.8. Создание в NetBeans приложения Java с графическим интерфейсом
- •2.9. Редактор экранных форм
- •2.10. Внешний вид приложения
- •2.11. Ведение проектов
- •2.11. Редактирование меню экранной формы
- •2.12. Создание нового класса
- •2.13. Документирование исходного кода в Java
- •2.14. Основные компоненты пакетов swing и awt
- •2.15. Технологии Java и .Net
- •Краткие итоги по главе 2
- •Задания
- •Глава 3. Примитивные типы данных и операторы для работы с ними
- •3.1.Булевский (логический) тип
- •3.2.Целые типы, переменные, константы
- •3.3.Основные операторы для работы с целочисленными величинами
- •3.4.Вещественные типы и класс Math
- •3.5.Правила явного и автоматического преобразования типа при работе с числовыми величинами
- •3.6. Оболочечные классы. Упаковка (boxing) и распаковка (unboxing)
- •3.7.Приоритет операторов
- •3.8.Типы-перечисления (enum)
- •Краткие итоги по главе 3
- •Задания
- •Глава 4. Работа с числами в языке Java
- •4.1 Двоичное представление целых чисел Позиционные и непозиционные системы счисления
- •Двоичное представление положительных целых чисел
- •Двоичное представление отрицательных целых чисел. Дополнительный код
- •Проблемы целочисленной машинной арифметики
- •Шестнадцатеричное представление целых чисел и перевод из одной системы счисления в другую
- •4.2. Побитовые маски и сдвиги
- •4.3. Двоичное представление вещественных чисел Двоичные дроби
- •Мантисса и порядок числа
- •Стандарт ieee 754 представления чисел в формате с плавающей точкой*
- •Краткие итоги по главе 4
- •Задания
- •Глава 5. Управляющие конструкции Составной оператор
- •Условный оператор if
- •Оператор выбора switch
- •Условное выражение …?... : …
- •Оператор цикла for
- •Оператор цикла while – цикл с предусловием
- •Оператор цикла do...While – цикл с постусловием
- •Операторы прерывания continue, break, return, System.Exit
- •Краткие итоги по главе 5
- •Задания
- •Глава 6. Начальные сведения об объектном программировании
- •Наследование и полиморфизм. Uml-диаграммы
- •Функции. Модификаторы. Передача примитивных типов в функции
- •Локальные и глобальные переменные. Модификаторы доступа и правила видимости. Ссылка this
- •Передача ссылочных типов в функции. Проблема изменения ссылки внутри подпрограммы
- •Наследование. Суперклассы и подклассы. Переопределение методов
- •Наследование и правила видимости. Зарезервированное слово super
- •Статическое и динамическое связывание методов. Полиморфизм
- •Базовый класс Object
- •Конструкторы. Зарезервированные слова super и this. Блоки инициализации
- •Удаление неиспользуемых объектов и метод finalize. Проблема деструкторов для сложно устроенных объектов
- •Перегрузка методов
- •Правила совместимости ссылочных типов как основа использования полиморфного кода. Приведение и проверка типов
- •Рефакторинг
- •Reverse engineering – построение uml-диаграмм по разработанным классам
- •Краткие итоги по главе 6
- •Задания
- •Глава 7. Важнейшие объектные типы Массивы
- •Коллекции, списки, итераторы
- •Работа со строками в Java. Строки как объекты. Классы String, StringBuffer и StringBuilder
- •Работа с графикой
- •Исключительные ситуации Обработка исключительных ситуаций
- •Иерархия исключительных ситуаций
- •Объявление типа исключительной ситуации и оператор throw
- •Объявление метода, который может возбуждать исключительную ситуацию. Зарезервированное слово throws
- •Работа с файлами и папками
- •Краткие итоги по главе 7
- •Задания
- •Глава 8. Наследование: проблемы и альтернативы. Интерфейсы. Композиция Проблемы множественного наследования классов. Интерфейсы
- •Отличия интерфейсов от классов. Проблемы наследования интерфейсов
- •Пример на использование интерфейсов
- •Композиция как альтернатива множественному наследованию
- •Краткие итоги по главе 8
- •Задания
- •Глава 9. Дополнительные элементы объектного программирования на языке Java Потоки выполнения (threads) и синхронизация
- •Преимущества и проблемы при работе с потоками выполнения
- •Синхронизация по ресурсам и событиям
- •Класс Thread и интерфейс Runnable. Создание и запуск потока выполнения
- •Поля и методы, заданные в классе Thread
- •Подключение внешних библиотек dll.“Родные” (native) методы*
- •Краткие итоги по главе 9
- •Задания
- •Глава 10. Введение в сетевое программирование Краткая справка по языку html
- •Апплеты
- •Сервлеты
- •Технология jsp – Java Server Pages
- •Краткие итоги по главе 10
- •Задания
- •Глава 11. Встроенные классы Виды встроенных классов
- •Вложенные (nested) классы и интерфейсы
- •Внутренние (inner) классы
- •Локальные (local) классы
- •Анонимные (anonimous) классы и обработчики событий
- •Анонимные (anonimous) классы и слушатели событий (listeners)
- •Краткие итоги по главе 11
- •Задания
- •Глава 12. Компонентное программирование Компонентная архитектура JavaBeans
- •Мастер создания компонента в NetBeans
- •Пример создания компонента в NetBeans – панель с заголовком
- •Добавление в компонент новых свойств
- •Добавление в компонент новых событий
- •Краткие итоги по главе 12
- •Задания
- •Литература
- •Дополнительная литература
- •276 Курс подготовлен при поддержке Sun Microsystems
3.3.Основные операторы для работы с целочисленными величинами
Все перечисленные ниже операторы действуют на две целочисленные величины, которые называются операндами. В результате действия оператора возвращается целочисленный результат. Во всех перечисленных далее примерах i и j обозначают целочисленные выражения, а v – целочисленную переменную.
Оператор |
Название |
Пример |
Примечание |
+ |
Оператор сложения |
i+j |
В случае, когда операнды i и j имеют разные типы или типы byte, short или char, действуют правила автоматического преобразования типов. |
– |
Оператор вычитания |
i-j |
|
* |
Оператор умножения |
i*j |
|
/ |
Оператор деления |
i/j |
Результат округляется до целого путём отбрасывания дробной части как для положительных, так и для отрицательных чисел. |
% |
Оператор остатка от целочисленного деления |
i%j |
Возвращается остаток от целочисленного деления |
Оператор |
Название |
Пример |
Примечание |
= |
Оператор присваивания |
v=i |
Сначала вычисляется выражение i, после чего полученный результат копируется в ячейку v |
++ |
Оператор инкремента (увеличения на 1) |
v++ |
v++ эквивалентно v=v+1 |
-- |
Оператор декремента (уменьшения на 1) |
v-- |
v-- эквивалентно v=v-1 |
+= |
|
v+=i |
v+=i эквивалентно v=v+i |
-= |
|
v-=i |
v-=i эквивалентно v=v-i |
*= |
|
v*=i |
v*=i эквивалентно v=v*i |
/= |
|
v/=i |
v/=i эквивалентно v=v/i |
%= |
|
v%=i |
v%=i эквивалентно v=v%i |
Также имеются важные методы классов Integer и Long, обеспечивающие преобразование строкового представления числа в целое значение:
Integer.parseInt(строка)
Long.parseLong(строка)
Например, если в экранной форме имеются текстовые пункты ввода jTextField1 и jTextField2, преобразование введённого в них текста в числа может проводиться таким образом:
int n=Integer.parseInt(jTextField1.getText());
long n1=Long.parseLong(jTextField2.getText());
Функции Integer.signum(число) и Long.signum(число) возвращают знак числа – то есть 1 если число положительно, 0, если оно равно 0, и -1 если число отрицательно.
Кроме того, в классах Integer и Long имеется ряд операторов для работы с числами на уровне их битового представления.
Классы Integer и Long являются так называемыми оболочечными классами (wrappers), о них речь пойдёт чуть дальше.
3.4.Вещественные типы и класс Math
Тип |
Размер |
Диапазон |
Описание |
float |
4 байта (32 бит) |
1.5*10-45..3.4*1038 |
“Одинарная” точность, 7-8 значащих десятичных цифр мантиссы. Тип real*4 стандарта IEEE754 |
double
|
8 байт (64 бит) |
5*10-324..1.7*10308 |
“Двойная” точность, 15..16 значащих цифр мантиссы. Тип real*8 стандарта IEEE754 |
Оператор |
Название |
Пример |
Примечание |
+ |
Оператор сложения |
x+y |
В случае, когда операнды x и y имеют разные типы, действуют правила автоматического преобразования типов. |
– |
Оператор вычитания |
x-y |
|
* |
Оператор умножения |
x*y |
|
/ |
Оператор деления |
x/y |
Результат является вещественным. В случае, когда операнды x и y имеют разные типы, действуют правила автоматического преобразования типов. |
% |
Оператор остатка от целочисленного деления |
x%y |
Возвращается остаток от целочисленного деления x на y. В случае, когда операнды x и y имеют разные типы, действуют правила автоматического преобразования типов. |
Оператор |
Название |
Пример |
Примечание |
= |
Оператор присваивания |
v=x |
Сначала вычисляется выражение x, после чего полученный результат копируется в ячейку v |
++ |
Оператор инкремента (увеличения на 1) |
v++ ++v |
эквивалентно v=v+1 |
-- |
Оператор декремента (уменьшения на 1) |
v-- --v |
эквивалентно v=v-1 |
+= |
|
v+=x |
эквивалентно v=v+x |
-= |
|
v-=x |
эквивалентно v=v-x |
*= |
|
v*=x |
эквивалентно v=v*x |
/= |
|
v/=x |
эквивалентно v=v/x |
%= |
|
v%=x |
эквивалентно v=v%x |
Математические функции, а также константы “пи” (Math.PI) и “е” (Math.E ) заданы в классе Math, находящемся в пакете java.lang .
Для того, чтобы их использовать, надо указывать имя функции или константы, квалифицированное впереди именем класса Math.
Например, возможны вызовы Math.PI или Math.sin(x). При этом имя пакета java.lang указывать не надо – он импортируется автоматически. К сожалению, использовать математические функции без квалификатора Math, не получается, так как это методы класса.
Константы в классе Math заданы так:
public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;
Модификатор static означает, что это переменная класса; final означает, что в классе-наследнике переопределять это значение нельзя.
В приведённой ниже таблицы величины x, y, angdeg, angrad имеют тип double, величина a – тип float, величины m, n – целые типов long или int. Математические функции возвращают значения типа double, если примечании не указано иное.
Оператор класса Math |
Примечание |
Тригонометрические и обратные тригонометрические функции |
|
sin(x) |
sin(x) - синус |
cos(x) |
cos(x) - косинус |
tan(x) |
tg(x) - тангенс |
asin(x) |
arcsin(x) - арксинус |
acos(x) |
arccos(x) - арккосинус |
atan(x) |
arctg(x) - арктангенс |
atan2(y, x) |
Возвращает угол,
соответствующий точке с координатами
x,y,
лежащий в пределах |
toRadians(angdeg) |
angdeg / 180.0 * PI; - перевод углов из градусов в радианы. |
toDegrees(angrad) |
angrad * 180.0 / PI; - перевод углов из радиан в градусы. |
Степени, экспоненты, логарифмы |
|
exp(x) |
ex - экспонента |
expm1(x) |
ex-1. При x, близком к 0, даёт гораздо более точные значения, чем exp(x)-1 |
log(x) |
ln(x) – натуральный логарифм. |
log10(x) |
log10(x) – десятичный логарифм. |
log1p(x) |
ln(1+x). При x, близком к 0, даёт гораздо более точные значения, чем log(1+x) |
sqrt(x) |
|
cbrt(x) |
|
hypot(x,y) |
|
pow(x, y) |
xy – возведение x в степень y |
sinh(x) |
sh(x)= |
cosh(x) |
ch(x)= |
tanh(x) |
th(x)= |
Модуль, знак, минимальное, максимальное число |
|
abs(m) abs(x) |
Абсолютное значение числа. Аргумент типа int, long, float или double. Результат того же типа, что аргумент. |
signum(a) signum(x) |
Знак числа. Аргумент типа float или double. Результат того же типа, что аргумент. |
min(m,n) min(x,y) |
Минимальное из двух чисел. Аргументы одного типа. Возможны типы: int, long, float, double. Результат того же типа, что аргумент. |
max(m,n) max(x,y) |
Максимальное из двух чисел. Аргументы одного типа. Возможны типы: int, long, float, double. Результат того же типа, что аргумент. |
Округления |
|
ceil(x) |
Ближайшее к x целое, большее или равное x |
floor(x) |
Ближайшее к x целое, меньшее или равное x |
round(a) round(x) |
Ближайшее к x целое. Аргумент типа float или double. Результат типа long, если аргумент double, и типа int – если float. То же, что (int)floor(x + 0.5). |
rint(x) |
Ближайшее к x целое. |
ulp(a) ulp(x) |
Расстояние до ближайшего большего чем аргумент значения того же типа (“дискретность” изменения чисел в формате с плавающей точкой вблизи данного значения). Аргумент типа float или double. Результат того же типа, что аргумент. |
Случайное число, остаток |
|
random() |
Псевдослучайное число в диапазоне от 0.0 до 1.0. При этом 0 ≤ Math.random() < 1. |
IEEEremainder(x,y) |
Остаток от целочисленного деления x/y, то есть x-y*n, где n – результат целочисленного деления |
Также имеются методы оболочечных классов Float и Double, обеспечивающие преобразование строкового представления числа в значение типа Float или Double:
Float.parseFloat(строка)
Double.parseDouble(строка)
Например, если в экранной форме имеются текстовые пункты ввода jTextField1 и jTextField2, преобразование введённого в них текста в числа может проводиться таким образом:
float f1= Float.parseFloat(jTextField1.getText());
double d1= Double.parseDouble(jTextField2.getText());
Иногда вместо класса Math ошибочно пытаются использовать пакет java.math, в котором содержатся классы BigDecimal, BigInteger, MathContext, RoundingMode. Класс BigDecimal обеспечивает работу с десятичными числами с произвольным числом значащих цифр – в том числе с произвольным числом цифр после десятичной точки. Класс BigInteger обеспечивает работу с целыми числами произвольной длины. Классы MathContext и RoundingMode являются вспомогательными, обеспечивающими настройки для работы с некоторыми методами классов BigDecimal и BigInteger.
