2016-05-31 7 views
2

親からメソッドをオーバーライドし、そのメソッドにthrows宣言を追加しました。 throws Exceptionthrows FileNotFoundExceprionを追加したが、throws NullPointerExceptionで作業したときにエラーが発生しました。理由は何ですか? (それはRuntimeExceptionを拡張するため)NPEが動作するが、例外とFileNotFoundExceptionがない理由

class Vehicle { 
    public void disp() { 
    System.out.println("in Parent"); 
    } 
} 

public class Bike extends Vehicle { 
    public void disp()throws NullPointerException { 
    System.out.println("in Child"); 
    } 

    public static void main(String[] args) { 
    Vehicle v = new Bike(); 
    v.disp(); 
    } 
} 
+6

NullPointerExceptionがRuntimeExceptionを継承しているため、オーバーライドが中断されない – Silvinus

+0

スローすると宣言していないメソッドをオーバーライドするときに、チェック例外をスローすることはできません。 – khelwood

+0

なぜあなたがdownvotedされているか分かりません。 Javaでチェックされている例外とチェックされていない例外に関する細部を知らない人にとって、これは非常に混乱することがあります。そして、私はこの場合、何のためにgoogleを使うのか分かりません。 – sstan

答えて

0

は、例外の2つのタイプがあります

  • チェック例外は
  • 未チェックの例外

これは、さまざまなことを示すために使用されます。チェックされた例外は、発生する可能性のある特殊な状態であり、これを強制的に処理する必要があります。 A FileNotFoundExceptionは、たとえば、まだ存在しないファイルをロードしようとしているなどの場合があります。

この場合、にチェックされています。これはプログラムがそれらを処理するためです。

反対側のチェックされていない例外は、通常、プログラムの実行中に発生してはならない状況です。NullPointerExceptionは、nullオブジェクトにアクセスしようとしていることを意味します。だから、これらの例外はどこでも発生する可能性のあるソフトウェアのバグであり、それらを投げ捨てることを宣言する必要はなく、要件に従って処理することはオプションです。

あなたのバイクの類推に従えば、BikeクラスにFlatTireExceptionのような感じです。 WheelMissingExceptionは発生してはならないものの、発生する可能性があり処理する必要がある状況であるため、チェック例外になる可能性があります。

1

NullPointerExceptionは、明示的方法は、それを「投げる」ことをマーキングすることなく、どこでもそれを投げることができることを意味している、いわゆる未確認例外です。逆に、あなたが投稿した他の例外はチェック例外です。つまり、メソッドが例外を「スローする」と宣言されなければならないか、問題のあるコードがtry-catchブロックで呼び出されなければなりません。

class Vehicle{ 
public void disp() throws Exception { 
    System.out.println("in Parent"); 
} 
} 
public class Bike extends Vehicle { 
public void disp() throws Exception { 
    System.out.println("in Child"); 
} 
public static void main(String[] args) throws Exception { 
    Vehicle v = new Bike(); 
    v.disp(); 
} 
} 

...か:たとえば

class Vehicle{ 
public void disp() throws Exception { 
    System.out.println("in Parent"); 
} 
} 
public class Bike extends Vehicle{ 
public void disp() throws Exception { 
    System.out.println("in Child"); 
} 
public static void main(String[] args) { 
    Vehicle v = new Bike(); 
    try { 
     v.disp(); 
    } catch(Exception exception) { 
     // Do something with exception. 
    } 
} 
} 
Javaで概念的に

You can find out more about Java exceptions here.

関連する問題