- •Введение
- •1 Теоритическая часть
- •Список нововведений
- •Список нововведений
- •Список нововведений
- •1.4 Применение платформы java
- •Производительность:
- •1.5Основные идеи Примитивные типы
- •1.6Объектные переменные, объекты, ссылки и указатели
- •Преобразования при математических операциях
- •Дублирование ссылок и клонирование
- •Сборка мусора
- •1.7 Классы и функции
- •Статические методы и поля
- •Завершённость (final)
- •Абстрактность
- •Интерфейсы
- •Маркерные интерфейсы
- •Шаблоны в Java (generics)
- •Проверка принадлежности к классу
- •1.8.1 История
- •1.8.2 Применение
- •1.10Магазин приложений «Google Play»
- •1.11Заявления о нарушении прав
- •1.12 Альтернативные прошивки
- •2. Практическая часть
- •Заключение
Преобразования при математических операциях
В языке Java действуют следующие правила:
Если один операнд имеет тип double, другой тоже преобразуется к типу double.
Иначе, если один операнд имеет тип float, другой тоже преобразуется к типу float.
Иначе, если один операнд имеет тип long, другой тоже преобразуется к типу long.
Иначе оба операнда преобразуются к типу int.
Данный способ неявного преобразования встроенных типов полностью совпадает с преобразованием типов в C++.
1.6Объектные переменные, объекты, ссылки и указатели
В языке Java имеются только динамически создаваемые объекты. Причем переменные объектного типа и объекты в Java — совершенно разные сущности. Переменные объектного типа являются ссылками, то есть неявными указателями на динамически создаваемые объекты. Это подчёркивается синтаксисом описания переменных. Так, в Java нельзя писать:
double a[10][20];
Foo b(30);
анужно:
double[][] a =newdouble[10][20];
Foo b =newFoo(30);
При присваиваниях, передаче в подпрограммы и сравнениях объектные переменные ведут себя как указатели, то есть присваиваются, копируются и сравниваются адреса объектов. А при доступе с помощью объектной переменной к полям данных или методам объекта не требуется никаких специальных операций разыменовывания — этот доступ осуществляется так, как если бы объектная переменная была самим объектом.
Объектными являются переменные любого типа, кроме примитивного. Явных указателей в Java нет. В отличие от указателей C, C++ и других языков программирования, ссылки в Java в высокой степени безопасны благодаря жёстким ограничениям на их использование, в частности:
Нельзя преобразовывать объект типа int или любого другого примитивного типа в указатель или ссылку и наоборот.
Над ссылками запрещено выполнять операции ++, −−, +, − или любые другие арифметические операции.
Преобразование типов между ссылками жёстко регламентировано. За исключением ссылок на массивы, разрешено преобразовывать ссылки только между наследуемым типом и его наследником, причём преобразование наследуемого типа внаследующий должно быть явно задано и во время выполнения производится проверка его осмысленности. Преобразования ссылок на массивы разрешены лишь тогда, когда разрешены преобразования их базовых типов, а также нет конфликтов размерности.
В Java нет операций взятия адреса (&) или взятия объекта по адресу (*). Звёздочка в Java означает умножение, и только. Амперсанд (&) означает всего лишь «побитовое и» (двойной амперсанд — «логическое и»). Однако для булевых типов одиночный амперсанд означает «логическое и», отличающееся от двойного тем, что цепь проверок не прекращается при получении в выражении значения false (напр. a == b && foo() == bar() не повлечёт вызовов foo() и bar() в случае, если a != b, тогда как использование & повлечёт в любом случае.
Благодаря таким специально введенным ограничениям в Java невозможно прямое манипулирование памятью на уровне физических адресов (хотя ссылки, не указывающие ни на что, есть: значение такой ссылки обозначается null).
Если нужен указатель на примитивный тип, используются классы-обёртки примитивных типов: Boolean, Byte, Character, Short, Integer, Long, Float, Double.
