Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ - 1

β€” Π₯ΠΎΡ‡Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚Π΅Π±Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

Код с использованиСм ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ
class ExceptionExampleOriginal
{


    public static void main(String[] args)
    {
        System.out.println("main begin");
        try
        {
            System.out.println("main before call");

            method1();



            System.out.println("main after call");
        }
        catch (RuntimeException e)
        {


            String s = e.getMessage();
            System.out.println(s);
        }
        System.out.println("main end");
    }

    public static void method1()
    {
        System.out.println("method1 begin");
        method2();

        System.out.println("method1 end");
    }

    public static void method2()
    {
      System.out.println("method2");
      String s = "Message: Unknown Exception";
      throw new RuntimeException(s);

    }
}
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½Π°Ρ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ°
public class ExceptionExample
{
    private static Exception exception = null;

   public static void main(String[] args)
    {
        System.out.println("main begin");


        System.out.println("main before call");

        method1();

        if (exception == null)
        {
            System.out.println("main after call");
        }
        else if (exception instanceof RuntimeException)
        {
            RuntimeException e = (RuntimeException) exception;
            exception = null;
            String s = e.getMessage();
            System.out.println(s);
        }
        System.out.println("main end");
    }

    public static void method1()
    {
        System.out.println("method1 begin");
        method2();
        if (exception != null) return;
        System.out.println("method1 end");
    }

    public static void method2()
    {
        System.out.println("method2");
        String s = "Message: Unknown Exception";
        exception = new RuntimeException(s);
        return;
    }
}

β€” НичСго Π½Π΅ понятно.

β€” Ок. Π”Π°Π²Π°ΠΉ я Ρ‚Π΅Π±Π΅ объясню, Ρ‡Ρ‚ΠΎ происходит.

β€” Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ слСва ΠΌΡ‹ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π’ method2 ΠΌΡ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ создаСм ΠΈ Π²Ρ‹ΠΊΠΈΠ΄Ρ‹Π²Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ).

β€” Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ справа ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΡ€ΠΈ этом происходит.

β€” ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈ Π½Π° method2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ Π²ΠΎΡ‚ Π²ΠΎ Ρ‡Ρ‚ΠΎ: создали ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° RuntimeException, сохранили Π΅Π³ΠΎ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ exception ΠΈ Ρ‚ΡƒΡ‚ ΠΆΠ΅ Π²Ρ‹ΡˆΠ»ΠΈ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° – return.

β€” Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ method1, послС Π²Ρ‹Π·ΠΎΠ²Π° method2 стоит ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° – Π΅ΡΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Ссли ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΅ΡΡ‚ΡŒ, Ρ‚ΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ method1 Ρ‚ΡƒΡ‚ ΠΆΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ. Вакая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° нСявно производится послС Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ(!) ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Java.

β€” Ого!

β€” Π’ΠΎΡ‚ Ρ‚Π΅Π±Π΅ ΠΈ ΠΎΠ³ΠΎ.

β€” Π’ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ справа Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ main я написал, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ происходит ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструкции try-catch. Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ Π±Ρ‹Π»ΠΎ, Ρ‚ΠΎ всС ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ. Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ, ΠΈ ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² catch, Ρ‚ΠΎΠ³Π΄Π° ΠΌΡ‹ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ.

β€” А Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ throw ΠΈ instanceof?

– ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈ Π½Π° послСднюю строку throw new RuntimeException(s). Π’Π°ΠΊΠΈΠΌ способом ΠΌΡ‹ создаСм ΠΈ ΠΊΠΈΠ΄Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Пока ΠΌΡ‹ Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. Π­Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

β€” А с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Β«Π° instanceof BΒ» ΠΌΡ‹ провСряСм, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ a Ρ‚ΠΈΠΏ B. Π’.Π΅. ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хранится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ exception, Ρ‚ΠΈΠΏ RuntimeException. Π­Ρ‚ΠΎ логичСскоС условиС.

β€” Ну, Π²Ρ€ΠΎΠ΄Π΅ понятно. НСмного.