2010-12-31 15 views
2

IOExceptionまたはRunTimeExceptionのような例外が発生した場合、クラス内の行番号しか知ることができません。例外名を解析してメソッド名とそのパラメータを取得します

まずは質問してください。例外を通してメソッド名を取得することは可能ですか? 第2に、このメソッドのメソッドとパラメータを行番号で取得できますか?

P.S.オーバーロードの方法を区別したいので、正確なメソッド名とそのパラメータを知る必要があります。オーバーロードの方法を区別するために、私が知っているのは、そのパラメータを決定することだけです。

+0

行番号によって呼び出されたオーバーロードされたメソッドを区別できます。同じ行に複数のメソッドが宣言されている場合を除いて(私はあなたにそれを提案していません) –

+0

または、デバッグ情報なしでソースコードがコンパイルされています: -/ – OscarRyz

+0

Peter:はい、私は行番号で区別できます。しかし私は、手で見たり、トレースしたりする代わりに、この情報を取得する方法を知りたいと思っています。 –

答えて

6
try{ 
//your code here} 
catch(Exception e){ 
    for (StackTraceElement st : e.getStackTrace()) 
    { 
    System.out.println("Class: " + st.getClassName() + " Method : " 
         + st.getMethodName() + " line : " + st.getLineNumber()); 
    } 
} 

あなたは上記のコードで見ることができるよう、あなたが見れば詳細http://download.oracle.com/javase/1.4.2/docs/api/java/lang/StackTraceElement.html

+0

あなたが提供したコードをありがとう。私の質問は、メソッドとそのパラメータを取得することです。私は両方のメソッドが必要です。メソッドがオーバーロードすると、そのパラメータによって正確なものを判断する必要があるからです。 –

+0

行番号からそのことを知ることができませんか? –

+0

にAmjad Masad: どのように行番号でオーバーロードの方法を区別しますか? –

0

のためにこれを参照、すべてのメソッド名と行番号を取得するために、その上にスタックトレースやループを得ることができますスタックトレースはエラーが発生した行を知ることができます。

あなたは、正確なクラス名、ソースファイルと行番号を取得するオーバーライドメソッドを使用するときは、ちょうどそのページからknow how to read it.

に持っている:

これは言う
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が呼び出され、同じファイルのによって呼び出された同じファイルののl ine 6で呼び出されました。が同じファイルのline 3にあります。

HERESにソースコード:

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. 
    } 
} 

は、基本的にはあなただけ...それをよく読んでする必要があります!

Stacktracesは最初は理解しにくいですが、後で非常に強力なツールになります。

こちらがお役に立てば幸いです。

+0

ありがとう、OscarRyz。 私の懸念事項は、オーバーライドされたメソッドではなく、オーバーロードのメソッドです。 例: public void methodA(int a); public void methodA(bool a); –

+0

もちろん、与えられた情報でソースコードを読むことができます。私が本当にしたいのは、コードを使ってメソッドを取得するメソッドを自動的に取得することです。あなたはこれをする考えがありますか?ありがとう。 –

+0

オーバーロードされたメソッドでも同じように動作するはずです。スタックトレースからメソッド引数を取得することはできません。あなたができることは、実行可能ではないと思う例外を投げる前にその情報を提供することです。とにかくその情報で何をするつもりですか?私は好奇心が強いです – OscarRyz

関連する問題