2017-09-21 40 views
1

throwsキーワードを使用してカスタム例外をスローすると、明示的に処理する必要があります。 e。 try-catchブロック内のメソッドを呼び出す必要がありますが、try-catchブロックを使用してメインメソッド内で処理しないと、throwsキーワードを使用して組み込み例外をスローしていますが、コンパイル時エラーは発生しません実行時例外が発生してもかまいません。私の質問は、カスタム例外を処理しないときに、コンパイル時にエラーが発生することです。未処理の例外です。これは組み込みの例外カスタム例外処理

class B 
{ 
    public void show() throws ArithmeticException 
    { 
     throw new ArithmeticException(); 
    } 
} 

public class Myclass { 

    public static void main(String[] args) { 
    B b = new B(); 
    b.show(); 
} 
} 

の場合ではありませんが、私は算術例外を処理せずに上記のコードをコンパイルするときに、私は任意のコンパイル時にエラーに

class A extends Exception 
{ 
    public A() 
    { 
     System.out.println("Exception thrown"); 
    } 
} 

class B extends A 
{ 
    public void show() throws A 
    { 
     throw new A(); 
    } 
} 

public class Myclass { 

    public static void main(String[] args) { 
     B b = new B(); 
     b.show(); 
    } 
} 

が、私は、コンパイルを得ることはありません上記のコードは、コンパイル時にエラーが発生したことを示しています。タイプAの例外を処理していないと言っています。だから、私の質問は、カスタム例外を処理することが必須であるのに対し、組み込み例外を処理できない理由です。

+0

達成しようとしていることをよりよく理解するためのサンプルコードを追加してください。 – sebadagostino

+0

クラスExceptionを拡張して作成した例外は、チェックされた例外であり、メソッド宣言にスローするか、try-catchを使ってそれを処理するかを宣言する必要があります。算術例外は、ハンドルまたは宣言ルールが必須ではない実行時例外の一種です。 –

+0

クラスruntimexceptionを拡張して例外を作成すると、コードがコンパイルされます。 –

答えて

1

私の質問は、組み込みの例外を処理しないように許可されている理由ですが、カスタム例外を処理することは必須です。

これはありません。本当にあなたの "カスタム例外"に依存します。これがチェックされていないと、コンパイル時にチェックする方法がありません。 ArithmeticException。どうして?なぜなら、除算がゼロで例外をスローすると、実際には演算を実行しなければならないからです。これは実行時にのみ発生します。したがって、チェックされていない例外は常にRuntimeExceptionに拡張されます。

したがって、チェックされた例外は、とコンパイル時ににチェックされた例外です。したがって、コンパイル時に(明示的に)処理されます。