Разделы презентаций


Исключительные ситуации

Содержание

План лекцииВозникновение ошибок и подходы к их обработкеИсключения и их классификацияВыбрасывание исключенийОтлов исключенийСоздание типов исключенийПодходы к отладке приложений

Слайды и текст этой презентации

Слайд 1Исключительные ситуации
© Составление, Будаев Д.С., Гаврилов А.В., 2013
Лекция 4.1
УНЦ «Инфоком»
Самара
2013

Исключительные ситуации© Составление, Будаев Д.С., Гаврилов А.В., 2013Лекция 4.1УНЦ «Инфоком»Самара2013

Слайд 2План лекции
Возникновение ошибок и подходы к их обработке
Исключения и их

классификация
Выбрасывание исключений
Отлов исключений
Создание типов исключений
Подходы к отладке приложений

План лекцииВозникновение ошибок и подходы к их обработкеИсключения и их классификацияВыбрасывание исключенийОтлов исключенийСоздание типов исключенийПодходы к отладке

Слайд 3Э… Проблемы
В процессе выполнения программные приложения встречаются с ситуациями, приводящими

к возникновению ошибок
Ошибки бывают различной степени тяжести
Ошибки необходимо каким-либо способом

учитывать и обрабатывать

Ошибки возникают в случае:
некорректного ввода данных
сбоев оборудования
нарушения ограничений среды
выполнения программного кода
Э… ПроблемыВ процессе выполнения программные приложения встречаются с ситуациями, приводящими к возникновению ошибокОшибки бывают различной степени тяжестиОшибки

Слайд 4Обработка ошибок
Обеспечение стабильности и надежности работы программы

Дружественное поведение конечного программного

продукта

Безопасность в процессе выполнения

Удобство при написании программного кода

Противоречие!

Обработка ошибокОбеспечение стабильности и надежности работы программыДружественное поведение конечного программного продуктаБезопасность в процессе выполненияУдобство при написании программного

Слайд 5Подходы к обработке ошибок
Возвращение методом кода ошибки
Возвращается только код ошибки






Используются

«свободные» значения возвращаемого типа
Встроенный в язык механизм проверки и обработки
int

errNum = firstMethod();
if (errNum == -1) {
// обработка 1-ой ошибки
}
else if(errNum == -2) {
// обработка 2-ой ошибки
}

if ((ans = sqrt(val)) < 0) {
// Обработка ошибки
}
else {
// Продолжение вычислений
}

try {
someBusinessLogic();
...
anotherBusinessLogic()
}
catch(Exception1 e1) {
// обработка 1-ой ошибки
}
...
catch(ExceptionN eN) {
// обработка N-ой ошибки
}
finally {
// выполнение завершающих
// работу действий
}

Подходы к обработке ошибокВозвращение методом кода ошибкиВозвращается только код ошибкиИспользуются «свободные» значения возвращаемого типаВстроенный в язык механизм

Слайд 6Механизм обработки
Создается и «выбрасывается» объект исключения, содержащий информацию об ошибке

Выполнение

текущего потока вычислений приостанавливается

Завершается выполнение блоков и методов в цепочке

вызовов вплоть до кода, отлавливающего исключение

Поток вычислений возобновляется, причем выполняется код обработчика исключения
Механизм обработкиСоздается и «выбрасывается» объект исключения, содержащий информацию об ошибкеВыполнение текущего потока вычислений приостанавливаетсяЗавершается выполнение блоков и

Слайд 7Поиск обработчика исключения
main(String[] args)
obj1.method1()
Class1.staticMethod()
obj2.method145()
obj67.method35()
Exception
Class1.staticMethod()
найден
obj48.method565()
Exception
не найден
JVM

Поиск обработчика исключенияmain(String[] args)obj1.method1()Class1.staticMethod()obj2.method145()obj67.method35()ExceptionClass1.staticMethod()найденobj48.method565()Exceptionне найденJVM

Слайд 8Классификация исключений
Объявляемые
(проверяемые, checked)
Носят предсказуемый характер

Указываются в объявлении метода

Наследуют от класса

Exception

