2016-04-18 6 views
0

例外をテストするために、次のサンプルクラスを作成しました。私は2つの同一のメソッドを持っています.1つはRuntimeExceptionをスローしますが、もう1つはExceptionをコンパイルしません。メソッドをスロー例外はコンパイルされていないが、RuntimeExceptionで問題はない

サンプルコード

public class Test{ 

    public static void main(String... args){ 
     System.out.println(3%-2); 
     System.out.println(4%-2); 

     Test t1 = new Test(); 
     t1.mtd1(101); 
     t1.mtd2(101); 

    } 

    public int mtd1(int i) throws RuntimeException{ 
     System.out.println("mtd"); 

     return i; 
    } 

    public int mtd2(int i) throws Exception{ 
     System.out.println("mtd"); 

     return i; 
    } 


} 

エラー

C:\Java\B-A>javac Test.java 
Test.java:10: error: unreported exception Exception; must be caught or declared to be thrown 
       t1.mtd2(101); 
        ^
1 error 
+0

throws句を使用してメソッド宣言で定義された例外が1つ以上ある場合、method-callは定義されたすべての例外を処理する必要があります。try-catchを使用して処理します。 – Mihir

答えて

1

2つのオプションがあります。 main()メソッド内で例外をキャッチするか、またはmain()でも例外をスローすることができます。

オプション1:

public static void main(String... args){ 
    System.out.println(3%-2); 
    System.out.println(4%-2); 

    Test t1 = new Test(); 
    try { 
     t1.mtd1(101); 
     t1.mtd2(101); 
    } 
    catch (Exception e) { 
     // do something 
    } 
} 

はオプション2:

public static void main(String... args) throws Exception { 
    System.out.println(3%-2); 
    System.out.println(4%-2); 

    Test t1 = new Test(); 
    t1.mtd1(101); 
    t1.mtd2(101); 
} 

ところで、この例外は未チェックであるから、あなたがRuntimeExceptionを引く見て少し奇妙です。通常、チェックされていない例外は、実行時に一般的に処理できないような方法で実行されるものを表します。

1

クラスRuntimeExceptionから派生したすべての例外は、未チェックの例外と呼ばれます。他のすべての例外はチェック例外です。チェックされた例外は、コード内のどこかで捕捉されなければなりません。そうでない場合、コードはコンパイルされません。

関連する問題