1. Π’ΠΈΠ΄ΠΈ винятків

Π’ΠΈΠ΄ΠΈ винятків Ρƒ Java

Усі винятки ΠΏΠΎΠ΄Ρ–Π»ΡΡŽΡ‚ΡŒΡΡ Π½Π° 4 Π²ΠΈΠ΄ΠΈ, які насправді Ρ” класами, успадкованими ΠΎΠ΄ΠΈΠ½ Π²Ρ–Π΄ ΠΎΠ΄Π½ΠΎΠ³ΠΎ.

Клас Throwable

Π“ΠΎΠ»ΠΎΠ²Π½ΠΈΠΌ Π±Π°Π·ΠΎΠ²ΠΈΠΌ класом для всіх винятків Ρ” клас Throwable. Π£ класі Throwable ΠΌΡ–ΡΡ‚ΠΈΡ‚ΡŒΡΡ ΠΊΠΎΠ΄, який записує Π² масив ΠΏΠΎΡ‚ΠΎΡ‡Π½Ρƒ трасу стСку Π²ΠΈΠΊΠ»ΠΈΠΊΡ–Π² Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΠΉ. Π©ΠΎ Ρ‚Π°ΠΊΠ΅ траса стСку Π²ΠΈΠΊΠ»ΠΈΠΊΡ–Π², ΠΌΠΈ дізнаємося Ρ‚Ρ€ΠΎΡ…ΠΈ Π·Π³ΠΎΠ΄ΠΎΠΌ.

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ throw ΠΌΠΎΠΆΠ½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΠΈ Ρ‚Ρ–Π»ΡŒΠΊΠΈ ΠΎΠ±'Ρ”ΠΊΡ‚ класу-спадкоємця Throwable. Π† Ρ…ΠΎΡ‡Π° Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π½ΠΎ ΠΌΠΎΠΆΠ½Π° написати ΠΊΠΎΠ΄ Π½Π° ΠΊΡˆΡ‚Π°Π»Ρ‚ throw new Throwable(); β€” Π·Π°Π·Π²ΠΈΡ‡Π°ΠΉ Ρ‚Π°ΠΊ Π½Ρ–Ρ…Ρ‚ΠΎ Π½Π΅ Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ. Π“ΠΎΠ»ΠΎΠ²Π½Π° ΠΌΠ΅Ρ‚Π° існування класу Throwable полягає Π² Ρ‚ΠΎΠΌΡƒ, Ρ‰ΠΎ Ρ†Π΅ Ρ”Π΄ΠΈΠ½ΠΈΠΉ клас-ΠΏΡ€Π΅Π΄ΠΎΠΊ для всіх винятків.

Клас Error

Наступним класом винятків Ρ” клас Error β€” прямий ΡΠΏΠ°Π΄ΠΊΠΎΡ”ΠΌΠ΅Ρ†ΡŒ класу Throwable. Об'Ρ”ΠΊΡ‚ΠΈ Ρ‚ΠΈΠΏΡƒ Error (Ρ– ΠΉΠΎΠ³ΠΎ класів-спадкоємців) ΡΡ‚Π²ΠΎΡ€ΡŽΡ” Java-машина Ρƒ Ρ€Π°Π·Ρ– виникнСння сСрйозних ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, як-ΠΎΡ‚: збою Π² Ρ€ΠΎΠ±ΠΎΡ‚Ρ–, Π±Ρ€Π°ΠΊΡƒ ΠΏΠ°ΠΌ'яті Ρ‚ΠΎΡ‰ΠΎ.

Π—Π°Π·Π²ΠΈΡ‡Π°ΠΉ Π²ΠΈ як програміст Π½Ρ–Ρ‡ΠΎΠ³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Π² ситуації, ΠΊΠΎΠ»ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΡ– Π²ΠΈΠ½ΠΈΠΊΠ»Π° ΠΏΠΎΠΌΠΈΠ»ΠΊΠ° Ρ‚ΠΈΠΏΡƒ Error: Π²ΠΎΠ½Π° Π½Π°Π΄Ρ‚ΠΎ сСрйозна. УсС, Ρ‰ΠΎ Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ, β€” ΠΏΠΎΠ²Ρ–Π΄ΠΎΠΌΠΈΡ‚ΠΈ користувачу, Ρ‰ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π°Π²Π°Ρ€Ρ–ΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΡƒΡ”Ρ‚ΡŒΡΡ, Π°Π±ΠΎ записати всю Π²Ρ–Π΄ΠΎΠΌΡƒ Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–ΡŽ ΠΏΡ€ΠΎ ΠΏΠΎΠΌΠΈΠ»ΠΊΡƒ Π² Π»ΠΎΠ³ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ.

Клас Exception

Винятки Ρ‚ΠΈΠΏΡƒ Exception (Ρ– RuntimeException) β€” Ρ†Π΅ Π·Π²ΠΈΡ‡Π°ΠΉΠ½Ρ– ΠΏΠΎΠΌΠΈΠ»ΠΊΠΈ, які Π²ΠΈΠ½ΠΈΠΊΠ°ΡŽΡ‚ΡŒ ΠΏΡ–Π΄ час Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ Π±Π°Π³Π°Ρ‚ΡŒΠΎΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ–Π². ΠœΠ΅Ρ‚Π° ΠΊΠΎΠΆΠ½ΠΎΠ³ΠΎ Π²ΠΈΠΊΠΈΠ½ΡƒΡ‚ΠΎΠ³ΠΎ винятку β€” Π±ΡƒΡ‚ΠΈ Π·Π°Ρ…ΠΎΠΏΠ»Π΅Π½ΠΈΠΌ Ρ‚ΠΈΠΌ Π±Π»ΠΎΠΊΠΎΠΌ catch, який Π·Π½Π°Ρ”, Ρ‰ΠΎ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Π² Ρ†Ρ–ΠΉ ситуації.

