2013-02-21 2 views
6

In generale, esistono due modi per gestire le eccezioni in Java.Perché RuntimeException non richiede una gestione delle eccezioni esplicita?

  1. Add getta dichiarazione nella firma del metodo
  2. Surround con blocco try/catch.

Tuttavia, ho notato che alcune eccezioni, in particolare quelle che ereditano da RuntimeException, non richiedono tale esplicita gestione delle eccezioni.

Ad esempio, ho creato un metodo di esempio come indicato di seguito e contrassegnato come "Non richiesto" per quelli che non richiedono la gestione di eccezioni esplicite.

public void textException(){ 
    int i = (new Random()).nextInt(100); 

    switch (i){ 
    case 1: 
     throw new NullPointerException(); //Not required 
    case 2: 
     throw new NumberFormatException(); //Not required 
    case 3: 
     throw new RuntimeException();  //Not required 
    case 4:   
     throw new ClassNotFoundException(); //Required 
    case 5: 
     throw new IOException();   //Required 
    case 6: 
     throw new Exception();    //Required 
    default: 
     return; 
    } 
} 

ho notato che RuntimeException eredita da Exception.

Perché è necessario che RuntimeException non debba essere catturato in modo esplicito per essere compilato mentre altri Exceptions fanno?

+3

Queste sono chiamate eccezioni controllate e deselezionate in Java. E questi sono stati discussi molte volte in SO: http://stackoverflow.com/questions/6115896/java-checked-vs-unchecked-exception-explanation –

+0

Un metodo non è richiesto per dichiarare nella sua clausola di throws qualsiasi sottoclasse di RuntimeException che potrebbe essere lanciato durante l'esecuzione del metodo ma non catturato. – sudmong

risposta

1

Per Java, RuntimeException è considerato un'eccezione di sistema, in genere non è recuperabile, pertanto non è necessario aggiungere la dichiarazione di derivazione sul metodo o utilizzare il blocco catch try per gestirlo. Tuttavia, l'eccezione è considerata un'eccezione dell'applicazione, è recuperabile.