2012-07-26 27 views
7

En try - catch sintaxis, ¿importa en qué orden se escriben las declaraciones catch para FileNotFoundException y IOExceptipon?Orden de la declaración de captura?

+2

Una forma compila, el otro doesn 't. Te sugiero que lo intentes.;) –

+0

También vale la pena señalar que si desea manejar 'FileNotFoundException' y' IOException' de la misma manera, puede capturarlos en el mismo bloque (siempre que esté utilizando Java SE 7 y superior) utilizando 'catch (FileNotFoundException | IOException ex) '[Ver este enlace] (http://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html) – Deco

+0

@Deco' FileNotFoundException' ** es un ** 'IOException' . –

Respuesta

8

Sí. FileNotFoundException se hereda de IOException. Las subclases de excepciones deben atraparse primero.

10

Sí, a excepción específica se debe escribir primero, más amplio después de eso,

es como se llama a todos los animales por primera vez en la habitación y después de probar para ver si hay alguna humana fuera

Para ejemplo

try{ 
    //do something 
}catch(Exception ex){ 

}catch(NullPointerException npe){ 

} 

le dará el error de compilación tiempo

1

bien ... empezar desde subclase es a superclase ... esa es la manera ideal ... de lo contrario obtendrá código inalcanzable error

2

En una tangente, le aconsejaría pensar dos veces si necesita todos esos bloques de captura en primer lugar. ¿Estás seguro de que va a proporcionar un manejo significativo para cada caso de manera diferente? Si solo va a imprimir un mensaje, solo puede capturar IOException para hacerlo.

0

Sí, por supuesto. La excepción más específica se debe escribir en el primer bloque catch y las excepciones genéricas como catch(Exception ex){ex.printStackTrace();} se deben escribir en el conjunto final del bloque catch.

Si intenta hacer lo contrario, el compilador de JVM no podrá localizar su excepción específica.

0

IOException es la clase superior de FileNotFoundException. Por lo tanto, si coloca la declaración de captura para IOException anterior que para FileNotFoundException, entonces el código para la segunda captura será inalcanzable y el compilador arrojará un error para eso. La razón es simple: every object of a sub class can be easily accepted by a super class reference.

3

Deben detectarse excepciones específicas antes de una excepción general o de lo contrario recibirá un error de código inalcanzable. Por ejemplo -

try{ 
    //do something 
}catch(NullPointerException npe){ 

}catch(NumberFormatException nfe){ 

}catch(Exception exp){ 

} 

Si coloca el bloque Exception captura antes de que el bloque de NullPointerException o NumberFormatException captura, recibirá un error de tiempo de compilación. (Código inalcanzable).

0

IOException es la superclase de FileNotFoundException .So puño retén sub clase es decir FileNotFoundException y luego tienes que coger IOException

por ejemplo,

try{ 
     // something 
    } catch(FileNotFoundException fne){ 
     // Handle the exception here 
    } catch(IOException ioe) { 
     // Handle the IOException here 
    } 
Cuestiones relacionadas