Коли якийсь ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π²ΠΈΠΊΠΎΠ½Π°Ρ‚ΠΈ свою Ρ€ΠΎΠ±ΠΎΡ‚Ρƒ Π· ΡΠΊΠΎΡ—ΡΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ, Π²Ρ–Π½ ΠΎΠ΄Ρ€Π°Π·Ρƒ ΠΌΠ°Ρ” ΠΏΠΎΠ²Ρ–Π΄ΠΎΠΌΠΈΡ‚ΠΈ ΠΏΡ€ΠΎ Ρ†Π΅ Ρ‚ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π·Π²Ρ–Π΄ΠΊΠΈ Π²Ρ–Π΄Π±ΡƒΠ²Π°Ρ”Ρ‚ΡŒΡΡ Π²ΠΈΠΊΠ»ΠΈΠΊ. Для Ρ†ΡŒΠΎΠ³ΠΎ Π²ΠΈΠΊΠΈΠ΄Π°Ρ”Ρ‚ΡŒΡΡ виняток Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΡƒ.

Π†Π½Π°ΠΊΡˆΠ΅ ΠΊΠ°ΠΆΡƒΡ‡ΠΈ, якщо якась Π·ΠΌΡ–Π½Π½Π° виявилася Ρ€Ρ–Π²Π½ΠΎΡŽ null, ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΈΠ½Π΅ NullPointerException, якщо Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ– Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ β€” ΠΊΠΈΠ½Π΅ InvalidArgumentException, якщо Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ– Π²ΠΈΠΏΠ°Π΄ΠΊΠΎΠ²ΠΎ відбулося ділСння Π½Π° Π½ΡƒΠ»ΡŒ β€” ArithmeticException.

Клас RuntimeException

RuntimeException β€” Ρ†Π΅ Ρ€Ρ–Π·Π½ΠΎΠ²ΠΈΠ΄ (ΠΏΡ–Π΄ΠΌΠ½ΠΎΠΆΠΈΠ½Π°) винятків Exception. МоТна Π½Π°Π²Ρ–Ρ‚ΡŒ сказати, Ρ‰ΠΎ RuntimeException β€” Ρ†Π΅ полСгшСна вСрсія Π·Π²ΠΈΡ‡Π°ΠΉΠ½ΠΈΡ… винятків (Exception): Ρ‰ΠΎΠ΄ΠΎ Ρ‚Π°ΠΊΠΈΡ… винятків Π·Π°ΡΡ‚ΠΎΡΠΎΠ²ΡƒΡ”Ρ‚ΡŒΡΡ мСншС Π²ΠΈΠΌΠΎΠ³ Ρ– обмСТСнь.

ΠŸΡ€ΠΎ Ρ€Ρ–Π·Π½ΠΈΡ†ΡŽ ΠΌΡ–ΠΆ Exception Ρ– RuntimeException Π²ΠΈ дізнаєтСся Π΄Π°Π»Ρ–.


2. Винятки, Ρ‰ΠΎ ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΡΡŽΡ‚ΡŒΡΡ: throws, checked exceptions

Винятки, Ρ‰ΠΎ ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΡΡŽΡ‚ΡŒΡΡ: throws, checked exceptions

Усі винятки Π² Java ΠΏΠΎΠ΄Ρ–Π»ΡΡŽΡ‚ΡŒΡΡ Π½Π° 2 ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€Ρ–Ρ— β€” винятки, Ρ‰ΠΎ ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΡΡŽΡ‚ΡŒΡΡ (checked), Ρ– винятки, Ρ‰ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΡΡŽΡ‚ΡŒΡΡ (unchecked).

Усі винятки, успадковані Π²Ρ–Π΄ класів RuntimeException Ρ– Error, Π²Π²Π°ΠΆΠ°ΡŽΡ‚ΡŒΡΡ unchecked-винятками, усі Ρ–Π½ΡˆΡ– β€” checked-винятками.

Π’Π°ΠΆΠ»ΠΈΠ²ΠΎ!

Π§Π΅Ρ€Π΅Π· 20 Ρ€ΠΎΠΊΡ–Π² після ввСдСння винятків, які ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΡΡŽΡ‚ΡŒΡΡ, ΠΌΠ°ΠΉΠΆΠ΅ всі Java-програмісти Π²Π²Π°ΠΆΠ°ΡŽΡ‚ΡŒ Ρ†Π΅ помилкою. 95 % усіх винятків Ρƒ популярних сучасних Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°Ρ… Ρ‚Π°ΠΊΡ–, Ρ‰ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΡΡŽΡ‚ΡŒΡΡ. Π£ Ρ‚Ρƒ саму ΠΌΠΎΠ²Ρƒ C#, яка ΡΠΊΠΎΠΏΡ–ΡŽΠ²Π°Π»Π° Java ΠΌΠ°Π»ΠΎ Π½Π΅ ΠΏΠΎΠ²Π½Ρ–ΡΡ‚ΡŽ, Π½Π΅ стали Π΄ΠΎΠ΄Π°Π²Π°Ρ‚ΠΈ checked-винятки.

Π―ΠΊΠ° ΠΆ основна Π²Ρ–Π΄ΠΌΡ–Π½Π½Ρ–ΡΡ‚ΡŒ ΠΌΡ–ΠΆ checked-винятками ΠΉ unchecked-винятками?

Π”ΠΎ checked-винятків Π²ΠΈΡΡƒΠ²Π°ΡŽΡ‚ΡŒΡΡ Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²Ρ– Π²ΠΈΠΌΠΎΠ³ΠΈ. Π—Π²ΡƒΡ‡Π°Ρ‚ΡŒ Π²ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·Π½ΠΎ Ρ‚Π°ΠΊ.

Π’ΠΈΠΌΠΎΠ³Π° 1