Необъявляемые
(непроверяемые, unchecked)
Обусловлены логикой кода

Не указываются в объявлении метода

Наследуют от классов

RuntimeException, Error
Классификация исключенийОбъявляемые	(проверяемые, checked)Носят предсказуемый характерУказываются в объявлении методаНаследуют от класса ExceptionНеобъявляемые	(непроверяемые, unchecked)Обусловлены логикой кодаНе указываются в объявлении

Слайд 9Классификация исключений
Синхронные
Непосредственный итог выполнения определенной инструкции

Могут быть объявляемыми и необъявляемыми

Асинхронные
Не

зависят от выполняемой инструкции

Внутренние ошибки JVM
Результат работы deprecated методов

Классификация исключенийСинхронныеНепосредственный итог выполнения определенной инструкцииМогут быть объявляемыми и необъявляемымиАсинхронныеНе зависят от выполняемой инструкцииВнутренние ошибки JVMРезультат работы

Слайд 10Базовые классы исключений

Базовые классы исключений

Слайд 11Объявление исключений
Сведения об исключениях метода не менее важны, чем тип

возвращаемого им значения
Мораль: их надо обозначать в заголовке
class OurClass
{
public

int someMethod() throws
SomeException1, SomeException2
{
/* Код который может породить
SomeException1 или SomeException2 */
}
}
Объявление исключенийСведения об исключениях метода не менее важны, чем тип возвращаемого им значенияМораль: их надо обозначать в

Слайд 12Особенности объявления исключений
В списке должны присутствовать те объявляемые исключения, которые

не обрабатываются в теле самого метода

Метод вправе выбросить исключение типа,

наследного от заявленного в throws

Запрещено генерировать объявляемые исключения типов, не заявленных в throws
Особенности объявления исключенийВ списке должны присутствовать те объявляемые исключения, которые не обрабатываются в теле самого методаМетод вправе

Слайд 13Особенности объявления исключений
Объявляются все объявляемые исключения, не обработанные в теле

метода

Статические блоки инициализации и инициализирующие выражения не могут выбрасывать объявляемые

исключения

Нестатические блоки инициализации могут генерировать объявляемые исключения, только если их тип указан во всех throws всех конструкторов класса
{if (a < 0) { throw new IOException(); }…}
Особенности объявления исключенийОбъявляются все объявляемые исключения, не обработанные в теле методаСтатические блоки инициализации и инициализирующие выражения не

Слайд 14Вызов метода со списком исключений
Варианты действий
Отловить исключения и обработать их
Объявить

соответствующие исключения в предложении throws текущего метода и позволить им

«пройти через код»
Отловить исключения и вместо них сгенерировать исключения типов, указанных в собственном предложении throws
Вызов метода со списком исключенийВарианты действийОтловить исключения и обработать ихОбъявить соответствующие исключения в предложении throws текущего метода

Слайд 15Важное замечание
Каждое исключение имеет как формальную причину возникновения, так и

фактическую

Исключение должно отлавливаться и обрабатываться на том уровне (по стеку,

порядку вызова методов), где его:
можно обработать;
имеет смысл обрабатывать.

Обработка исключений не сводится к выводу сообщений в консоль и записи в журнал (logger)!
Важное замечаниеКаждое исключение имеет как формальную причину возникновения, так и фактическуюИсключение должно отлавливаться и обрабатываться на том

Слайд 16Отлов исключений
Особый синтаксис описания обработчиков исключений
Конструкция try/catch/finally
try {
Инструкции
} catch

(ТипИсключения1 идентификатор1) {
Инструкции
} catch (ТипИсключения2 идентификатор2) {
Инструкции
...
} finally

{
Инструкции
}
Отлов исключенийОсобый синтаксис описания обработчиков исключенийКонструкция try/catch/finallytry { Инструкции} catch (ТипИсключения1 идентификатор1) { Инструкции} catch (ТипИсключения2 идентификатор2)

Слайд 17Блок try
Заключает в себе блок кода, выполняемый успешно при нормальных

обстоятельствах

Тело выполняется вплоть до:
Момента возникновения исключительной ситуации
Благополучного достижения конца блока

