Итак, я недавно написал класс java, который расширяет исключение, и использовал экземпляр этого класса для проверки случаев и выдачи себя в случае возникновения ошибки.Я обнаружил, что когда вызывающий main перехватывает это исключение, строка, в которой говорится, что было сгенерировано исключение, является строкой, из которой было создано исключение, а не из того места, где оно было выброшено.Мне просто интересно, почему это так, и является ли это предполагаемым поведением для jvm или нет, так как это не распространенный способ создания исключений.Если это предполагаемое поведение, что является рациональным для этого, так как кажется, что номер строки, из которой было сгенерировано исключение, был бы более полезным (и, вероятно, легче отследить через стек).Далее приведены примеры случаев, демонстрирующие ожидаемое и непредвиденное поведение.
Нормальное исключение:
1 public class Test
2 {
3 public static void main(String ... args) throws Throwable
4 {
5 switch(5)
6 {
7 case 1: throw new Exception("Exception");
8 case 2: throw new Exception("Exception");
9 case 3: throw new Exception("Exception");
10 case 4: throw new Exception("Exception");
11 case 5: throw new Exception("Exception");
12 }
13 }
14 }
Вывод:
Exception in thread "main" java.lang.Exception: Exception
at Test.main(Test.java:11)
Мой подход (упрощенный):
1 public class Test
2 {
3 public static void main(String ... args) throws Throwable
4 {
5 Exception e = new Exception("Exception");
6 switch(5)
7 {
8 case 1: throw e;
9 case 2: throw e;
10 case 3: throw e;
11 case 4: throw e;
12 case 5: throw e;
13 }
14 }
15 }
вывод:
Exception in thread "main" java.lang.Exception: Exception
at Test.main(Test.java:5)