Π―ΠΊΡ‰ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΈΠΊΠΈΠ΄Π°Ρ” checked-виняток, Π²Ρ–Π½ ΠΌΠ°Ρ” містити Ρ‚ΠΈΠΏ Ρ†ΡŒΠΎΠ³ΠΎ винятку Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ (сигнатурі ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ). Π¦Π΅ Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎ для Ρ‚ΠΎΠ³ΠΎ. Ρ‰ΠΎΠ± усі ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, які Π²ΠΈΠΊΠ»ΠΈΠΊΠ°ΡŽΡ‚ΡŒ Ρ†Π΅ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π·Π½Π°Π»ΠΈ ΠΏΡ€ΠΎ Ρ‚Π΅, Ρ‰ΠΎ Π² Π½ΡŒΠΎΠΌΡƒ ΠΌΠΎΠΆΠ΅ Π²ΠΈΠ½ΠΈΠΊΠ½ΡƒΡ‚ΠΈ Ρ‚Π°ΠΊΠΈΠΉ Β«Π²Π°ΠΆΠ»ΠΈΠ²ΠΈΠΉ виняток».

Π£ΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ checked-виняток ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ після ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ–Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, слідом Π·Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈΠΌ словом throws (Π½Π΅ ΠΏΠ»ΡƒΡ‚Π°Ρ‚ΠΈ Π·Ρ– throw). ΠžΡ‚Π°ΠΊΠΈΠΉ вигляд Ρ†Π΅ ΠΌΠ°Ρ”:

Ρ‚ΠΈΠΏ ΠΌΠ΅Ρ‚ΠΎΠ΄ (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ) throws виняток

ΠŸΡ€ΠΈΠΊΠ»Π°Π΄:

checked-виняток unchecked-виняток
public void calculate(int n) throws Exception
{
   if (n == 0)
      throw new Exception("n Π΄ΠΎΡ€Ρ–Π²Π½ΡŽΡ” Π½ΡƒΠ»ΡŽ!");
}
public void calculate(n)
{
   if (n == 0)
      throw new RuntimeException("n Π΄ΠΎΡ€Ρ–Π²Π½ΡŽΡ” Π½ΡƒΠ»ΡŽ!");
}

Π£ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ– ΠΏΡ€Π°Π²ΠΎΡ€ΡƒΡ‡ наш ΠΊΠΎΠ΄ ΠΊΠΈΠ΄Π°Ρ” unchecked-виняток β€” ΠΆΠΎΠ΄Π½ΠΎΡ— Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²ΠΎΡ— Π΄Ρ–Ρ— Π½Π΅ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ. Π£ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ– Π»Ρ–Π²ΠΎΡ€ΡƒΡ‡ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΈΠ΄Π°Ρ” checked-виняток, Ρ‚ΠΎΠΌΡƒ Π² сигнатуру ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π΄ΠΎΠ΄Π°Π»ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ слово throws Ρ– Π²ΠΊΠ°Π·Π°Π»ΠΈ Ρ‚ΠΈΠΏ винятку.

Π―ΠΊΡ‰ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ»Π°Π½ΡƒΡ” Π²ΠΈΠΊΠΈΠ΄Π°Ρ‚ΠΈ ΠΊΡ–Π»ΡŒΠΊΠ° checked-винятків, Ρ—Ρ… усіх ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π²ΠΊΠ°Π·Π°Ρ‚ΠΈ після ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΎΠ³ΠΎ слова throws Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΡƒ. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Π½Π΅Π²Π°ΠΆΠ»ΠΈΠ²ΠΈΠΉ. ΠŸΡ€ΠΈΠΊΠ»Π°Π΄:

public void calculate(int n) throws Exception, IOException
{
   if (n == 0)
      throw new Exception("n Π΄ΠΎΡ€Ρ–Π²Π½ΡŽΡ” Π½ΡƒΠ»ΡŽ!");
   if (n == 1)
      throw new IOException("n Π΄ΠΎΡ€Ρ–Π²Π½ΡŽΡ” ΠΎΠ΄ΠΈΠ½ΠΈΡ†Ρ–");
}

Π’ΠΈΠΌΠΎΠ³Π° 2

Π―ΠΊΡ‰ΠΎ Π²ΠΈ Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Ρ”Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρƒ сигнатурі якого прописано checked-винятки, Ρ‚ΠΎ Π½Π΅ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ ΠΏΡ€ΠΎΡ–Π³Π½ΠΎΡ€ΡƒΠ²Π°Ρ‚ΠΈ Ρ†Π΅ΠΉ Ρ„Π°ΠΊΡ‚.

Π’ΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ– Π°Π±ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠΈΡ‚ΠΈ всі Ρ†Ρ– винятки, додавши Π±Π»ΠΎΠΊΠΈ catch для ΠΊΠΎΠΆΠ½ΠΎΠ³ΠΎ Π· Π½ΠΈΡ…, Π°Π±ΠΎ Π΄ΠΎΠ΄Π°Ρ‚ΠΈ Ρ—Ρ… Ρƒ throws ΡΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ.

Ми Π½Π΅ΠΌΠΎΠ²Π±ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌΠΎ собі: Ρ†Ρ– винятки Π½Π°ΡΡ‚Ρ–Π»ΡŒΠΊΠΈ Π²Π°ΠΆΠ»ΠΈΠ²Ρ–, Ρ‰ΠΎ ΠΌΠΈ ΠΎΠ±ΠΎΠ²'язково ΠΏΠΎΠ²ΠΈΠ½Π½Ρ– Ρ—Ρ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠΈΡ‚ΠΈ. А якщо ΠΌΠΈ Π½Π΅ Π·Π½Π°Ρ”ΠΌΠΎ, як Ρ—Ρ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠΈΡ‚ΠΈ, ΠΌΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ– ΠΏΠΎΠ²Ρ–Π΄ΠΎΠΌΠΈΡ‚ΠΈ Ρ‚ΠΈΠΌ, Ρ…Ρ‚ΠΎ Π±ΡƒΠ΄Π΅ Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Ρ‚ΠΈ наш ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‰ΠΎ Π² Π½ΡŒΠΎΠΌΡƒ ΠΌΠΎΠΆΡƒΡ‚ΡŒ Π²ΠΈΠ½ΠΈΠΊΠ½ΡƒΡ‚ΠΈ Ρ‚Π°ΠΊΡ– винятки.

ΠŸΡ€ΠΈΠΊΠ»Π°Π΄:

