Программирование на 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. Введение в сетевые протоколы

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

// объявляем перегруженные методы // с аргументами (byte, int) и (short, short) int m(byte a, int b) {return a+b;} int m(short a, short b) {return a-b;}

void main() {

print(m(12, 2)); // ошибка компиляции!

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

Аналогичное преобразование потребуется при возвращении значения из метода, если тип результата и заявленный тип возвращаемого значения не совпадают.

long get() { return 5;

}

Хотя в выражении return указан целочисленный литерал типа int, во всех местах, где будет вызван этот метод, будет получено значение типа long. Для такого преобразования действуют те же правила, что и для при­своения значения.

В заключение рассмотрим пример, включающий в себя все рассмот­ренные случаи преобразования:

short get(Parent р) {

return 5+'А'; // приведение при возвращении значения

}

void maino {

long а = // приведение при присвоении значения get(new ChildO); // приведение при вызове метода

}

Явное приведение

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

(Ьуте)5

(Рагепт)пе\л/ СЫЩ)

(Р1а^детСпу().дет3^ееф.деШои5е().дегР1а1()

Если комбинация типов образует запрещенное преобразование, розникает ошибка компиляции. Допускаются тождественные преобразо­вания, расширения простых и объектных типов, сужения простых и объ­ектных типов. Первые три всегда выполняются успешно. Последние два щогут стать причиной ошибки исполнения, если значения оказались несо­вместимыми. Как следствие, выражение null всегда может быть успешно дреобразовано к любому ссылочному типу.

Но можно найти способ все-таки закодировать запрещенное преоб­разование.