Конкретный

блок в процессе выполнения может выбросить только одно исключение
Блок tryЗаключает в себе блок кода, выполняемый успешно при нормальных обстоятельствахТело выполняется вплоть до:Момента возникновения исключительной ситуацииБлагополучного

Слайд 18Блок catch
«Внутренний метод» с параметром типа исключения, которое им обрабатывается

Способен:
Выполнить

некоторые восстановительные действия
Выбросить собственное исключение
Осуществить необходимые действия и передать управление

последующим инструкциям

Количество блоков catch не регламентировано
Блок catch«Внутренний метод» с параметром типа исключения, которое им обрабатываетсяСпособен:Выполнить некоторые восстановительные действияВыбросить собственное исключениеОсуществить необходимые действия

Слайд 19Блок catch
Предложения catch рассматриваются последовательно до обнаружения среди них того,

тип которого допускает присвоение выброшенного исключения

Использовать широкий тип (например, Exception)

в качестве отлавливаемого – не лучшая мысль!

Список предложений catch просматривается только один раз!
Блок catchПредложения catch рассматриваются последовательно до обнаружения среди них того, тип которого допускает присвоение выброшенного исключенияИспользовать широкий

Слайд 20Блок finally
Блок finally выполняется в любом случае:
При успешном выполнении try
При

выбрасывании исключения
При передаче управления по break или return!
Блок finally необязателен
Если

есть finally, блоки catch необязательны
Если есть finally без catch, он выполняется после завершения работы фрагментов кода try
Блок finallyБлок finally выполняется в любом случае:При успешном выполнении tryПри выбрасывании исключенияПри передаче управления по break или

Слайд 21Выбрасывание исключений
Объявляемые и необъявляемые исключения, выбрасываемые вызываемыми методами и операторами

Явно

(принудительно) выбрасываемые исключения
throw referenceToThrowableObject;

throw new NoSuchAttributeException(name);

Выбрасывание исключенийОбъявляемые и необъявляемые исключения, выбрасываемые вызываемыми методами и операторамиЯвно (принудительно) выбрасываемые исключенияthrow referenceToThrowableObject;throw new NoSuchAttributeException(name);

Слайд 22Создание типов исключений
Создается новый тип, наследующий от более широкого типа,

подходящего по смыслу (например, java.lang.IndexOutOfBoundsException)

Само то, что выбрасывается исключение более

узкого типа, несет в себе информацию

В состав нового типа могут вводиться новые поля и методы

Чаще всего класс содержит только 2 конструктора (по умолчанию и с параметром-строкой), просто вызывающие конструкторы родительского класса

Современные среды разработки облегчают создание собственных классов исключений
Создание типов исключенийСоздается новый тип, наследующий от более широкого типа, подходящего по смыслу (например, java.lang.IndexOutOfBoundsException)Само то, что

Слайд 23Отладка приложений
Собственные средства
Добавление дополнительного кода
Вывод данных на печать
Вывод данных в

системные журналы (logging)
Создание дополнительных методов проверки
Отладчики (debuggers)
В составе JDK, в составе

среды разработки (IDE), отладчики сторонних компаний
Использование точек останова, пошаговых режимов, просмотра состояния объектов
Отладка приложенийСобственные средстваДобавление дополнительного кодаВывод данных на печатьВывод данных в системные журналы (logging)Создание дополнительных методов проверкиОтладчики (debuggers)В

Слайд 24Преимущества от использования исключений
Единая логика обработки ошибок
Обработка ошибок на любом

уровне
Выделение и обработка категорий ошибок
Разделение логики по обработке ошибок и

бизнес-логики приложения
Необходимость обработки объявляемых исключений
Возможность действий по восстановлению
Преимущества от использования исключенийЕдиная логика обработки ошибокОбработка ошибок на любом уровнеВыделение и обработка категорий ошибокРазделение логики по

Слайд 25Наследование
© Составление, Будаев Д.С., Гаврилов А.В., 2013
Лекция 4.2
УНЦ «Инфоком»
Самара
2013

Наследование© Составление, Будаев Д.С., Гаврилов А.В., 2013Лекция 4.2УНЦ «Инфоком»Самара2013