Уявімо, Ρ‰ΠΎ ΠΌΠΈ пишСмо ΠΌΠ΅Ρ‚ΠΎΠ΄, який ΠΌΠ°Ρ” створити світ, насСлСний людьми. ΠŸΠΎΡ‡Π°Ρ‚ΠΊΠΎΠ²Π° ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ людСй ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ”Ρ‚ΡŒΡΡ як ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Π’ΠΎΠ΄Ρ– ΠΌΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ– Π΄ΠΎΠ΄Π°Ρ‚ΠΈ винятки, якщо людСй Π½Π°Π΄Ρ‚ΠΎ ΠΌΠ°Π»ΠΎ.

Π‘Ρ‚Π²ΠΎΡ€ΡŽΡ”ΠΌΠΎ Π—Π΅ΠΌΠ»ΡŽ ΠŸΡ€ΠΈΠΌΡ–Ρ‚ΠΊΠ°
public void створитиБвіт(int n) throws ΠŸΠΎΡ€ΠΎΠΆΠ½Ρ–ΠΉΠ‘Π²Ρ–Ρ‚,ΠžΠ΄ΠΈΠ½ΠΎΠΊΠΈΠΉΠ‘Π²Ρ–Ρ‚
{
   if (n == 0)
      throw new ΠŸΠΎΡ€ΠΎΠΆΠ½Ρ–ΠΉΠ‘Π²Ρ–Ρ‚("Π›ΡŽΠ΄Π΅ΠΉ Π²Π·Π°Π³Π°Π»Ρ– Π½Π΅ΠΌΠ°Ρ”!");
   if (n == 1)
      throw new ΠžΠ΄ΠΈΠ½ΠΎΠΊΠΈΠΉΠ‘Π²Ρ–Ρ‚("Надто ΠΌΠ°Π»ΠΎ людСй!");
   System.out.println("Π‘Ρ‚Π²ΠΎΡ€Π΅Π½ΠΎ прСкрасний світ. НасСлСння: " + n);
}
ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΡ‚Π΅Π½Ρ†Ρ–ΠΉΠ½ΠΎ ΠΊΠΈΠ΄Π°Ρ” Π΄Π²Π° checked-винятки:

  • ΠŸΠΎΡ€ΠΎΠΆΠ½Ρ–ΠΉΠ‘Π²Ρ–Ρ‚
  • ΠžΠ΄ΠΈΠ½ΠΎΠΊΠΈΠΉΠ‘Π²Ρ–Ρ‚

Π’ΠΈΠΊΠ»ΠΈΠΊ Ρ†ΡŒΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΌΠΎΠΆΠ½Π° ΠΎΠ±Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Ρ‚Ρ€ΡŒΠΎΠΌΠ° способами:

1. НС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠ»ΡŽΡ”ΠΌΠΎ винятки, Ρ‰ΠΎ Π²ΠΈΠ½ΠΈΠΊΠ°ΡŽΡ‚ΡŒ

ΠΠ°ΠΉΡ‡Π°ΡΡ‚Ρ–ΡˆΠ΅ Ρ‚Π°ΠΊ Π΄Ρ–ΡŽΡ‚ΡŒ Ρ‚ΠΎΠ΄Ρ–, ΠΊΠΎΠ»ΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ– Π½Π΅Π²Ρ–Π΄ΠΎΠΌΠΎ, як ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Ρ†ΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†Ρ–ΡŽ.

Код ΠŸΡ€ΠΈΠΌΡ–Ρ‚ΠΊΠ°
public void створитиНасСлСнийБвіт(int population)
throws ΠŸΠΎΡ€ΠΎΠΆΠ½Ρ–ΠΉΠ‘Π²Ρ–Ρ‚, ΠžΠ΄ΠΈΠ½ΠΎΠΊΠΈΠΉΠ‘Π²Ρ–Ρ‚
{
   створитиБвіт(population);
}
ΠœΠ΅Ρ‚ΠΎΠ΄, Π·Π²Ρ–Π΄ΠΊΠΈ Π·Π΄Ρ–ΠΉΡΠ½ΡŽΡ”Ρ‚ΡŒΡΡ Π²ΠΈΠΊΠ»ΠΈΠΊ, Π½Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠ»ΡŽΡ” винятки Ρ‚Π° Π·ΠΌΡƒΡˆΠ΅Π½ΠΈΠΉ Ρ–Π½Ρ„ΠΎΡ€ΠΌΡƒΠ²Π°Ρ‚ΠΈ ΠΏΡ€ΠΎ Π½ΠΈΡ… Ρ–Π½ΡˆΠΈΡ…: Π΄ΠΎΠ΄Π°Ρ‚ΠΈ Ρ—Ρ… собі Ρƒ throws

2. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠ»ΡŽΡ”ΠΌΠΎ частину винятків

ΠžΠ±Ρ€ΠΎΠ±Π»ΡΡ”ΠΌΠΎ Π·Ρ€ΠΎΠ·ΡƒΠΌΡ–Π»Ρ– ΠΏΠΎΠΌΠΈΠ»ΠΊΠΈ, Π½Π΅Π·Ρ€ΠΎΠ·ΡƒΠΌΡ–Π»Ρ– β€” ΠΊΠΈΠ΄Π°Ρ”ΠΌΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄, Π·Π²Ρ–Π΄ΠΊΠΈ відбувся Π²ΠΈΠΊΠ»ΠΈΠΊ. Для Ρ†ΡŒΠΎΠ³ΠΎ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π΄ΠΎΠ΄Π°Ρ‚ΠΈ Ρ—Ρ…Π½Ρ– Π½Π°Π·Π²ΠΈ Π² throws:

