2016-05-31 5 views
2

Ich habe eine Methode von übergeordnet überschrieben und eine throws Deklaration für diese Methode hinzugefügt. Es gab mir einen Fehler, als ich throws Exception und throws FileNotFoundExceprion hinzufügte aber mit throws NullPointerException arbeitete. Was ist der Grund?Warum NPE funktioniert, aber nicht Exception und 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

Da NullPointerException RuntimeException erweitert und die Überschreibung nicht verletzt wird – Silvinus

+0

Sie können keine überprüfte Ausnahme auslösen, wenn Sie eine Methode überschreiben, die nicht deklariert, dass sie ausgelöst wird. – khelwood

+0

Nicht sicher, warum Sie downvoted werden. Für jemanden, der die Feinheiten über geprüfte und ungeprüfte Ausnahmen in Java nicht kennt, kann dies sehr verwirrend sein. Und ich weiß nicht, dass ich in diesem Fall herausfinden würde, wonach ich googeln soll. – sstan

Antwort

0

Konzeptionell in Java gibt es zwei Arten von Ausnahmen:

  • geprüfte Ausnahmen
  • ungeprüfte Ausnahmen

Diese werden verwendet, um verschiedene Dinge anzuzeigen. Eine geprüfte Ausnahme ist eine spezielle Bedingung, die passieren kann und Sie müssen damit umgehen. A FileNotFoundException zum Beispiel ist eine Situation, die auftreten kann (zum Beispiel versuchen Sie, eine Datei zu laden, die noch nicht existiert).

In dieser Situation sind diese überprüft, weil Ihr Programm damit umgehen soll.

Auf der gegenüberliegenden Seite ist eine ungeprüfte Ausnahme eine Situation, die normalerweise nicht während der Ausführung eines Programms auftreten sollte. Ein NullPointerException bedeutet, dass Sie versuchen, auf ein null Objekt zuzugreifen, was nie passieren sollte. Diese Ausnahmen sind wahrscheinlicher Fehler in Software, die überall auftreten können, Sie sind nicht gezwungen zu erklären, was sie wirft und die Handhabung ist optional, je nach den Anforderungen.

Indem Sie Ihrer Fahrrad-Analogie folgen, ist es wie ein FlatTireException auf Ihrer Bike Klasse. Es könnte eine geprüfte Ausnahme sein, weil es eine Situation ist, die auftreten kann und die behandelt werden sollte, während eine WheelMissingException etwas ist, was nicht passieren sollte.

1

NullPointerException ist eine so genannte ungeprüft Ausnahme (weil es RuntimeException erstreckt), was bedeutet, dass Sie es überall, ohne explizit Kennzeichnung, dass die Methode „wirft“ es werfen kann. Im Gegensatz dazu sind die anderen Ausnahmen, die Sie gepostet haben, geprüfte Ausnahmen, was bedeutet, dass die Methode als "Werfen" der Ausnahme deklariert werden muss oder der problematische Code in einem try-catch-Block aufgerufen werden muss. Zum Beispiel:

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(); 
} 
} 

... oder:

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

You can find out more about Java exceptions here.

Verwandte Themen