Получите имя метода и содержащиеся в нем параметры, проанализировав исключение - PullRequest
2 голосов
/ 31 декабря 2010

Когда я получил исключение, такое как IOException или RunTimeException, я могу знать только номер строки в классе.

Первый вопрос.Можно ли получить имя метода через исключение?Во-вторых, возможно ли извлечь метод и параметр этого метода по номеру строки?

ps Мне нужно знать точное имя метода и его параметры, потому что я хочу различать методы перегрузки.Чтобы различать методы перегрузки, все, что я знаю, это определить его параметры.

Ответы [ 2 ]

6 голосов
/ 31 декабря 2010
try{
//your code here}
catch(Exception e){
  for (StackTraceElement st : e.getStackTrace())
  {
    System.out.println("Class: " + st.getClassName() + " Method : " 
                      +  st.getMethodName() + " line : " + st.getLineNumber());  
   }
}

Как вы можете видеть в приведенном выше коде, вы можете получить stackTrace и перебрать его, чтобы получить все имена методов и номера строк, обратитесь к этому для получения дополнительной информации http://download.oracle.com/javase/1.4.2/docs/api/java/lang/StackTraceElement.html

0 голосов
/ 31 декабря 2010

Если вы посмотрите на трассировку стека, вы можете узнать, в какой строке произошла ошибка.

При использовании переопределенного метода вы получаете точное имя класса, исходный файл и номер строки, вам просто нужно знать, как его прочитать.

С этой страницы:

 java.lang.NullPointerException
         at MyClass.mash(MyClass.java:9)  //<--- HERE!!!!
         at MyClass.crunch(MyClass.java:6)
         at MyClass.main(MyClass.java:3)

Это говорит о том, что проблема возникла в line 9 файла MyClass.java в методе mash, который в свою очередь был вызван методом crunch при l ine 6 того жефайл, который был вызван main в line 3 того же файла.

Вот исходный код:

 class MyClass {
     public static void main(String[] args) {
         crunch(null); // line 3
     }
     static void crunch(int[] a) {
         mash(a); // line 6 
     }
     static void mash(int[] b) {
         System.out.println(b[0]);//line 9, method mash.
     }
 }

По сути, вам просто нужно ... хорошо прочитать его!

Сложные трассировки в первый раз немного сложны для понимания, но позже они становятся очень мощным инструментом.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...