Программирование на JAVA

Навигация

Лекция 1. Что такое Java? История создания

Лекция 2. Основы объектно-ориентированного программирования

Лекция 3. Лексика языка

Лекция 4. Типы данных

Лекция 5. Имена. Пакеты

Лекция 6. Объявление классов

Лекция 7. Преобразование типов

Лекция 8. Объектная модель в Java

Лекция 9. Массивы

Лекция 10. Операторы и структура кода. Исключения

Лекция 11. Пакет java.awt

Лекция 12. Потоки выполнения. Синхронизация

Лекция 13. Пакет java.lang

Лекция 14. Пакет java.util

Лекция 15. Пакет java.io

Лекция 16. Введение в сетевые протоколы

В этом случае явно указывается, к какому типу требуется привести исходное значение. Допускаются все виды пре­образований, кроме приведений к строке и запрещенных. Может возникать ошибка времени исполнения программы.

• Оператор конкатенации производит преобразование к строке своих аргументов.

• Числовое расширение (numeric promotion). Числовые операции могут потребовать изменения типа аргумента(ов). Это преобразо­вание имеет особое название — расширение (promotion), так как выбор целевого типа может зависеть не только от исходного значе­ния, но и от второго аргумента операции.

Рассмотрим все случаи более подробно.

Присвоение значений

Такие ситуации неоднократно применялись в этой лекции для иллю­страции видов преобразования. Приведение может потребоваться, если переменной одного типа присваивается значение другого типа. Возможны следующие комбинации.

Если сочетание этих двух типов образует запрещенное приведение возникнет ошибка. Например, примитивные значения нельзя присваи­вать объектным переменным, включая следующие примеры:

// пример вызовет ошибку компиляции

// примитивное значение нельзя // присвоить объектной переменной

228

parent р = 3;

// приведение к классу-"обертке" также запрещено Long a=5L;

// универсальное приведение к строке // возможно только для оператора + String s=true;

Далее, если сочетание этих двух типов образует расширение (прими­тивных или ссылочных типов), то оно будет осуществлено автоматичес­ки, неявным для разработчика образом:

int ¡=10; long a=i;

Child с = new Child(); Parent p=c;

Если же сочетание оказывается сужением, то возникает ошибка компиляции, такой переход не может быть проведен неявно:

// пример вызовет ошибку компиляции int ¡=10;

short s=i; // ошибка! сужение!

Parent р = new Child();

Child c=p; // ошибка! сужение!

Как уже упоминалось, в подобных случаях необходимо выполнять преобразование явно:

int i=10; short s=(int)i; Parent p = new Child(); Child c=(Child)p;

Более подробно явное сужение рассматривается ниже. Здесь может вызвать удивление следующая ситуация, которая не по­рождает ошибок компиляции:

byte b=1; short s=2+3; char c=(byte)5+'a';

В первой строке переменной типа byte присваивается значение цело, численного литерала типа int, что является сужением. Во второй строке переменной типа short присваивается результат сложения двух литералов типа int, а тип этой суммы также int