1 голос
 
936 просмотров
10.07.2017 / 18:28  Aladdin

Как работает try/catch?

В своем яп решил реализовать обработку исключений try/catch, как это работает на уровне java assembler'a, и как можно реализовать?
Ответы
 
2 голоса
 
# 12.07.2017 / 13:24  aNNiMON
На уровне байткода у метода, в котором встречается try/catch, создаётся специальная таблица "Exception table".
В ней указываются с какого по какой оффсет инструкций идёт блок try, какой тип исключения ожидать и на какой оффсет в случае пришедшего исключения затем передавать управление.

  1. $ cat Main.java
  2. public class Main {
  3.     public void method1() {
  4.         try {
  5.             System.out.println("try");
  6.         } catch (Exception ex) {
  7.             System.out.println("catch");
  8.         }
  9.     }
  10. }
  11.  
  12. $ javap -c Main
  13. Compiled from "Main.java"
  14. public class Main {
  15.   public Main();
  16.     Code:
  17.        0: aload_0
  18.        1: invokespecial #1                  // Method java/lang/Object."<init>":()V
  19.        4: return
  20.  
  21.   public void method1();
  22.     Code:
  23.        0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
  24.        3: ldc           #3                  // String try
  25.        5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
  26.        8: goto          20
  27.       11: astore_1
  28.       12: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
  29.       15: ldc           #6                  // String catch
  30.       17: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
  31.       20: return
  32.     Exception table:
  33.        from    to  target type
  34.            0     8    11   Class java/lang/Exception
  35. }

Как видно, с 0 по 8 идёт тело блока try, с 11 начинается блок catch.
try/catch/catch/finally
Изм. aNNiMON от 12.07.2017 / 13:24
 
-1 голос
 
# 12.07.2017 / 01:34  Slastyon_Artyom
Могу дать исходники - может что-то узнаешь(нет временни возиться)
даю прямую ссылку на файл с Java исходниками
Ссылка
12.07.2017 / 09:30  Koenig
20 метров))))
Всего: 2

Реклама

Мы в соцсетях

tw tg yt gt