Код ΠŸΡ€ΠΈΠΌΡ–Ρ‚ΠΊΠ°
public void створити НСпороТнійБвіт(int population)
throws ΠŸΠΎΡ€ΠΎΠΆΠ½Ρ–ΠΉΠ‘Π²Ρ–Ρ‚
{
   try
   {
      створитиБвіт(population);
   }
   catch (ΠžΠ΄ΠΈΠ½ΠΎΠΊΠΈΠΉΠ‘Π²Ρ–Ρ‚ e)
   {
      e.printStackTrace();
   }
}
ΠœΠ΅Ρ‚ΠΎΠ΄, Π·Π²Ρ–Π΄ΠΊΠΈ Π·Π΄Ρ–ΠΉΡΠ½ΡŽΡ”Ρ‚ΡŒΡΡ Π²ΠΈΠΊΠ»ΠΈΠΊ, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠ»ΡŽΡ” лишС ΠΎΠ΄ΠΈΠ½ checked-виняток β€” ΠžΠ΄ΠΈΠ½ΠΎΠΊΠΈΠΉΠ‘Π²Ρ–Ρ‚, Π΄Ρ€ΡƒΠ³ΠΈΠΉ Π²Ρ–Π½ ΠΌΠ°Ρ” Π΄ΠΎΠ΄Π°Ρ‚ΠΈ Ρƒ свою сигнатуру: Π²ΠΊΠ°Π·Π°Ρ‚ΠΈ після слова throws

3. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠ»ΡŽΡ”ΠΌΠΎ всі винятки

Π―ΠΊΡ‰ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ ΠΊΠΈΠ΄Π°Ρ” винятки ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, Π·Π²Ρ–Π΄ΠΊΠΈ Π·Π΄Ρ–ΠΉΡΠ½ΡŽΡ”Ρ‚ΡŒΡΡ Π²ΠΈΠΊΠ»ΠΈΠΊ, Ρ‚ΠΎ останній Π·Π°Π²ΠΆΠ΄ΠΈ Π±ΡƒΠ΄Π΅ Π²ΠΏΠ΅Π²Π½Π΅Π½ΠΈΠΉ, Ρ‰ΠΎ всС Π±ΡƒΠ»ΠΎ Π²ΠΈΠΊΠΎΠ½Π°Π½ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ. Π† Π½Π΅ Π·ΠΌΠΎΠΆΠ΅ Π²ΠΆΠΈΡ‚ΠΈ ніяких Π·Π°Ρ…ΠΎΠ΄Ρ–Π², Ρ‰ΠΎΠ± Π²ΠΈΠΏΡ€Π°Π²ΠΈΡ‚ΠΈ ΡΠΈΡ‚ΡƒΠ°Ρ†Ρ–ΡŽ.

Код ΠŸΡ€ΠΈΠΌΡ–Ρ‚ΠΊΠ°
public void ΡΡ‚Π²ΠΎΡ€ΠΈΡ‚ΠΈΠ‘ΡƒΠ΄ΡŒ-якийБвіт(int population)
{
   try
   {
      створитиБвіт(population);
   }
   catch(ΠžΠ΄ΠΈΠ½ΠΎΠΊΠΈΠΉΠ‘Π²Ρ–Ρ‚ e)
   {
      e.printStackTrace();
   }
   catch(ΠŸΠΎΡ€ΠΎΠΆΠ½Ρ–ΠΉΠ‘Π²Ρ–Ρ‚ e)
   {
      e.printStackTrace();
   }
}
Π£ Ρ†ΡŒΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ– ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠ»ΡŽΡŽΡ‚ΡŒΡΡ всі ΠΏΠΎΠΌΠΈΠ»ΠΊΠΈ. ΠœΠ΅Ρ‚ΠΎΠ΄, Π·Π²Ρ–Π΄ΠΊΠΈ Π²Ρ–Π΄Π±ΡƒΠ²Π°Ρ”Ρ‚ΡŒΡΡ Π²ΠΈΠΊΠ»ΠΈΠΊ, Π±ΡƒΠ΄Π΅ Π²ΠΏΠ΅Π²Π½Π΅Π½ΠΈΠΉ, Ρ‰ΠΎ всС ΠΏΡ€ΠΎΠΉΡˆΠ»ΠΎ Ρ‡ΡƒΠ΄ΠΎΠ²ΠΎ.

12
Π—Π°Π΄Π°Ρ‡Π°
ΠœΠΎΠ΄ΡƒΠ»ΡŒ 1. Java Syntax,  21 Ρ€Ρ–Π²Π΅Π½ΡŒ3 лСкція
НСдоступна
ΠŸΡ€ΠΎΠΊΠΎΠ²Ρ‚ΡƒΡ”ΠΌΠΎ виняток
ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠΈ виняток Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ– main, Ρ‰ΠΎΠ± ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΊΠΎΠΌΠΏΡ–Π»ΡŽΠ²Π°Π»Π°ΡΡ. Π£ Ρ€Π°Π·Ρ– виникнСння винятку ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ вивСсти Π½Π° Π΅ΠΊΡ€Π°Π½ рядок errorMessage.
12
Π—Π°Π΄Π°Ρ‡Π°
ΠœΠΎΠ΄ΡƒΠ»ΡŒ 1. Java Syntax,  21 Ρ€Ρ–Π²Π΅Π½ΡŒ3 лСкція
НСдоступна
ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ”ΠΌΠΎ ΠΊΡ€Ρ–Π·ΡŒ сСбС
Π—Ρ€ΠΎΠ±ΠΈ Ρ‚Π°ΠΊ, Ρ‰ΠΎΠ± ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΊΠΎΠΌΠΏΡ–Π»ΡŽΠ²Π°Π»Π°ΡΡ, Π½Π΅ Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‡ΠΈ try-catch.

3. ΠžΠ±Π³ΠΎΡ€Ρ‚Π°Π½Π½Ρ винятків

Checked-винятки здавалися класною Ρ€Ρ–Ρ‡Ρ‡ΡŽ Π² Ρ‚Π΅ΠΎΡ€Ρ–Ρ— Ρ‚Π° виявилися ΠΏΠΎΠ²Π½ΠΈΠΌ розчаруванням Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ†Ρ–.