Слайд 26План лекции
Наследование классов и создание объектов дочерних классов
Переопределение методов
Сокрытие полей
Завершенные

и абстрактные методы и классы
Описание и применение интерфейсов

План лекцииНаследование классов и создание объектов дочерних классовПереопределение методовСокрытие полейЗавершенные и абстрактные методы и классыОписание и применение

Слайд 27Наследование в Java
Виды наследования

Класс
Расширяет класс и/или
Реализует интерфейс(ы)

Интерфейс
Расширяет

интерфейс(ы)

Наследование в JavaВиды наследованияКласс Расширяет класс и/или Реализует интерфейс(ы)Интерфейс Расширяет интерфейс(ы)

Слайд 28Расширение классов
Класс может расширить только один класс
Расширяющий класс называется производным

(дочерним, подклассом)
Расширяемый класс называется базовым (родительским, суперклассом)
class MyClass1 {
}

class MyClass2

extends MyClass1 {
}
Расширение классовКласс может расширить только один классРасширяющий класс называется производным (дочерним, подклассом)Расширяемый класс называется базовым (родительским, суперклассом)class

Слайд 29Конструкторы дочерних классов
Вызываются при создании объектов дочерних классов

Могут вызывать друг

друга по ключевому слову this(…)

Могут вызывать конструкторы базового класса по

ключевому слову super(…)

Ключевое слово super() может не использоваться, только если в родительском классе существует конструктор по умолчанию
Конструкторы дочерних классовВызываются при создании объектов дочерних классовМогут вызывать друг друга по ключевому слову this(…)Могут вызывать конструкторы

Слайд 30Порядок создания объекта
Порядок вызова конструкторов:
Вызов конструктора базового класса
Присваивание исходных значений

полям объекта посредством выполнения соответствующих выражений и блоков инициализации
Выполнение инструкций

в теле конструктора (конструкторов)

Состояние объекта инициализируется "послойно" от Object до конкретного класса
Порядок создания объектаПорядок вызова конструкторов:Вызов конструктора базового классаПрисваивание исходных значений полям объекта посредством выполнения соответствующих выражений и

Слайд 31Забавный пример
class SuperShow {
public String str = "SuperStr";

public

void show() {
System.out.println("Super.show(): " + str);
}
}

class ExtendShow

