ОБЪЕКТНО-
ОРИЕНТИРОВАННОЕ
ПРОГРАММИРОВАНИЕ,
ИСКЛЮЧЕНИЯ.
ЧАСТЬ II
КЛЮЧЕВОЕ СЛОВО FINAL
К методам тоже можно применить модификатор final.
Это будет значить, что при наследовании данный
метод нельзя переопределить
Модификатор final может применяться к классам тоже. Это
будет означать, что нельзя создать наследников этого
класса
Из-за того, что класс объявляется final, можно сказать, что
все его методы тоже становятся final - их нельзя
переопределить, как и в прошлом примере:
СБОРКА МУСОРА
Java-программисту не нужно следить за распределением памяти, так как сборщик
мусора управляет памятью автоматически. Сборщик мусора запускается виртуальной
машиной Java (JVM).
Сборщик мусора — это низкоприоритетный процесс, который запускается периодически
и освобождает память, использованную объектами, которые больше не нужны.
Разные JVM имеют отличные друг от друга алгоритмы сбора мусора. Существует
несколько используемых алгоритмов, например: алгоритм подсчёта ссылок или
алгоритмы разметки и очистки.
JVM обычно запускает сборщик мусора при низком уровне свободной памяти. Но
работа сборщика мусора не гарантирует, что всегда будет оставаться достаточно
свободной памяти. Если памяти недостаточно даже после восстановления, JVM
генерирует исключение OutOfMemoryError. Обратите внимание, что перед
генерированием исключения JVM обязательно запускает сборщик мусора как минимум
1 раз. Вы можете запросить запуск сборщика мусора, но вы не можете принудительно
задавать это действие.
ЗАПРОС ЗАПУСКА
СБОРЩИКА МУСОРА
System.gc()
Runtime.getRuntime().gc()
ПРИГОДНОСТЬ ДЛЯ ЗАПУСКА
СБОРЩИКА МУСОРА
Объект подлежит утилизации, когда он недоступен живому потоку.
Объект может подлежать утилизации в разных случаях:
•Если переменная ссылочного типа, которая ссылается на объект,
установлена в положение "0", объект подлежит утилизации, в том
случае, если на него нет других ссылок.
•Если переменная ссылочного типа, которая ссылается на объект,
создана для ссылки на другой объект, объект подлежит утилизации, в
том случае, если на него нет других ссылок.
•Объекты, созданные локально в методе, подлежат утилизации, когда
метод завершает работу, если только они не экспортируются из этого
метода (т.е, возвращаются или генерируются как исключение).
•Объекты, которые ссылаются друг на друга, могут подлежать
утилизации, если ни один из них не доступен живому потоку.
В этом примере объект Integer (целочисленный), на который
первоначально ссылается указатель o1 может подвергаться
утилизации после строки 3, так как o1 теперь ссылается на
объект String (строковый). Несмотря на то, что o2 создан для
ссылки к нулю, объект String (строковый) не подлежит
утилизации, так как o1 ссылается на него.
ФИНАЛИЗАЦИЯ
Java-технология позволяет использовать метод finalize()
(финализировать), чтобы произвести необходимую очистку
перед тем, как сборщик мусора извлекает объект из памяти.
Этот метод вызывается для объекта сборщиком мусора,
когда сборщик мусора вычисляет, что ссылок к объекту
больше нет. Это описано в классе Object, а значит, это
наследуется всеми классами.
Подкласс отменяет метод finalize(), чтобы освободиться от
системных ресурсов или для ещё одной очистки
Если незарегистрированное исключение генерируется
методом finalize(), то исключение игнорируется и
финализация этого объекта прекращается. Метод finalize()
будет активизирован только один раз за время
существования объекта. Возможно использование метода
finalize() любого объекта, чтобы защитить его от утилизации.
Но в этом случае сборщик мусора уже не активирует finalize()
для этого объекта. Метод finalize() всегда будет
активизирован один раз перед тем, как объект будет удалён
сборщиком мусора. Однако, возможно, что метод finalize() не
будет активизирован для данного объекта за всё время его
существования, так как он может не подлежать утилизации.
Правильный вариант: B
Пояснение: из трёх объектов, созданных в строках 1, 2 и 3,
только объект Integer подлежит утилизации в конце строки 7.
Переменная ссылки, a, которая первоначально ссылалась на
объект Integer, ссылается на объект String в строке 5. Таким
образом, Integer oбъект подлежит утилизации после строки 5,
так как нет переменных, которые ссылаются на него.
Переменные b и c ссылаются на объекты String и Long
объекты в строках 6 и 7, поэтому они не подлежат
утилизации.
ПАКЕТЫ
Как правило, в Java классы объединяются в пакеты. Пакеты
позволяют организовать классы логически в наборы. По
умолчанию java уже имеет ряд встроенных пакетов,
например, java.lang, java.util, java.io и т.д. Кроме того, пакеты
могут иметь вложенные пакеты.
Организация классов в виде пакетов позволяет избежать
конфликта имен между классами. Ведь нередки ситуации, когда
разработчики называют свои классы одинаковыми именами.
Принадлежность к пакету позволяет гарантировать
однозначность имен.
Чтобы указать, что класс принадлежит определенному пакету,
надо использовать директиву package, после которой
указывается имя пакета:
package название_пакета;
Как правило, названия пакетов соответствуют физической
структуре проекта, то есть организации каталогов, в которых
находятся файлы с исходным кодом. А путь к файлам внутри
проекта соответствует названию пакета этих файлов.
Например, если классы принадлежат пакету mypack, то эти
классы помещаются в проекте в папку mypack.
Классы необязательно определять в пакеты. Если для класса
пакет не определен, то считается, что данный класс
находится в пакете по умолчанию, который не имеет имени.
ИМПОРТ ПАКЕТОВ И
КЛАССОВ
Если нам надо использовать классы из других пакетов, то
нам надо подключить эти пакеты и классы. Исключение
составляют классы из пакета java.lang (например, String),
которые подключаются в программу автоматически.
Например, знакомый по прошлым темам
класс Scanner находится в пакете java.util, поэтому мы
можем получить к нему доступ следующим способом:
java.util.Scanner in = new java.util.Scanner(System.in);
То есть мы указываем полный путь к файлу в пакете при
создании его объекта. Однако такое нагромождение имен
пакетов не всегда удобно, и в качестве альтернативы мы можем
импортировать пакеты и классы в проект с помощью
директивы import, которая указывается после директивы
package:
иректива import указывается в самом начале кода, после чего
идет имя подключаемого класса (в данном случае класса
Scanner).
В примере выше мы подключили только один класс, однако
пакет java.util содержит еще множество классов. И чтобы не
подключать по отдельности каждый класс, мы можем сразу
подключить весь пакет:
Возможна ситуация, когда мы используем два класса с одним
и тем же названием из двух разных пакетов, например, класс
Date имеется и в пакете java.util, и в пакете java.sql. И если
нам надо одновременно использовать два этих класса, то
необходимо указывать полный путь к этим классам в пакете:
СТАТИЧЕСКИЙ ИМПОРТ
В java есть также особая форма импорта - статический
импорт. Для этого вместе с директивой import используется
модификатор static:
Здесь происходит статический импорт классов System и Math.
Эти классы имеют статические методы. Благодаря операции
статического импорта мы можем использовать эти методы
без названия класса. Например, писать не Math.sqrt(20),
а sqrt(20), так как функция sqrt(), которая возвращает
квадратный корень числа, является статической. (Позже мы
рассмотрим статические члены класса).
То же самое в отношении класса System: в нем определен
статический объект out, поэтому мы можем его использовать
без указания класса.
ШАБЛОНЫ (GENERICS)
Настраиваемым типом называется класс который
описывает логику работу на не описывает типы данных,
с которыми происходят действия. Настраиваемые типы в
Java, являются аналогами шаблонных классов в C++.
НАСЛЕДОВАНИЕ
Generic может наследоваться от non-generic класса
Non-generic класс может наследоваться от <Object>
родителя, но не от <T>
+ class Child<T> extends Parent <T>
x Class Child<X> extends Parent <T>
+ class Child <X,T> extends Parent<T>
+ class Child <X,T> extends Parent
X class child <X,Y,Z> extends Parent <X,Z>
+ Class Child<X,Y,Z> extends Parent <X,Z,String>
Можно инициализировать родителя через ребенка
Parent<T> newParent = new Child<String>()
И наоборот
Child<T> newCHild = new Parent<T>()
ИНТЕРФЕЙСЫ
Могут быть обобщенные интерфейсы
Примеры:
Class A implements Inter
Class A implements Inter<RefType>
Class A<T> implements Inter<T>
Class A<T> implements Inter
МЕТОДЫ
В Non-generic классе
Перед возвращаемым значением надо указать, что это
generic
Public <T> [возвращаемый тип] [имя метода] (T t)
{return t}
В generic классе, можем добавить generic методы, не
связанные типом с типом класса
МОГУТ БЫТЬ GENERIC
КОНСТРУКТОРЫ (НО ОНИ НЕ
БУДУТ ВОЗВРАЩАТЬ ЗНАЧЕНИЯ)
Мы не можем создать поле generic типа, не
специфицированного в сигнатуре
ВЫЗОВ МЕТОДА НЕ
СПЕЦИФИЦИРОВАННОГО
GENERIC ТИПА
ГРАНИЦЫ
<T extends Class> T и все потомки
Нельзя использовать финальные типа (Integer, Long, etc)
Специфицируем интерфейс используя &
<T extends Class & interface>
WILD CARD
Синтаксис <?>
В таком случае будет принимать любой объект, но мы
ничего не сможем с этим сделать, ибо это обычный
Object
Следует использовать
<? SUPER CLASS> - КЛАСС И
ВСЕ СУПЕРКЛАССЫ
Можно изменять (set) значения для всех детей
Но без явного преобразования не может получать
значения (get)
<? EXTENDS CLASS> - КЛАСС
И ВСЕ ПОТОМКИ
Можно получать значения (get), но нельзя их
присваивать (set)
НЕЛЬЗЯ СОВМЕЩАТЬ GENERIC
И НЕ GENERIC КОД. ВООБЩЕ.
ИСКЛЮЧЕНИЯ
Исключение - это нештатная ситуация, ошибка во время выполнения
программы. Самый простой пример - деление на ноль. Можно вручную
отслеживать возникновение подобных ошибок, а можно воспользоваться
специальным механизмом исключений, который упрощает создание
больших надёжных программ, уменьшает объём необходимого кода и
повышает уверенность в том, что в приложении не будет
необработанной ошибки.
В методе, в котором происходит ошибка, создаётся и передаётся
специальный объект. Метод может либо обработать исключение
самостоятельно, либо пропустить его. В любом случае исключение
ловится и обрабатывается. Исключение может появиться благодаря
самой системе, либо вы сами можете создать его вручную. Системные
исключения возникают при неправильном использовании языка Java или
запрещённых приёмов доступа к системе. Ваши собственные
исключения обрабатывают специфические ошибки вашей программы.
После срабатывания исключения программа
возвращается шаг за шагом назад, вверх по иерархии.
Это действие прервется, если кто-то обработает
исключение. Если такого не случится, исключение будет
обработано самой JVM
Процесс движения по иерархии называется раскруткой
стека вызовов
Все исключения наследуют класс Exception (java.lang)
Unchecked Exceptions наследуют класс Runtime
Exception)
Исключения обрабатываются через блоки try/catch/finally
В try оборачивается исключительная ситуация
Catch срабатывает при появлении исключения
Finally срабатывает всегда
НАЧИНАЯ С JAVA 7, СУЩЕСТВУЕТ
БЛОК TRY/MULTICATCH
THROW
Ключевое слово throw используется чтобы выбросить
исключение
Если в методе выбрасывается определенное
исключение, если либо надо окружить блоками try/catch,
либо в сигнатуре метода добавить ключевое слово
throws [название исключения.]
В таком случае либо ответственность за trycatch ляжет
на метод выше по иерархии, либо он обработается
автоматически JVM, если будет продолжаться
использоваться ключевое слово throws
Также, вместо исключения можно выбросить ошибку
( Error). Она и Exception имеют общий суперкласс
Throwable.
CHECKED/UNCHECKED
ИСКЛЮЧЕНИЯ
Checked исключения – это исключительные ситуации,
вызываемые во время компиляции. Не являются ошибками,
а исключительные ситуации во время работы программы.
Обязаны быть обернуты в блоки trycatch. Без этого
программа не скомпилируется. ВСЕ производные классы от
класса Exception (кроме Runtime Exception) – это checked
исключения. Это частое явление. Одним из таких является,
например FileNotFoundException (файл может быть ,а может
и не быть)
Unchecked исключения срабатывают во время исполнения
программы. Без их обработки программа сработает, но
может выдасться предупреждение. Такие исключения – это
ОШИБКИ в программе, их не должны быть в нормально
спроектированной программе. Пример: деление на ноль.
Unchecked исключения проиизводны от класса Runtime
Exception

Step 3.2

  • 1.
  • 2.
    КЛЮЧЕВОЕ СЛОВО FINAL Кметодам тоже можно применить модификатор final. Это будет значить, что при наследовании данный метод нельзя переопределить Модификатор final может применяться к классам тоже. Это будет означать, что нельзя создать наследников этого класса Из-за того, что класс объявляется final, можно сказать, что все его методы тоже становятся final - их нельзя переопределить, как и в прошлом примере:
  • 3.
    СБОРКА МУСОРА Java-программисту ненужно следить за распределением памяти, так как сборщик мусора управляет памятью автоматически. Сборщик мусора запускается виртуальной машиной Java (JVM). Сборщик мусора — это низкоприоритетный процесс, который запускается периодически и освобождает память, использованную объектами, которые больше не нужны. Разные JVM имеют отличные друг от друга алгоритмы сбора мусора. Существует несколько используемых алгоритмов, например: алгоритм подсчёта ссылок или алгоритмы разметки и очистки. JVM обычно запускает сборщик мусора при низком уровне свободной памяти. Но работа сборщика мусора не гарантирует, что всегда будет оставаться достаточно свободной памяти. Если памяти недостаточно даже после восстановления, JVM генерирует исключение OutOfMemoryError. Обратите внимание, что перед генерированием исключения JVM обязательно запускает сборщик мусора как минимум 1 раз. Вы можете запросить запуск сборщика мусора, но вы не можете принудительно задавать это действие.
  • 4.
  • 5.
    ПРИГОДНОСТЬ ДЛЯ ЗАПУСКА СБОРЩИКАМУСОРА Объект подлежит утилизации, когда он недоступен живому потоку. Объект может подлежать утилизации в разных случаях: •Если переменная ссылочного типа, которая ссылается на объект, установлена в положение "0", объект подлежит утилизации, в том случае, если на него нет других ссылок. •Если переменная ссылочного типа, которая ссылается на объект, создана для ссылки на другой объект, объект подлежит утилизации, в том случае, если на него нет других ссылок. •Объекты, созданные локально в методе, подлежат утилизации, когда метод завершает работу, если только они не экспортируются из этого метода (т.е, возвращаются или генерируются как исключение). •Объекты, которые ссылаются друг на друга, могут подлежать утилизации, если ни один из них не доступен живому потоку.
  • 6.
    В этом примереобъект Integer (целочисленный), на который первоначально ссылается указатель o1 может подвергаться утилизации после строки 3, так как o1 теперь ссылается на объект String (строковый). Несмотря на то, что o2 создан для ссылки к нулю, объект String (строковый) не подлежит утилизации, так как o1 ссылается на него.
  • 7.
    ФИНАЛИЗАЦИЯ Java-технология позволяет использоватьметод finalize() (финализировать), чтобы произвести необходимую очистку перед тем, как сборщик мусора извлекает объект из памяти. Этот метод вызывается для объекта сборщиком мусора, когда сборщик мусора вычисляет, что ссылок к объекту больше нет. Это описано в классе Object, а значит, это наследуется всеми классами. Подкласс отменяет метод finalize(), чтобы освободиться от системных ресурсов или для ещё одной очистки
  • 8.
    Если незарегистрированное исключениегенерируется методом finalize(), то исключение игнорируется и финализация этого объекта прекращается. Метод finalize() будет активизирован только один раз за время существования объекта. Возможно использование метода finalize() любого объекта, чтобы защитить его от утилизации. Но в этом случае сборщик мусора уже не активирует finalize() для этого объекта. Метод finalize() всегда будет активизирован один раз перед тем, как объект будет удалён сборщиком мусора. Однако, возможно, что метод finalize() не будет активизирован для данного объекта за всё время его существования, так как он может не подлежать утилизации.
  • 10.
    Правильный вариант: B Пояснение:из трёх объектов, созданных в строках 1, 2 и 3, только объект Integer подлежит утилизации в конце строки 7. Переменная ссылки, a, которая первоначально ссылалась на объект Integer, ссылается на объект String в строке 5. Таким образом, Integer oбъект подлежит утилизации после строки 5, так как нет переменных, которые ссылаются на него. Переменные b и c ссылаются на объекты String и Long объекты в строках 6 и 7, поэтому они не подлежат утилизации.
  • 11.
    ПАКЕТЫ Как правило, вJava классы объединяются в пакеты. Пакеты позволяют организовать классы логически в наборы. По умолчанию java уже имеет ряд встроенных пакетов, например, java.lang, java.util, java.io и т.д. Кроме того, пакеты могут иметь вложенные пакеты. Организация классов в виде пакетов позволяет избежать конфликта имен между классами. Ведь нередки ситуации, когда разработчики называют свои классы одинаковыми именами. Принадлежность к пакету позволяет гарантировать однозначность имен. Чтобы указать, что класс принадлежит определенному пакету, надо использовать директиву package, после которой указывается имя пакета: package название_пакета;
  • 12.
    Как правило, названияпакетов соответствуют физической структуре проекта, то есть организации каталогов, в которых находятся файлы с исходным кодом. А путь к файлам внутри проекта соответствует названию пакета этих файлов. Например, если классы принадлежат пакету mypack, то эти классы помещаются в проекте в папку mypack. Классы необязательно определять в пакеты. Если для класса пакет не определен, то считается, что данный класс находится в пакете по умолчанию, который не имеет имени.
  • 13.
    ИМПОРТ ПАКЕТОВ И КЛАССОВ Еслинам надо использовать классы из других пакетов, то нам надо подключить эти пакеты и классы. Исключение составляют классы из пакета java.lang (например, String), которые подключаются в программу автоматически. Например, знакомый по прошлым темам класс Scanner находится в пакете java.util, поэтому мы можем получить к нему доступ следующим способом: java.util.Scanner in = new java.util.Scanner(System.in);
  • 14.
    То есть мыуказываем полный путь к файлу в пакете при создании его объекта. Однако такое нагромождение имен пакетов не всегда удобно, и в качестве альтернативы мы можем импортировать пакеты и классы в проект с помощью директивы import, которая указывается после директивы package: иректива import указывается в самом начале кода, после чего идет имя подключаемого класса (в данном случае класса Scanner). В примере выше мы подключили только один класс, однако пакет java.util содержит еще множество классов. И чтобы не подключать по отдельности каждый класс, мы можем сразу подключить весь пакет:
  • 16.
    Возможна ситуация, когдамы используем два класса с одним и тем же названием из двух разных пакетов, например, класс Date имеется и в пакете java.util, и в пакете java.sql. И если нам надо одновременно использовать два этих класса, то необходимо указывать полный путь к этим классам в пакете:
  • 17.
    СТАТИЧЕСКИЙ ИМПОРТ В javaесть также особая форма импорта - статический импорт. Для этого вместе с директивой import используется модификатор static:
  • 18.
    Здесь происходит статическийимпорт классов System и Math. Эти классы имеют статические методы. Благодаря операции статического импорта мы можем использовать эти методы без названия класса. Например, писать не Math.sqrt(20), а sqrt(20), так как функция sqrt(), которая возвращает квадратный корень числа, является статической. (Позже мы рассмотрим статические члены класса). То же самое в отношении класса System: в нем определен статический объект out, поэтому мы можем его использовать без указания класса.
  • 19.
    ШАБЛОНЫ (GENERICS) Настраиваемым типомназывается класс который описывает логику работу на не описывает типы данных, с которыми происходят действия. Настраиваемые типы в Java, являются аналогами шаблонных классов в C++.
  • 20.
    НАСЛЕДОВАНИЕ Generic может наследоватьсяот non-generic класса Non-generic класс может наследоваться от <Object> родителя, но не от <T> + class Child<T> extends Parent <T> x Class Child<X> extends Parent <T> + class Child <X,T> extends Parent<T> + class Child <X,T> extends Parent X class child <X,Y,Z> extends Parent <X,Z> + Class Child<X,Y,Z> extends Parent <X,Z,String>
  • 21.
    Можно инициализировать родителячерез ребенка Parent<T> newParent = new Child<String>() И наоборот Child<T> newCHild = new Parent<T>()
  • 22.
    ИНТЕРФЕЙСЫ Могут быть обобщенныеинтерфейсы Примеры: Class A implements Inter Class A implements Inter<RefType> Class A<T> implements Inter<T> Class A<T> implements Inter
  • 23.
    МЕТОДЫ В Non-generic классе Передвозвращаемым значением надо указать, что это generic Public <T> [возвращаемый тип] [имя метода] (T t) {return t} В generic классе, можем добавить generic методы, не связанные типом с типом класса
  • 25.
    МОГУТ БЫТЬ GENERIC КОНСТРУКТОРЫ(НО ОНИ НЕ БУДУТ ВОЗВРАЩАТЬ ЗНАЧЕНИЯ)
  • 26.
    Мы не можемсоздать поле generic типа, не специфицированного в сигнатуре
  • 27.
  • 28.
    ГРАНИЦЫ <T extends Class>T и все потомки Нельзя использовать финальные типа (Integer, Long, etc) Специфицируем интерфейс используя & <T extends Class & interface>
  • 29.
    WILD CARD Синтаксис <?> Втаком случае будет принимать любой объект, но мы ничего не сможем с этим сделать, ибо это обычный Object Следует использовать
  • 30.
    <? SUPER CLASS>- КЛАСС И ВСЕ СУПЕРКЛАССЫ Можно изменять (set) значения для всех детей Но без явного преобразования не может получать значения (get)
  • 31.
    <? EXTENDS CLASS>- КЛАСС И ВСЕ ПОТОМКИ Можно получать значения (get), но нельзя их присваивать (set)
  • 32.
    НЕЛЬЗЯ СОВМЕЩАТЬ GENERIC ИНЕ GENERIC КОД. ВООБЩЕ.
  • 33.
    ИСКЛЮЧЕНИЯ Исключение - этонештатная ситуация, ошибка во время выполнения программы. Самый простой пример - деление на ноль. Можно вручную отслеживать возникновение подобных ошибок, а можно воспользоваться специальным механизмом исключений, который упрощает создание больших надёжных программ, уменьшает объём необходимого кода и повышает уверенность в том, что в приложении не будет необработанной ошибки. В методе, в котором происходит ошибка, создаётся и передаётся специальный объект. Метод может либо обработать исключение самостоятельно, либо пропустить его. В любом случае исключение ловится и обрабатывается. Исключение может появиться благодаря самой системе, либо вы сами можете создать его вручную. Системные исключения возникают при неправильном использовании языка Java или запрещённых приёмов доступа к системе. Ваши собственные исключения обрабатывают специфические ошибки вашей программы.
  • 34.
    После срабатывания исключенияпрограмма возвращается шаг за шагом назад, вверх по иерархии. Это действие прервется, если кто-то обработает исключение. Если такого не случится, исключение будет обработано самой JVM Процесс движения по иерархии называется раскруткой стека вызовов
  • 36.
    Все исключения наследуюткласс Exception (java.lang) Unchecked Exceptions наследуют класс Runtime Exception)
  • 37.
    Исключения обрабатываются черезблоки try/catch/finally В try оборачивается исключительная ситуация Catch срабатывает при появлении исключения Finally срабатывает всегда
  • 39.
    НАЧИНАЯ С JAVA7, СУЩЕСТВУЕТ БЛОК TRY/MULTICATCH
  • 40.
    THROW Ключевое слово throwиспользуется чтобы выбросить исключение
  • 41.
    Если в методевыбрасывается определенное исключение, если либо надо окружить блоками try/catch, либо в сигнатуре метода добавить ключевое слово throws [название исключения.] В таком случае либо ответственность за trycatch ляжет на метод выше по иерархии, либо он обработается автоматически JVM, если будет продолжаться использоваться ключевое слово throws
  • 43.
    Также, вместо исключенияможно выбросить ошибку ( Error). Она и Exception имеют общий суперкласс Throwable.
  • 44.
    CHECKED/UNCHECKED ИСКЛЮЧЕНИЯ Checked исключения –это исключительные ситуации, вызываемые во время компиляции. Не являются ошибками, а исключительные ситуации во время работы программы. Обязаны быть обернуты в блоки trycatch. Без этого программа не скомпилируется. ВСЕ производные классы от класса Exception (кроме Runtime Exception) – это checked исключения. Это частое явление. Одним из таких является, например FileNotFoundException (файл может быть ,а может и не быть) Unchecked исключения срабатывают во время исполнения программы. Без их обработки программа сработает, но может выдасться предупреждение. Такие исключения – это ОШИБКИ в программе, их не должны быть в нормально спроектированной программе. Пример: деление на ноль. Unchecked исключения проиизводны от класса Runtime Exception