ΠŸΡ€ΠΈΠΏΡƒΡΡ‚Ρ–ΠΌΠΎ, Ρƒ Π²Π°ΡˆΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ”ΠΊΡ‚Ρ– Ρ” супСрпопулярний ΠΌΠ΅Ρ‚ΠΎΠ΄, який Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Ρ”Ρ‚ΡŒΡΡ Ρ–Π· ΡΠΎΡ‚Π΅Π½ΡŒ ΠΌΡ–ΡΡ†ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ. Π† Π²ΠΈ Π²ΠΈΡ€Ρ–ΡˆΠΈΠ»ΠΈ Π΄ΠΎΠ΄Π°Ρ‚ΠΈ Π² нього Π½ΠΎΠ²ΠΈΠΉ checked-виняток. Π† Ρ‚ΠΎΠ΄Ρ– ΠΌΠΎΠΆΠ΅ виявитися, Ρ‰ΠΎ Ρ†Π΅ΠΉ checked-виняток справді Ρ‚Π°ΠΊΠΈΠΉ Π²Π°ΠΆΠ»ΠΈΠ²ΠΈΠΉ Ρ‚Π° особливий, Ρ‰ΠΎ Ρ‚Ρ–Π»ΡŒΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ main() Π·Π½Π°Ρ”, Ρ‰ΠΎ Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Ρƒ Ρ€Π°Π·Ρ– захоплСння Ρ†ΡŒΠΎΠ³ΠΎ винятку.

ΠžΡ‚ΠΎΠΆ Π²Π°ΠΌ Π΄ΠΎΠ²Π΅Π΄Π΅Ρ‚ΡŒΡΡ Π΄ΠΎΠ΄Π°Ρ‚ΠΈ checked-виняток Ρƒ throws усіх ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ–Π², які Π²ΠΈΠΊΠ»ΠΈΠΊΠ°ΡŽΡ‚ΡŒ ваш супСрпопулярний ΠΌΠ΅Ρ‚ΠΎΠ΄. А Ρ‚Π°ΠΊΠΎΠΆ Ρƒ throws усіх ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ–Π², які Π²ΠΈΠΊΠ»ΠΈΠΊΠ°ΡŽΡ‚ΡŒ Ρ‚Ρ– ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ. Π† Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, які Π²ΠΈΠΊΠ»ΠΈΠΊΠ°ΡŽΡ‚ΡŒ Ρ‚Ρ– ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ.

Π£ підсумку Π΄ΠΎ throws ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ–Π² ΠΏΡ€ΠΎΡ”ΠΊΡ‚Ρƒ Π±ΡƒΠ΄Π΅ Π΄ΠΎΠ΄Π°Π½ΠΎ Π½ΠΎΠ²ΠΈΠΉ checked-виняток. А ΠΏΠΎΡ‚Ρ–ΠΌ Π²ΠΈΡΠ²ΠΈΡ‚ΡŒΡΡ, Ρ‰ΠΎ ваш ΠΏΡ€ΠΎΡ”ΠΊΡ‚ ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠΉ тСстами, Ρ– тСсти Π½Π΅ ΠΊΠΎΠΌΠΏΡ–Π»ΡŽΡŽΡ‚ΡŒΡΡ. Π† Π²Π°ΠΌ Π΄ΠΎΠ²Π΅Π΄Π΅Ρ‚ΡŒΡΡ виправляти throws Ρ‰Π΅ ΠΉ Ρƒ тСстах.

А Π²Ρ–Π΄Ρ‚Π°ΠΊ ΡƒΠ²Π΅ΡΡŒ ваш ΠΊΠΎΠ΄ (Π·ΠΌΡ–Π½ΠΈ Π² сотнях Ρ„Π°ΠΉΠ»Ρ–Π²) Π΄ΠΎΠ²Π΅Π΄Π΅Ρ‚ΡŒΡΡ пСрСвіряти Ρ–Π½ΡˆΠΈΠΌ програмістам. Π† Ρ‚ΡƒΡ‚ ΠΌΠΈ Π·Π°ΠΏΠΈΡ‚ΡƒΡ”ΠΌΠΎ сСбС: Π° задля Ρ‡ΠΎΠ³ΠΎ ΠΌΠΈ вносили Π² ΠΏΡ€ΠΎΡ”ΠΊΡ‚ Π΄ΠΎΡ…Ρ€Ρ–Π½Π°Π»ΡŒΠΉΠΎΠ½ Π·ΠΌΡ–Π½? Π”Π΅Π½ΡŒ (Π΄Π½Ρ–?) Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ, Π·Π»Π°ΠΌΠ°Π½Ρ– тСсти, Ρ– всС Π·Π°Ρ€Π°Π΄ΠΈ додання ΠΎΠ΄Π½ΠΎΠ³ΠΎ checked-винятку?

А Ρ‰Π΅ ΠΆ Ρ” ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π· успадкуванням Ρ– пСрСвизначСнням ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ–Π². ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ Π²Ρ–Π΄ checked-винятків Π½Π°Π±Π°Π³Π°Ρ‚ΠΎ Π±Ρ–Π»ΡŒΡˆΠ΅, Π½Ρ–ΠΆ користі. Π—Π°Π³Π°Π»ΠΎΠΌ Π·Π°Ρ€Π°Π· ΠΌΠ°Π»ΠΎ Ρ…Ρ‚ΠΎ Ρ—Ρ… Π»ΡŽΠ±ΠΈΡ‚ΡŒ Ρ– ΠΌΠ°Π»ΠΎ Ρ…Ρ‚ΠΎ використовує.

Однак всС Ρ‰Π΅ Π±Π°Π³Π°Ρ‚ΠΎ написаного ΠΊΠΎΠ΄Ρƒ (Π·ΠΎΠΊΡ€Π΅ΠΌΠ°, ΠΊΠΎΠ΄ стандартних Π±Ρ–Π±Π»Ρ–ΠΎΡ‚Π΅ΠΊ Java) ΠΌΡ–ΡΡ‚ΠΈΡ‚ΡŒ Ρ†Ρ– саміchecked-винятки. Π† Ρ‰ΠΎ Π· Π½ΠΈΠΌΠΈ Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ? Π†Π³Π½ΠΎΡ€ΡƒΠ²Π°Ρ‚ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ½Π°, обробляти β€” Π½Π΅Π²Ρ–Π΄ΠΎΠΌΠΎ як.