extends SuperShow {
public String str = "ExtendStr";

public void show() {
System.out.println("Extend.show(): " + str);
}
}
Забавный примерclass SuperShow { public String str =

Слайд 32И его результат
public static void main(String[] args) {
ExtendShow ext

= new ExtendShow();
SuperShow sup = ext;
System.out.println("ext.str = "

+ ext.str);
System.out.println("sup.str = " + sup.str);
ext.show();
sup.show();
}

ext.str = ExtendStr
sup.str = SuperStr
Extend.show(): ExtendStr
Extend.show(): ExtendStr

И его результатpublic static void main(String[] args) { ExtendShow ext = new ExtendShow(); SuperShow sup = ext;

Слайд 33Совпадение имен методов в родительском и дочернем классах
Сигнатуры различны
Перегрузка –

добавляется метод с другими параметрами

Сигнатуры совпадают
Переопределение – замещение версии метода,

объявленной в базовом классе, новой, с точно такой же сигнатурой
Совпадение имен методов в родительском и дочернем классахСигнатуры различны	Перегрузка – добавляется метод с другими параметрамиСигнатуры совпадают	Переопределение –

Слайд 34Переопределение методов
При обращении извне к методу объекта производного класса по

ссылке его родительского типа всегда вызывается новая версия метода

Доступ к

методу базового класса изнутри объекта дочернего класса может быть получен с помощью ключевого слова super

Уровень доступа к методу при переопределении не может сужаться

Методы private не переопределяются
Переопределение методовПри обращении извне к методу объекта производного класса по ссылке его родительского типа всегда вызывается новая

Слайд 35Переопределение методов
class ChildClass extends ParentClass {
public String getInfo() {

return "child"; }
}
ChildClass child = new ChildClass();
System.out.println(child.getInfo()); // child

ParentClass parent

= child;
System.out.println(parent.getInfo()); // а тут?

class ParentClass {
public String getInfo() { return "parent"; }
}

Переопределение методовclass ChildClass extends ParentClass { public String getInfo() { return

Слайд 36Переопределение методов
class ChildClass extends ParentClass {

// это не переопределенный

метод!
public String getInfo() { return "child"; }
}
class ParentClass {

private String getInfo() { return "parent"; }
}
public static void main(String[] args) {
Parent object = new Child();
object.getInfo(); // а тут?
}
Переопределение методовclass ChildClass extends ParentClass { // это не переопределенный метод! public String getInfo() { return

Слайд 37Переопределение методов
В предложении throws дочернего метода не может быть типов

исключений, которые не совместимы с типами в throws базового метода

(для checked исключений)

Переопределенный метод может быть снабжен модификатором abstract

Признаки synchronized, native и strictfp могут изменяться произвольно
Переопределение методовВ предложении throws дочернего метода не может быть типов исключений, которые не совместимы с типами в

Слайд 38Сокрытие полей
Поля не переопределяются, но скрываются
Тип поля при сокрытии можно

изменить
Поле базового класса при сокрытии продолжает существовать, но недоступно через

ссылку типа потомка, однако доступно по ссылке предка
Доступ можно получить с помощью ключевого слова super либо через ссылочную переменную родительского типа
Имеет право на существование следующая конструкция: (VeryBaseClass) this
Сокрытие полейПоля не переопределяются, но скрываютсяТип поля при сокрытии можно изменитьПоле базового класса при сокрытии продолжает существовать,

Слайд 39Еще пример
class SuperShow {
public String str = "SuperStr";

...
}
class ExtendShow extends SuperShow {
public int str = 100500;


...
}
Еще примерclass SuperShow { public String str =

Слайд 40И его результат
public static void main(String[] args) {
ExtendShow ext

= new ExtendShow();
SuperShow sup = ext;

System.out.println("ext.str =

" + ext.str);
System.out.println("sup.str = " + sup.str);
System.out.println("sup.str = " + ((SuperShow)ext).str);
}

ext.str = 100500
sup.str = SuperStr
sup.str = SuperStr

И его результатpublic static void main(String[] args) { ExtendShow ext = new ExtendShow(); SuperShow sup = ext;

Слайд 41Служебное слово super
Действует как ссылка на текущий экземпляр по контракту

базового класса
Может быть использовано в теле любого нестатического члена класса
Формы

использования
super(...)
super.method(...)
super.field
Служебное слово superДействует как ссылка на текущий экземпляр по контракту базового классаМожет быть использовано в теле любого

Слайд 42Сокрытие статических членов
Статические члены не могут быть переопределены, они скрываются

Обычно

для доступа используется имя класса, поэтому проблем не возникает

Если используется

ссылка, то учитывается объявленный тип ссылки, а не фактический тип объекта
Сокрытие статических членовСтатические члены не могут быть переопределены, они скрываютсяОбычно для доступа используется имя класса, поэтому проблем

Слайд 43Сокрытие статических методов
public class Animal {
public static void testClassMethod()

{
System.out.println("The class method in Animal");
}
}
public class

Cat extends Animal {
public static void testClassMethod() {
System.out.println("The class method in Cat");
}

public static void main(String[] args) {
Animal myAnimal = new Cat();
myAnimal.testClassMethod();// The class method in Animal
Animal.testClassMethod(); // The class method in Animal
}
}
Сокрытие статических методовpublic class Animal { public static void testClassMethod() {  System.out.println(

Слайд 44Замечание
Важно понимать, что:
Переопределение методов – фундаментальный механизм ООП, в частности,

обеспечивающий полиморфизм
Сокрытие полей – последствие отсутствия ограничений на имена полей
Изменение

типа метода (static/non static) в подклассе вызовет ошибку компиляции
ЗамечаниеВажно понимать, что:Переопределение методов – фундаментальный механизм ООП, в частности, обеспечивающий полиморфизмСокрытие полей – последствие отсутствия ограничений

Слайд 45Завершенные методы и классы
Завершенный метод не допускает переопределения


Завершенный класс не

допускает расширения

final public int getValue();
final class MyClass {
...
}

Завершенные методы и классыЗавершенный метод не допускает переопределенияЗавершенный класс не допускает расширенияfinal public int getValue();final class MyClass

Слайд 46Абстрактные классы и методы
Абстрактные методы описывают сигнатуру без реализации

Класс с

абстрактными методами обязан быть абстрактным
Абстрактный класс не обязан иметь абстрактные

методы
Абстрактный класс может иметь реализованные методы

Расширяющий класс может перекрыть своими абстрактными родительские реализованные методы
Создавать объекты абстрактных типов нельзя!

abstract public int getValue();

abstract class MyClass {...}

Абстрактные классы и методыАбстрактные методы описывают сигнатуру без реализацииКласс с абстрактными методами обязан быть абстрактнымАбстрактный класс не

Слайд 47Контракт класса
Набор методов и полей класса, открытых для доступа извне

тем или иным способом, в совокупности с описанием их назначения
Способ

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

Слайд 48Наследование
Практическое воплощение наследования

Наследование контракта или типа, в результате чего производный

класс получает тип базового, поэтому может быть использован полиморфным образом

Наследование

способов реализации, в результате производный класс приобретает функциональные характеристики базового в виде набора доступных полей и методов
НаследованиеПрактическое воплощение наследованияНаследование контракта или типа, в результате чего производный класс получает тип базового, поэтому может быть

Слайд 49Понятие интерфейса
Позволяет описать тип в полностью абстрактной форме
Экземпляры интерфейсов создавать

нельзя
Классы способны реализовывать один или несколько интерфейсов
Реализация классом интерфейса означает

согласие класса на внешний контракт, описываемый интерфейсом
Понятие интерфейсаПозволяет описать тип в полностью абстрактной формеЭкземпляры интерфейсов создавать нельзяКлассы способны реализовывать один или несколько интерфейсовРеализация

Слайд 50Наследование в Java
Виды наследования

Класс
Расширяет класс
Реализует интерфейсы

Интерфейс
Расширяет интерфейсы

Наследование в JavaВиды наследованияКласс Расширяет класс Реализует интерфейсыИнтерфейс Расширяет интерфейсы

Слайд 51Объявление интерфейсов
Все члены интерфейса по умолчанию обладают признаком public
Применение других

модификаторов редко имеет смысл
Бывают пустые интерфейсы
interface Somethingable {
// константы

// методы
// вложенные классы и интерфейсы
}
Объявление интерфейсовВсе члены интерфейса по умолчанию обладают признаком publicПрименение других модификаторов редко имеет смыслБывают пустые интерфейсыinterface Somethingable

Слайд 52Константы в интерфейсах
Имеют неявные модификаторы
public static final

Должны быть снабжены инициализаторами
interface

Verbose {
int SILENT = 0;
int TERSE = 1;

int NORMAL = 2;
int VERBOSE = 3;
}
Константы в интерфейсахИмеют неявные модификаторы	public static finalДолжны быть снабжены инициализаторамиinterface Verbose { int SILENT = 0; int

Слайд 53Методы в интерфейсах
Имеют неявные модификаторы
public abstract

Не могут иметь модификаторов
native synchronized
strictfp

static final
interface Verbose {
void setVerbosity(int level);
int getVerbosity();
}

Методы в интерфейсахИмеют неявные модификаторы	public abstractНе могут иметь модификаторов	native synchronized	strictfp static finalinterface Verbose { void setVerbosity(int level);

Слайд 54Расширение интерфейсов интерфейсами
Допускается сокрытие констант

Переопределение метода не несет семантической нагрузки

Совпадение

имен наследуемых методов не несет семантической нагрузки
interface NewVerbose extends Verbose,

Runnable {
// ...
}
Расширение интерфейсов интерфейсамиДопускается сокрытие константПереопределение метода не несет семантической нагрузкиСовпадение имен наследуемых методов не несет семантической нагрузкиinterface

Слайд 55Реализация интерфейсов классами
Интерфейсы реализуются классами
Класс может реализовывать несколько интерфейсов
Если класс

не реализует все методы «наследуемых» интерфейсов, он является абстрактным
class MyNewThread

extends MyThread
implements Runnable, Verbose {
...
}
Реализация интерфейсов классамиИнтерфейсы реализуются классамиКласс может реализовывать несколько интерфейсовЕсли класс не реализует все методы «наследуемых» интерфейсов, он

Слайд 56Интерфейс или абстрактный класс?
Интерфейсы обеспечивают инструментарий множественного наследования, производный класс

способен наследовать одновременно несколько интерфейсов

Класс может расширять единственный базовый класс,

даже если тот содержит только абстрактные методы
Интерфейс или  абстрактный класс?Интерфейсы обеспечивают инструментарий множественного наследования, производный класс способен наследовать одновременно несколько интерфейсовКласс может

Слайд 57Интерфейс или абстрактный класс?
Абстрактный класс частично может быть реализован, он

вправе содержать члены, помеченные как protected и/или static и т.п.

Структура

интерфейса ограничена объявлениями public-констант и public-методов без какой бы то ни было реализации
Интерфейс или  абстрактный класс?Абстрактный класс частично может быть реализован, он вправе содержать члены, помеченные как protected

Слайд 58Ссылки интерфейсных типов
Допускаются ссылки интерфейсных типов

Такая ссылка позволяет выполнять над

объектом операции, описанные во внешнем контракте, обусловленном типом интерфейса

Такое средство

существенно расширяет возможности полиморфизма
Ссылки интерфейсных типовДопускаются ссылки интерфейсных типовТакая ссылка позволяет выполнять над объектом операции, описанные во внешнем контракте, обусловленном

Слайд 59Использование типов
Ссылочные типы
Неявное приведение
Явное приведение
MyNewThread mnt = new MyNewThread();

MyThread mt

= mnt;
Runnable r1 = mnt;
Runnable r2 = mt; // Ошибка!!!

mnt

= (MyNewThread)mt; // Возможен выброс исключения
mnt = (MyNewThread)r1; // ClassCastException
Использование типовСсылочные типыНеявное приведениеЯвное приведениеMyNewThread mnt = new MyNewThread();MyThread mt = mnt;Runnable r1 = mnt;Runnable r2 =

Слайд 60Пустые интерфейсы
Существуют пустые интерфейсы, объявления которых не содержат ни констант,

ни методов

Реализация таких интерфейсов обычно означает способность объекта к чему-либо

Ссылка

такого типа редко имеет смысл (т.к. внешний контракт пуст)

Даже такая ссылка позволяет выполнять методы объекта…
а именно методы, объявленные в классе Object, поскольку они есть у абсолютно любого объекта
Пустые интерфейсыСуществуют пустые интерфейсы, объявления которых не содержат ни констант, ни методовРеализация таких интерфейсов обычно означает способность

Слайд 61
Спасибо за внимание!

Спасибо за внимание!

Слайд 62Дополнительные источники
Арнолд, К. Язык программирования Java [Текст] / Кен Арнолд,

Джеймс Гослинг, Дэвид Холмс. – М. : Издательский дом «Вильямс»,

2001. – 624 с.
Вязовик, Н.А. Программирование на Java. Курс лекций [Текст] / Н.А. Вязовик. – М. : Интернет-университет информационных технологий, 2003. – 592 с.
Хорстманн, К. Java 2. Библиотека профессионала. Том 1. Основы [Текст] / Кей Хорстманн, Гари Корнелл. – М. : Издательский дом «Вильямс», 2010 г. – 816 с.
Эккель, Б. Философия Java [Текст] / Брюс Эккель. – СПб. : Питер, 2011. – 640 с.
JavaSE at a Glance [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/overview/index.html, дата доступа: 21.10.2011.
JavaSE APIs & Documentation [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/documentation/api-jsp-136079.html, дата доступа: 21.10.2011.
Дополнительные источникиАрнолд, К. Язык программирования Java [Текст] / Кен Арнолд, Джеймс Гослинг, Дэвид Холмс. – М. :

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика