Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Java

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Java – это Π½Π΅ΡˆΡ‚Π°Ρ‚Π½Π°Ρ ситуация, ошибка, ΡΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅Π΅ΡΡ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НапримСр, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль. Π’ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ошибок ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠΉ созданиС Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‰ΠΈΠΉ объСм ΠΊΠΎΠ΄Π°. Π’Π°ΠΊ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ пострадаСт ΠΎΡ‚ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ ошибки.

Π’ Ρ‚ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅, Π³Π΄Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка, создаСтся ΠΈ пСрСдаСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠŸΡ€ΠΈ этом ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сам, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. Как Π±Ρ‹ Ρ‚Π°ΠΌ Π½ΠΈ Π±Ρ‹Π»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ловится ΠΈ обрабатываСтся. Оно ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ благодаря систСмС ΠΈΠ»ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. БистСмныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ использовании Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² доступа ΠΊ систСмС ΠΈΠ»ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании Java. Π§Ρ‚ΠΎ касаСтся Π²Π°ΡˆΠΈΡ… собствСнных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ спСцифичСскиС ошибки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ условия ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль. Но Ρ‡Ρ‚ΠΎ, Ссли Π·Π½Π°ΠΌΠ΅Π½Π°Ρ‚Π΅Π»ΡŒ являСтся Π½ΡƒΠ»Π΅ΠΌ? Если ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠΉ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π·Π½Π°ΠΌΠ΅Π½Π°Ρ‚Π΅Π»ΡŒ появился Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ, Ρ‚ΠΎ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΠ·Π±ΡƒΠ΄ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈ Π½ΠΈ Π² ΠΊΠΎΠ΅ΠΌ случаС Π½Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ исполнСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов: try, catch, throw, throws, finally. Π‘Ρ…Π΅ΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ.

Π’ Π±Π»ΠΎΠΊ try ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ. Если ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΎΠ½ΠΎ создаСтся ΠΈ пСрСдаСтся дальшС. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π»ΠΎΠΊΠ° catch ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

Π—Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ систСмных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ сама систСма. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, примСняСтся throw. Π‘ΠΎΠ·Π΄Π°Π½Π½ΠΎΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, указываСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом throws. Код, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠ° try, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π±Π»ΠΎΠΊ finally.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

try {
// Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, Π³Π΄Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ошибки
}
catch (Ρ‚ΠΈΠΏ_ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ_1 exceptionObject) {
// ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ
}
catch (Ρ‚ΠΈΠΏ_ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ_2 exceptionObject) {
// ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ
}
finally {
// ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠ° try
}

Для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ сущСствуСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс Trowable, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ входят 2 класса — Exception ΠΈ Error. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ вашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Класс Runtime Exception сущСствуСт для распространСния ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡŽ массива ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль.

Класс Error примСняСтся для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок Π² языкС Java. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΌ Π½Π΅ придСтся с Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.
ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π»ΡŽΠ±ΠΎΠΌΡƒ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠΌΡƒ программисту захочСтся ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ происходит, Ссли Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡ‚ΠΎΠ² Π½Π° ноль:

intcatNumber;
intzero;
catNumber = 1; // Ρƒ мСня ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΡ‚
zero = 0; // ноль, ΠΎΠ½ ΠΈ Π² АфрикС ноль
intresult = catNumber / zero;

Если Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‰Π΅Π»Ρ‡ΠΊΠ° ΠΊΠ½ΠΎΠΏΠΊΠΈ, Ρ‚ΠΎ систСма Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Java выявит ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ дСлСния Π½Π° ноль, создаст ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ пСрСдаст Π΅Π³ΠΎ. Но Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹. Когда систСма Π²ΠΈΠ΄ΠΈΡ‚ Π²Π°ΡˆΡƒ Π±Π΅Π·Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, вступаСт стандартный систСмный ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ с Π²Ρ€Π΅Π΄Π½Ρ‹ΠΌ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΎΠΌ. Он остановит ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ сообщСниС ΠΎΠ± ошибкС. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ LogCat:

Causedby: java.lang.ArithmeticException: dividebyzeroat ru.alexanderklimov.test.MainActivity.onClick(MainActivity.java:79)

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ относится ΠΊ классу Arithmetic Exception. Π—Π°Ρ‚Π΅ΠΌ систСмный ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Ρ‹Π²Π΅Π» ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС ошибки, Π° Ρ‚Π°ΠΊΠΆΠ΅ мСсто Π΅Π³ΠΎ возникновСния.

Если Π²Ρ‹ Ρ‚Π°ΠΊ ΠΈ оставитС процСсс ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибки систСмы, Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Π½Π΅Π΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ с Ρ‚Π°ΠΊΠΎΠΉ ошибкой, Ρ‚ΠΎ вСроятнСй всСго Π΅Π΅ просто удалят. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ.

РазмСститС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² Π±Π»ΠΎΠΊ try ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Π±Π»ΠΎΠΊΠ΅ catch.

intcatNumber;
intzero;

try{ // ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠΌ ΠΊΠΎΠ΄
catNumber = 1; // Ρƒ мСня ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΡ‚
zero = 0; // ноль, ΠΎΠ½ ΠΈ Π² АфрикС ноль
intresult = catNumber / zero;
Toast.makeText(this, «ΠΠ΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ это сообщСниС!», Toast.LENGTH_LONG).show();
} catch (ArithmeticException e) {
Toast.makeText(this, «ΠΠ΅Π»ΡŒΠ·Ρ ΠΊΠΎΡ‚ΠΎΠ² Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° ноль!», Toast.LENGTH_LONG).show();
}
Toast.makeText(this, «Π–ΠΈΠ·Π½ΡŒ продолТаСтся», Toast.LENGTH_LONG).show();

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ закроСтся Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ с Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π° ноль.

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π»ΠΈ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ классу ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ эта ошибка, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π±Π»ΠΎΠΊΠ΅ catch ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ послСдний ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ срабатываСт Π² Π±Π»ΠΎΠΊΠ΅ try, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ошибка происходит строчкой Π²Ρ‹ΡˆΠ΅. Π—Π°Ρ‚Π΅ΠΌ выполнСния пСрСдаСтся Π² catch ΠΈ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ порядкС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ try ΠΈ catch Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΏΠ°Ρ€Π΅. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ситуации, ΠΊΠΎΠ³Π΄Π° catch ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ нСсколько Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ try.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ описаниС ошибки:

catch (ArithmeticException e) {
Toast.makeText(this, e + «: НСльзя ΠΊΠΎΡ‚ΠΎΠ² Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° ноль!», Toast.LENGTH_LONG).show();
}

Класс Trowable, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ относится Arithmetic Exception, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ описаниС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ e.toString.

НСсколько ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Код ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½ΠΈ ΠΎΠ΄Π½ΠΎ, Π° нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Ρ… мСст. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΠΎΠΌΠΈΠΌΠΎ дСлСния Π½Π° ноль, ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ошибка индСксации массива. Π’ этом случаС Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ большС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² catch для всСх Ρ‚ΠΈΠΏΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠŸΡ€ΠΈ этом ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ ΠΏΠΎ порядкС. Если Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΈ выполнСния прилоТСния продолТаСтся с мСста, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° Π±Π»ΠΎΠΊΠΎΠΌ try/catch.

intcatNumber;
intzero;

try{ // ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠΌ ΠΊΠΎΠ΄
catNumber = 1; // Ρƒ мСня ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΡ‚
zero = 1; // ноль, ΠΎΠ½ ΠΈ Π² АфрикС ноль
intresult = catNumber / zero;
// Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ массив ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… ΠΊΠΎΡ‚ΠΎΠ²
String[] catNames = {«Π’Π°ΡΡŒΠΊΠ°», «Π‘арсик», «ΠœΡƒΡ€Π·ΠΈΠΊ»};
catNames[3] = «Π Ρ‹ΠΆΠΈΠΊ»;
Toast.makeText(this, «ΠΠ΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ это сообщСниС!», Toast.LENGTH_LONG).show();
} catch (ArithmeticException e) {
Toast.makeText(this, e.toString() + «: НСльзя ΠΊΠΎΡ‚ΠΎΠ² Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° ноль!», Toast.LENGTH_LONG).show();
}
catch (ArrayIndexOutOfBoundsException e) {
Toast.makeText(this, «ΠžΡˆΠΈΠ±ΠΊΠ°: » + e.toString(), Toast.LENGTH_LONG).show();
}
Toast.makeText(this, «Π–ΠΈΠ·Π½ΡŒ продолТаСтся», Toast.LENGTH_LONG).show();

Π’ рассматриваСмом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΌΡ‹ использовали массив с трСмя элСмСнтами, Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Π»ΠΈΡΡŒ ΠΊ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΌΡƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π°Π±Ρ‹Π»ΠΈ, Ρ‡Ρ‚ΠΎ отсчСт Ρƒ массива начинаСтся с нуля. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ zero ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎ сработаСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ дСлСния Π½Π° ноль. ΠŸΡ€ΠΈ этом ΠΌΡ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π·Π½Π°Ρ‚ΡŒ ΠΎ сущСствовании Π²Ρ‚ΠΎΡ€ΠΎΠΉ ошибки. Но ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ссли Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… вычислСний Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ = 1. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Arithmetic Exception Π½Π΅ сработаСт, Π½ΠΎ вступит Π½ΠΎΠ²ΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ΅ Array Index Out Of Bounds Exception. Π”Π°Π»ΡŒΡˆΠ΅ процСсс Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅.

Π—Π΄Π΅ΡΡŒ Π²Π°ΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ мноТСствСнныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ catch ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ подклассов ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΡ… супСрклассов. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, супСркласс Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ всС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π°. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Exception Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π²Ρ‹ΡˆΠ΅ Arithmetic Exception ΠΈ Array Index Out Of Bounds Exception. Π₯ΠΎΡ€ΠΎΡˆΠΎ, Ρ‡Ρ‚ΠΎ срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сама ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ нСпорядок ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ вас ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ ΠΎΠ± этом. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠ² Ρ‚Π°ΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, пСрСнСситС Π±Π»ΠΎΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½ΠΈΠΆΠ΅.

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ try

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ try Π±Ρ‹Π²Π°ΡŽΡ‚ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ. Если Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ собствСнного ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° catch для опрСдСлСния ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‚ΠΎ происходит поиск ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° catch Ρƒ внСшнСго Π±Π»ΠΎΠΊΠ° try ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Если Π½Π΅ найдСтся подходящий catch, Ρ‚ΠΎ сама систСма ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‡Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, нСдопустимо.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ throw

БистСма ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Но с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° throw ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Когда выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

throw экзСмпляр_Throwable

Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр класса Throwable ΠΈΠ»ΠΈ ΠΆΠ΅ Π΅Π³ΠΎ наслСдников. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ класса Throwable ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ catch ΠΈΠ»ΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ способом посрСдством ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для ΠΊΠ½ΠΎΠΏΠΊΠΈ:

Catcat;

publicvoidonClick(Viewview) {
if(cat == null){
thrownewNullPointerException(«ΠšΠΎΡ‚ΠΈΠΊ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½»);
}
}

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±Ρ‹Π» объявлСн ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Cat, Π½ΠΎΠ½Π΅ ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² onCreate(). НаТатиС ΠΊΠ½ΠΎΠΏΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ систСмой, Π° Π² Π»ΠΎΠ³Π°Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ сообщСниС ΠΎΠ± ошибкС. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ thrownewUnsupportedOperationException(«ΠšΠΎΡ‚ΠΈΠΊ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½»).

Как Π±Ρ‹ Ρ‚Π°ΠΌ Π½ΠΈ Π±Ρ‹Π»ΠΎ, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ систСмС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибки. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

ΠŸΡ€ΠΈ этом ΠΏΠΎΡ‚ΠΎΠΊ выполнСния останавливаСтся послС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° throw ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ. Π˜Ρ‰Π΅Ρ‚ΡΡ блиТайший Π±Π»ΠΎΠΊ try/catch ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ Ρ‚ΠΈΠΏΠ°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ошибки:

publicvoidonClick(Viewview) {
if (cat == null) {
try {
thrownewNullPointerException(«ΠšΠΎΡ‚Π° Π½Π΅ сущСствуСт»);
} catch (NullPointerException e) {
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}

Π‘Ρ‹Π» создан Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса NullPointerException. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ классы ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ (ΠΊΡ€ΠΎΠΌΠ΅ стандартного конструктора) с пустыми скобками ΠΈΠΌΠ΅ΡŽΡ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ конструктор с строковым ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ. ВСкст ΠΈΠ· Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ getMessage(), Ρ‡Ρ‚ΠΎ собствСнно ΠΈ Π±Ρ‹Π»ΠΎ сдСлано Π² Π±Π»ΠΎΠΊΠ΅ catch.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚Π° Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ, Π° Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ сообщСниС Π² ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Toast.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ throws

Π’ Ρ‚ΠΎΠΌ случаС, Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄Π»ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π΄Π°Ρ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π΅Π³ΠΎ ΠΊΠΎΠ΄ смог Π±Ρ‹ ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎΠ± этом ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ. Для этой Ρ†Π΅Π»ΠΈ ΠΊ объявлСнию ΠΌΠ΅Ρ‚ΠΎΠ΄Π° добавляСтся конструкция throws, ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ (ΠΊΡ€ΠΎΠΌΠ΅ Error ΠΈ Runtime Exception, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ… подклассов).

ΠžΠ±Ρ‰Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° объявлСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° throws:

Ρ‚ΠΈΠΏ имя_ΠΌΠ΅Ρ‚ΠΎΠ΄Π°(список_ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²) throwsсписок_ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ {
// ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
}

Π’ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ список_ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ список ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄Π»ΠΈΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ. И Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ.

// ΠœΠ΅Ρ‚ΠΎΠ΄ Π±Π΅Π· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
publicvoidcreateCat(){
Toast.makeText(this, «Π’Ρ‹ создали ΠΊΠΎΡ‚Ρ‘Π½ΠΊΠ°», Toast.LENGTH_LONG).show();
thrownewNullPointerException(«ΠšΠΎΡ‚Π° Π½Π΅ сущСствуСт»);
}

// Π©Π΅Π»Ρ‡ΠΎΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΈ
publicvoidonClick(View v) {
createCat();
}

Если Π²Ρ‹ запуститС ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π˜ΡΠΏΡ€Π°Π²ΠΈΠΌ ΠΊΠΎΠ΄.

// Π‘Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
publicvoidcreateCat() throwsNullPointerException {
Toast.makeText(this, «Π’Ρ‹ создали ΠΊΠΎΡ‚Ρ‘Π½ΠΊΠ°», Toast.LENGTH_LONG).show();
thrownewNullPointerException(«ΠšΠΎΡ‚Π° Π½Π΅ сущСствуСт»);
}

// Π©Π΅Π»Ρ‡ΠΎΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΈ
publicvoidonClick(View v) {
try {
createCat();
} catch (NullPointerException e) {
// TODO: handleexception
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}

Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π² Π±Π»ΠΎΠΊ try. Π‘Π»ΠΎΠΊ catch с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ошибка Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ finally

ПослС ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° направляСтся ΠΏΠΎ Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡ€ΠΎΠ²ΠΎΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ», Π° ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·-Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°, Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ finally.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ finally создаёт Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ послС Π±Π»ΠΎΠΊΠ° try/catch, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈΠ΄ΡƒΡ‰ΠΈΠΌ Π·Π° Π½ΠΈΠΌ. Π‘Π»ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, нСвзирая Π½Π° Ρ‚ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ finally Π½Π΅ обязатСлСн, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ try Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ наличия Π»ΠΈΠ±ΠΎ finally, Π»ΠΈΠ±ΠΎ catch.

ВстроСнныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Java

Java ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… систСмных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, большая Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… являСтся подклассами Ρ‚ΠΈΠΏΠ° Runtime Exception. ΠŸΡ€ΠΈ этом ΠΈΡ… Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² список throws. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнныС нСповторяСмыС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

Illegal Monitor State ExceptionНСвСрная опСрация ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°
Index Out of Bounds ExceptionΠ’ΠΈΠΏ индСкса Π²Ρ‹ΡˆΠ΅Π» Π·Π° допустимыС ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹
Array Store ExceptionΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ элСмСнту массива ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° нСсовмСстимого Ρ‚ΠΈΠΏΠ°
Type Not Present ExceptionΠ’ΠΈΠΏ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½
Enum Constant Not Present ExceptionΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° использования Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ значСния пСрСчислСния
Number Format ExceptionНСвСрноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки Π² числовой Ρ„ΠΎΡ€ΠΌΠ°Ρ‚
Unsupported Operation ExceptionΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° нСподдСрТиваСмая опСрация
Arithmetic ExceptionАрифмСтичСская ошибка, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль
Illegal Thread State ExceptionΠ—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΠ°Ρ опСрация нСсовмСстима с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ
String Index Out Of BoundsΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° использования индСкса Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ строки
Class Cast ExceptionНСвСрноС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Security ExceptionΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ бСзопасности
Illegal Argument ExceptionНСвСрный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
Null Pointer ExceptionНСвСрноС использованиС пустой ссылки
Array Index Out Of Bounds ExceptionΠ’Ρ‹Ρ…ΠΎΠ΄ индСкса Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ массива
Unsupported Operation ExceptionΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° нСподдСрТиваСмая опСрация
Illegal State ExceptionНСкоррСктноС состояниС прилоТСния
Negative Array Size ExceptionΠ‘ΠΎΠ·Π΄Π°Π½ массив ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌΡ‹Π΅ систСмныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² список throws.

Interrupted ExceptionΠŸΠΎΡ‚ΠΎΠΊ ΠΏΡ€Π΅Ρ€Π²Π°Π½ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ
Class Not Found ExceptionКласс нС найдСн
No Such Field ExceptionΠ—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π½Π΅ сущСствуСт
Illegal Access ExceptionΠ—Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ доступ ΠΊ классу
Reflective Operation ExceptionΠ˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, связанноС с рСфлСксиСй
Instantiation ExceptionΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ абстрактного класса ΠΈΠ»ΠΈ интСрфСйса
CloneNotSupportedExceptionΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Cloneable
No Such Method ExceptionΠ—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ сущСствуСт

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ собствСнных классов ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

БистСма Π½Π΅ Π² состоянии ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях придСтся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свой Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ для собствСнного прилоТСния. Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Exception (Π΄Π°Π½Π½Ρ‹ΠΉ класс наслСдуСтся ΠΎΡ‚ Trowable) ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Throwable. Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠΆΠ΅ ΠΎΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΠΏΠΎ Π»ΠΎΠ³ΠΈΠΊΠ΅ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ.

Stringget Localized Message()Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ описаниС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
Final void add Suppressed (Throwable exception)ДобавляСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² список подавляСмых ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ (JDK 7)
Void print Stack Trace (Print Writer stream)ΠŸΠΎΡΡ‹Π»Π°Π΅Ρ‚ трассировку стСка Π² Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ
String get Message()Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ описаниС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
Throwable fill InStack Trace()Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Throwable, содСрТащий ΠΏΠΎΠ»Π½ΡƒΡŽ трассировку стСка
String to String()Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса String, содСрТащий описаниС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
Void print Stack Trace()ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ трассировку стСка
Throwable get Cause()Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π»Π΅ΠΆΠ°Ρ‰Π΅Π΅ ΠΏΠΎΠ΄ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ null
Void set Stack Trace (Stack Trace Elementelements[])УстанавливаСт трассировку стСка для элСмСнтов (для спСциализированных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ)
Final Throwable[] get Suppressed()ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (JDK 7)
Stack Trace Element[] get Stack Trace()Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив, содСрТащий трассировку стСка ΠΈ состояний ΠΈΠ· элСмСнтов класса StackTraceElement
Throwable init Cause(Throwable exception)АссоциируСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

НаиболСС простой способ — ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс с конструктором ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

// Если этот ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π΅Π³ΠΎ написал АлСксандр Климов,
// Π° Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ Π½Π΅ знаю, ΠΊΡ‚ΠΎ Π΅Π³ΠΎ писал.

packageru.alexanderklimov.exception;

importandroid.os.Bundle;
import android.support.v7.app.AppCompatActivity;
importandroid.view.View;

publicclassMainActivityextendsAppCompatActivity {

@Override
protectedvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

publicvoidtestMethod() throwsHungryCatException{
System.out.println(«Π’ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Π΅ΠΌ HungryCatException ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° testMethod()»);
thrownewHungryCatException(); // конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
}

publicvoidonClick(Viewview) {
try {
testMethod();
} catch (HungryCatException e) {
e.printStackTrace();
System.out.println(«ΠΠ°ΡˆΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½ΠΎ»);
}
}

classHungryCatExceptionextendsException{
}
}

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создан собствСнный класс Hungry Cat Exception, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ test Method(). По Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. НашС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сработаСт.

НСслоТно Π±ΡƒΠ΄Π΅Ρ‚ ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с конструктором, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚-строку.

// Если этот ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π΅Π³ΠΎ написал АлСксандр Климов,
// Π° Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ Π½Π΅ знаю, ΠΊΡ‚ΠΎ Π΅Π³ΠΎ писал.

packageru.alexanderklimov.exception;

importandroid.os.Bundle;
import android.support.v7.app.AppCompatActivity;
importandroid.view.View;

publicclassMainActivityextendsAppCompatActivity {

@Override
protectedvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

publicvoidtestMethod() throwsHungryCatException {
System.out.println(«Π’ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Π΅ΠΌ HungryCatException ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° testMethod()»);
thrownewHungryCatException(); // конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
}

publicvoid testMethod2() throwsHungryCatException {
System.out.println(«Π’ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Π΅ΠΌ HungryCatException ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° testMethod2()»);
thrownewHungryCatException(«Π‘ΠΎΠ·Π΄Π°Π½ΠΎ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅»);
}

publicvoidonClick(Viewview) {
try {
testMethod();
} catch (HungryCatException e) {
e.printStackTrace();
System.out.println(«ΠΠ°ΡˆΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½ΠΎ»);
}

try {
testMethod2();
} catch (HungryCatException e) {
e.printStackTrace();
}
}

classHungryCatExceptionextendsException {
HungryCatException() {
}

HungryCatException(Stringmsg) {
super(msg);
}
}
}

Π•Ρ‰Ρ‘ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ toString().

classCustomExceptionextendsException {
Stringmessage;

CustomException(Stringstr) {
message = str;
}

publicStringtoString() {
return («CustomExceptionOccurred: » + message);
}
}

// Π³Π΄Π΅-Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ
try {
thrownewCustomException(«Thisis a custommessage»);
} catch (CustomException e) {
System.out.println(e);
}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш класс содСрТит Π΄Π²Π° конструктора. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ примСняСтся конструктор Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ String, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом super.

ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ осущСствляСтся ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса всСх ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Exception:

cacth(Exception e) {
Log.w(«Log», «ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅»);
}

Данная конструкция Π½Π΅ упустит ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, поэтому Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ списка ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π° Π½Π΅ΠΉ.

ΠŸΡ€Π°Π²ΠΈΠ»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹:

  • Π˜ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π±ΡƒΠ΄ΠΈΠ²ΡˆΠΈΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.
  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ (Ссли Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ пСрСхватывания).
  • ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ всС дСйствия ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ выполнСния Π±Π΅Π· нСобходимости ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° дСйствий.
  • Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
  • ΠŸΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π½Π°ΠΉΡ‚ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вмСсто Ρ‚ΠΎΠ³ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄).
  • Π£ΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (Ссли схСма ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π΄Π΅Π»Π°Π΅Ρ‚ всС слоТнСС, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΎΠ½Π° Π½Π΅ эффСктивная).
  • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ бСзопасности.

Освоили Π»ΠΈ Π²Ρ‹ этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»? КакиС слоТности Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ? ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚ Π² коммСнтариях.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *