
- •1. Історія створення Java.
- •2. Історія розвитку Java
- •3.Опишіть поняття “об’єкт”
- •4. Опишіть поняття “клас”
- •5. Опишіть типи відношень між класами
- •6. Переваги і недоліки об’єкто-зорієнтованого програмування
- •7. Опишіть правила побудови ідентифікаторів мови Java, наведіть приклади
- •8. Поняття літералів. Приклади
- •9. Оператори та операції в мові Java
- •11. Типи даних у мові Java
- •12. Клас Object
- •13. Клас String
- •14. Клас Class
- •15. Імена в Java
- •16. Пакети в Java
- •17. Область видимості імен
- •18.Об’ява класів у Java
- •19.Приведення типів у Java
- •21.Приведення посилальних типів даних.
- •22.Приведення до рядка.
- •23.Заборонені приведення.
- •24.Застосування приведення типів.
- •25.Статичні елементи.
- •26. Ключові слова this і super.
- •27. Ключове слово abstract.
- •28. Поняття інтерфейсів.
- •29. Поліморфізм.
- •30. Масиви в Java.
- •31. Приведення типів для масивів.
- •32. Клонування масивів.
- •33. Керування ходом виконання програми.
- •34. Нормальне і перерване виконання операторів.
- •35. Блоки і локальні змінні.
- •36. Порожній оператор.
- •38. Синтаксис оператора if.
- •39. Синтаксис оператора switch.
- •40. Керування циклами.
- •41.Синтаксис оператора while
- •42.Ситаксис оператора do
- •43.Синтаксис оператора for
- •44.Оператори break I continue
- •45.Іменовані блоки
- •46. Оператор return
- •47. Оператор synchronized
- •48. Помилки при роботі програми. Виняткові ситуації
- •48. Помилки при роботі програми. Виняткові ситуації
- •49.Причини виникнення помилок
- •50.Обробки виняткових ситуацій
- •51.Конструкція try-catch-finally
- •52.Використання оператора throw
- •53.Виняткові ситуації, які перевіряються і які не перевіряються
- •54.Створення класів користувача обробки виняткових ситуацій
- •55.Поняття потокв в Java
- •56.Базові класи для роботи з потоками
- •57.Класс Thread
- •58. Інтерфейс Runnable
- •60. Потоки-демони
- •61.Синхронізація роботи потоків.
- •62.Класи обгортки для примітивних типів.
- •63.Клас Math.
- •66.Клас Calendar.
- •67.Клас TimeZone.
- •68. Колекції java
- •69.Інтерфейс Collection.
- •70.Інтерфейс Set.
- •71.Інтерфейс List.
- •72.Інтерфейс Map.
- •73.Інтерфейс SortedSet.
- •74.Інтерфейс SortedMap.
- •75.Інтерфейс Iterator.
- •76.Конкретні класи колекцій.
- •77.Клас Properties.
- •78. Інтерфейс Comparator.
- •79.Клас BitSet.
- •80.Клас Random.
- •81.Система введення/виведення. Потоки даних.
- •82.Класи реалізації потоків даних.
- •84. Робота із файловою системою.
- •59. Робота із пріоритетами потоків
53.Виняткові ситуації, які перевіряються і які не перевіряються
Всі виняткові ситуації можна розділити на дві категорії оброблювані
( checked ) і не оброблювані ( unchecked ) .Усі винятки , породжені від java.lang.Exception є оброблюваними . Тобто під
час компіляції перевіряється - чи передбачена обробка можливих виняткових
ситуацій .Винятки , породжені від java.lang.RunTimeException , є необроблюваними,
і компілятор не вимагає обов'язкової їх обробки.Як правило , оброблювані виключення призначені для обробки ситуацій пов'язаних з оточенням програми ( мережевим , файловим введенням- висновком та ін), які можуть виникнути незалежно від того , коректно написаний код чи ні. наприклад ,відкриття мережевого з'єднання або файлу може призвести до виникнення помилки, і компілятор вимагає від програміста передбачити якісь дії для обробки можливих проблем. ( Можливо ніяких дій зроблено не буде, тобто блок catch () { } можна залишити порожнім , проте компілятор це трактує як обробку виключення і не видасть повідомлення про помилку компіляції ) Всі призначені для користувача виключення , породжені від java.lang.Exception (або його нащадків ) є робочими .Необроблювані винятки , це помилки програми , які при правильному кодуванні виникати не повинні (наприклад , java.lang.IndexOfBoundException ,java.lang.ArifmeticException виникають відповідно при вказівці індексу виходить за межі масиву і при діленні на нуль ) . Тому , щоб не захаращувати програму ,компілятор дозволяє не обробляти за допомогою блоків try {} catch ( ) виключення цього типу.
Винятки , породжені від Error , так само не є робочими . ці помилки
призначені для того що б повідомити програму про виникнення збоїв які
програмним способом усунути складно , або неможливо взагалі. Як приклад
можна навести StackOverflowError , OutOfMemoryError .
Слід звернути увагу , що хоча необроблювані помилки не обов'язково поміщати
в блоки try {} catch ( ) ... , вони обробляються точно так само як і звичайні помилки. Тобто якщо ви не можете гарантувати , що В час виконання не буде порушена межа
масиву (наприклад при динамічному визначенні розміру масиву) , то код у якому
проводиться звернення до елементів масиву слід помістити в блок try {}
catch ( java.lang.IndexOfBoundException ex ) { ...} .
Далі , у разі якщо в підпрограмі можуть виникати необроблювані помилки , то
вказівка ключового слова throws не є обов'язковим.
Помилки ( Error) , говорять про наявність фатальних ситуацій і немає необхідності обробляти їх. Вони можуть свідчити про помилки програми , але , як правило , це непереборні помилки віртуальної машини Java. Наприклад , вичерпання вільної пам'яті , переповнення стеку і т.д.В розробці і проектуванні програмного забезпечення використовується поняття контракту . Одним з аспектів є чітке
розмежування відповідальності між викликаними і викликаючими методами. наприклад
при виклику методу виробляється обчислення квадратного, тоді на вхід методу не може бути передано негативне число. Якщо це відбувається , то метод повинен викликати виняткову ситуацію , оскільки контракт порушений. Цей підхід найбільш зрозумілий і спрощує програмування , так як метод повинен обробляти тільки правильно задані
параметри і не повинен знати нічого про обробку неправильних . Крім того він повинен
повідомити викликає метод про виникнення цієї ситуації , відразу по її виникненню .
Для реалізації цього підходу рекомендується використовувати винятки які обробляються( checked ).Як було сказано раніше , можливе завдання декількох операторів catch для одного блоку try . Якщо програміст бажає перехоплювати якийсь набір виняткових ситуацій , він може вказати в блоці catch батьківський клас замість перерахування кількох підкласів . Наприклад можна перехоплювати всі виключення породжені від java.lang.Exception наступним чином
try { ... } catch ( Exception e ) { ... }
Так як батьком усіх винятків є java.lang.Throwable , то якщо необхідно в якому - небудь місці коду перехоплювати всі виняткові ситуації , то цілком застосовна
ось така конструкція try { ... } catch ( Throwable e ) { ... }
проте слід уникати використання такої конструкції без явних на те причин. Т.к. в блоці catch будуть оброблятися самі різні помилки , що порушить структуру коду і ускладнить його розуміння . У разі якщо в конструкції обробки виключень використовується декілька операторів catch , то класи виключень потрібно перераховувати в них послідовно , від менш загальних до більш загальних . Розглянемо два приклади try { ...}
catch ( Exception e ) { ...}catch ( IOException ioe ) { ...}catch ( UserExcetion ue ) { ...}
У даному прикладі при виникненні виняткової ситуації ( клас якої породжений
від Exception ) виконуватиметься завжди тільки перший блок catch . Решта не будуть
виконані ні за яких умов . Ця ситуація відстежується компілятором , який
повідомляє про UnreachableCodeException (помилка - недосяжний код ) . правильно дана
конструкція буде виглядати так
try {
...}
catch ( UserExcetion ue ) {
...}
catch ( IOException ioe ) {
...}
catch ( Exception e ) {
...}
У цьому випадку буде проведена послідовна обробка виключень . І у випадку
якщо не передбачена обробка того типу винятку , яке виникло (наприклад ,
AnotherUserException ) , буде виконаний блок catch ( Exception e ) { ...}
Якщо спрацьовує один з блоків catch , то інші блоки в даній конструкції try - catch
виконуватися не будуть.