In generale, esistono due modi per gestire le eccezioni in Java.Perché RuntimeException non richiede una gestione delle eccezioni esplicita?
- Add getta dichiarazione nella firma del metodo
- 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?
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 –
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