Java-програмісти Π·Π°ΠΏΡ€ΠΎΠΏΠΎΠ½ΡƒΠ²Π°Π»ΠΈ Β«Π·Π°Π³ΠΎΡ€Ρ‚Π°Ρ‚ΠΈΒ» checked-винятки всСрСдину RuntimeException. Π†Π½Π°ΠΊΡˆΠ΅ ΠΊΠ°ΠΆΡƒΡ‡ΠΈ, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠ»ΡŽΠ²Π°Ρ‚ΠΈ всі checked-винятки, ΡΡ‚Π²ΠΎΡ€ΡŽΠ²Π°Ρ‚ΠΈ Π·Π°ΠΌΡ–ΡΡ‚ΡŒ Π½ΠΈΡ… unchecked-винятки (Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, RuntimeException) Ρ– Π²ΠΈΠΊΠΈΠ΄Π°Ρ‚ΠΈ Π²ΠΆΠ΅ Ρ—Ρ…. ΠžΡ‚Π°ΠΊΠΈΠΉ вигляд Ρ†Π΅ ΠΌΠ°Ρ”:

try
{
   ΠΊΠΎΠ΄, Π΄Π΅ ΠΌΠΎΠΆΠ΅ Π²ΠΈΠ½ΠΈΠΊΠ½ΡƒΡ‚ΠΈ checked-виняток
}
catch(Exception exp)
{
   throw new RuntimeException(exp);
}

НС Π΄ΡƒΠΆΠ΅ красивС Ρ€Ρ–ΡˆΠ΅Π½Π½Ρ, Π°Π»Π΅ Π½Ρ–Ρ‡ΠΎΠ³ΠΎ ΠΊΡ€ΠΈΠΌΡ–Π½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ: виняток просто ΠΏΠΎΠΊΠ»Π°Π»ΠΈ всСрСдину винятку RuntimeException.

Коли Ρ” баТання, ΠΉΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½Π° Π·Π²Ρ–Π΄Ρ‚ΠΈ Π»Π΅Π³ΠΊΠΎ дістати. ΠŸΡ€ΠΈΠΊΠ»Π°Π΄:

Код ΠŸΡ€ΠΈΠΌΡ–Ρ‚ΠΊΠ°
try
{
   // ΠΊΠΎΠ΄, ΠΊΡƒΠ΄ΠΈ ΠΌΠΈ Π·Π°ΠΏΠ°ΠΊΡƒΠ²Π°Π»ΠΈ checked-виняток
   // Ρƒ RuntimeException
}
catch(RuntimeException e)
{
   Throwable cause = e.getCause();
   if (cause instanceof Exception)
   {
      Exception exp = (Exception) cause;
      // Ρ†Π΅ ΠΊΠΎΠ΄ для ΠΎΠ±Ρ€ΠΎΠ±ΠΊΠΈ Exception
   }
}







ΠžΡ‚Ρ€ΠΈΠΌΡƒΡ”ΠΌΠΎ виняток, Π·Π±Π΅Ρ€Π΅ΠΆΠ΅Π½ΠΈΠΉ усСрСдині ΠΎΠ±'Ρ”ΠΊΡ‚Π° RuntimeException; cause ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ null

Π’ΠΈΠ·Π½Π°Ρ‡Π°Ρ”ΠΌΠΎ ΠΉΠΎΠ³ΠΎ Ρ‚ΠΈΠΏ Ρ– ΠΏΠ΅Ρ€Π΅Ρ‚Π²ΠΎΡ€ΡŽΡ”ΠΌΠΎ Π½Π° Π·ΠΌΡ–Π½Π½Ρƒ checked-Ρ‚ΠΈΠΏΡƒ.

1
Π—Π°Π΄Π°Ρ‡Π°
ΠœΠΎΠ΄ΡƒΠ»ΡŒ 1. Java Syntax,  23 Ρ€Ρ–Π²Π΅Π½ΡŒ1 лСкція
НСдоступна
ΠžΠ±Π³ΠΎΡ€Ρ‚Π°Π½Π½Ρ винятків
Π£ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ– copyFile ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠΈ винятки, Ρ‰ΠΎ Ρ—Ρ… ΠΊΠΈΠ΄Π°ΡŽΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ readFile Ρ– writeFile. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠ»Π΅Π½Ρ– винятки ΠΎΠ±Π³ΠΎΡ€Π½ΠΈ винятком RuntimeException Ρ– ΠΏΡ€ΠΎΠΊΠΈΠ½ΡŒ Π΄Π°Π»Ρ–.
1
Π—Π°Π΄Π°Ρ‡Π°
ΠœΠΎΠ΄ΡƒΠ»ΡŒ 1. Java Syntax,  23 Ρ€Ρ–Π²Π΅Π½ΡŒ1 лСкція
НСдоступна
Розпакування винятків
Π£ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ– main ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠΈ RuntimeException. Π’ΠΈΠ·Π½Π°Ρ‡, який виняток Π² Π½ΡŒΠΎΠΌΡƒ Π·Π±Π΅Ρ€Π΅ΠΆΠ΅Π½ΠΎ. Π―ΠΊΡ‰ΠΎ Ρ†Π΅ FileNotFoundException, Π²ΠΈΠ²Π΅Π΄ΠΈ Π² консоль повідомлСння "НС вдалося ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΠΈ Ρ„Π°ΠΉΠ».", Π° якщо FileSystemException β€” "НС вдалося записати Ρƒ Ρ„Π°ΠΉΠ».".

4. МноТиннС пСрСхоплСння винятків

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΡ–ΡΡ‚ΠΈ Π΄ΡƒΠΆΠ΅ Π½Π΅ Π»ΡŽΠ±Π»ΡΡ‚ΡŒ Π΄ΡƒΠ±Π»ΡŽΠ²Π°Π½Π½Ρ ΠΊΠΎΠ΄Ρƒ. ΠΠ°Π²Ρ–Ρ‚ΡŒ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ Ρ‚Π°ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€ΠΎΠ·Ρ€ΠΎΠ±ΠΊΠΈ β€” DRY: Don’t Repeat Yourself. ΠŸΡ€ΠΎΡ‚Π΅ ΠΏΡ–Π΄ час ΠΎΠ±Ρ€ΠΎΠ±ΠΊΠΈ винятків часто Π²ΠΈΠ½ΠΈΠΊΠ°ΡŽΡ‚ΡŒ ситуації, ΠΊΠΎΠ»ΠΈ після Π±Π»ΠΎΠΊΠ° try Ρ–Π΄ΡƒΡ‚ΡŒ ΠΊΡ–Π»ΡŒΠΊΠ° Π±Π»ΠΎΠΊΡ–Π² catch Π· ΠΎΠ΄Π½Π°ΠΊΠΎΠ²ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

Або ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, 3 catch-Π±Π»ΠΎΠΊΠΈ Π· ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Ρ– Ρ‰Π΅ 2 catch-Π±Π»ΠΎΠΊΠΈ Π· Ρ–Π½ΡˆΠΈΠΌ. Π—Π°Π³Π°Π»ΠΎΠΌ стандартна ситуація, ΠΊΠΎΠ»ΠΈ Ρƒ Π²Π°ΡˆΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ”ΠΊΡ‚Ρ– Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π°Π»ΡŒΠ½ΠΎ ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ Π΄ΠΎ ΠΎΠ±Ρ€ΠΎΠ±ΠΊΠΈ винятків.

ΠŸΠΎΡ‡ΠΈΠ½Π°ΡŽΡ‡ΠΈ Π· 7-Ρ— вСрсії Π² ΠΌΠΎΠ²Ρƒ Java Π΄ΠΎΠ΄Π°Π»ΠΈ ΠΌΠΎΠΆΠ»ΠΈΠ²Ρ–ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ ΠΊΡ–Π»ΡŒΠΊΠ° Ρ‚ΠΈΠΏΡ–Π² винятків Π² ΠΎΠ΄Π½ΠΎΠΌΡƒ Π±Π»ΠΎΡ†Ρ– catch. ΠžΡ‚Π°ΠΊΠΈΠΉ вигляд Ρ†Π΅ ΠΌΠ°Ρ”:

try
{
   ΠΊΠΎΠ΄, Π΄Π΅ ΠΌΠΎΠΆΠ΅ Π²ΠΈΠ½ΠΈΠΊΠ½ΡƒΡ‚ΠΈ ΠΏΠΎΠΌΠΈΠ»ΠΊΠ°
}
catch(ВипВинятку1 | ВипВинятку2 | ВипВинятку3 Ρ–ΠΌ'я)
{
   ΠΊΠΎΠ΄ ΠΎΠ±Ρ€ΠΎΠ±ΠΊΠΈ винятків
}

Π‘Π»ΠΎΠΊΡ–Π² catch ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ ΡΠΊΡ–Π»ΡŒΠΊΠΈ Π·Π°Π²Π³ΠΎΠ΄Π½ΠΎ. Однак Π² ΠΎΠ΄Π½ΠΎΠΌΡƒ Π±Π»ΠΎΡ†Ρ– catch Π½Π΅ ΠΌΠΎΠΆΠ½Π° Π²ΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ винятки, які ΡƒΡΠΏΠ°Π΄ΠΊΠΎΠ²ΡƒΡŽΡ‚ΡŒΡΡ ΠΎΠ΄ΠΈΠ½ Π²Ρ–Π΄ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Π’ΠΎΠ±Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ½Π° написати catch (Exception | RuntimeException e), ΠΎΡΠΊΡ–Π»ΡŒΠΊΠΈ клас RuntimeException успадковано Π²Ρ–Π΄ Exception.


12
Π—Π°Π΄Π°Ρ‡Π°
ΠœΠΎΠ΄ΡƒΠ»ΡŒ 1. Java Syntax,  21 Ρ€Ρ–Π²Π΅Π½ΡŒ3 лСкція
НСдоступна
Групування винятків
Об'Ρ”Π΄Π½Π°ΠΉ Π±Π»ΠΎΠΊΠΈ catch Π· ΠΎΠ΄Π½Π°ΠΊΠΎΠ²ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

5. Власні винятки

Π’ΠΈ Π·Π°Π²ΠΆΠ΄ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ створити свій власний клас-виняток, просто ΡƒΡΠΏΠ°Π΄ΠΊΡƒΠ²Π°Π²ΡˆΠΈ клас, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, Π²Ρ–Π΄ RuntimeException. ΠžΡ‚Π°ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·Π½ΠΎ вигляд Ρ†Π΅ ΠΌΠ°Ρ‚ΠΈΠΌΠ΅:

class Π†ΠΌ'ΡΠšΠ»Π°ΡΡƒ extends RuntimeException
{
}

Π”Π΅Ρ‚Π°Π»Ρ– ΠΌΠΈ ΠΎΠ±Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌΠΎ, ΠΊΠΎΠ»ΠΈ Π²ΠΈ Π²ΠΈΠ²Ρ‡ΠΈΡ‚Π΅ ООП, успадкування, конструктори ΠΉ пСрСвизначСння ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ–Π².

ΠΠ°Ρ‚ΠΎΠΌΡ–ΡΡ‚ΡŒ, Π½Π°Π²Ρ–Ρ‚ΡŒ якщо Ρƒ вас Ρ” Ρ‚Ρ–Π»ΡŒΠΊΠΈ Ρ‚Π°ΠΊΠΈΠΉ простий клас β€” ΡƒΠ·Π°Π³Π°Π»Ρ– Π±Π΅Π· ΠΊΠΎΠ΄Ρƒ, Π²ΠΈ всС ΠΎΠ΄Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠΊΠΈΠ΄Π°Ρ‚ΠΈ ΠΉΠΎΠ³ΠΎ винятки:

Код ΠŸΡ€ΠΈΠΌΡ–Ρ‚ΠΊΠ°
class Solution
{
   public static void main(String[] args)
   {
      throw new MyException();
   }
}

class MyException extends RuntimeException
{
}




Π’ΠΈΠΊΠΈΠ΄Π°Ρ”ΠΌΠΎ unchecked-виняток MyException.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρƒ Ρ€ΠΎΠ±ΠΎΡ‚Ρƒ Ρ–Π· власними винятками ΠΌΠΈ розглянСмо Ρƒ квСсті Java Multithreading.