Habla de Java otra vez

Capturar excepciones
Si una excepción no se detecta en ninguna parte, el programa terminará e imprimirá la información de excepción en la consola. Esto incluye el tipo de excepción y el contenido de la pila. Para una interfaz gráfica, también desea imprimir los datos en la pila después de excepción se detecta, pero el programa volverá al ciclo de procesamiento de la interfaz de usuario (GUI al depurar un programa, lo mejor es asegurarse de que la ventana de la consola es visible y no minimizado)
con el fin de coger una necesidad excepción Establecer try/catchdeclaración

try =
{
	code
	more code
	more code
}
catch(ExceptionType e)
{
	handler for this type
}

Si se arroja una clase de excepción descrita en la cláusula catch en cualquier código en el bloque de declaración try, entonces
1. El programa omitirá el código restante en el bloque de declaración try
2. El programa ejecutará el código del procesador
en la cláusula catch si Si no se produce ningún error en la instrucción try, se omitirá el bloque de código catch. Si se lanza una excepción en el intento. No pensé en un bloque de código de captura adecuado, entonces el método saldrá directamente.
Hay dos formas de manejar excepciones.
Una es la declaración try / catch para atrapar la excepción a través de la declaración catch cuando
se lanza la excepción, y la otra es lanzar directamente la excepción y pasar la excepción al llamante.
Al elegir estos dos métodos, generalmente, se deben detectar aquellas excepciones que saben cómo manejar, y las que no saben cómo manejar se seguirán pasando. Si desea pasar una excepción, debe agregar un especificador de lanzamiento al comienzo del método . Si escribe un método que anula la superclase, y este método no produce una excepción, entonces este método debe detectar todas las excepciones marcadas en el código del método. No está permitido aparecer en el especificador de lanzamientos de la subclase más allá del alcance de la clase de excepción enumerada en el método de superclase.
Capturar múltiples excepciones
Capture múltiples tipos de excepciones en un bloque de declaración de prueba y realice diferentes tratamientos para diferentes tipos. Por ejemplo:

try
{
	code that might throw exception
}
catch(FileNotFoundException e)
{
	emergency action for missing files
}
catch(UnknowHostException e)
{
	emergency action for unknow hosts
}
catch(IOException e)
{
	emergency action forall other I/O problems
}

Un objeto de excepción puede contener información relacionada con la clase de excepción. Puede usarlo para e.getMessage()obtener
información de error detallada o usar e.getClass().getName()el tipo real del objeto de excepción.
En Java SE 7, la misma subdeclaración catch puede capturar múltiples tipos de excepción, por ejemplo:

try
{
	code that might throw exception
}
catch(FileNotFoundException |UnknowHostException e)
{
	emergency action for missing files andunknow hosts
}
catch(IOException e)
{
	emergency action forall other I/O problems
}

Al capturar una excepción, la variable de excepción es implícitamente una variable final.
Las excepciones y las cadenas de excepción
se vuelven a lanzar. Se puede lanzar una excepción en la cláusula catch. El propósito de esto es cambiar el tipo de excepción. Entonces, la clase de anomalía que representa una falla del subsistema puede producir múltiples explicaciones.

try
{
	access the	database
}
catch(SQLException e)
{
	throw new ServletException("database error"+e.getMessage);
}

Establezca la excepción original como la "causa" de la nueva excepción

try
{
	access the database
}
catch(SQLException e)
{
	Throwble se = new ServletException("database error");
	se.initCause;
	throw se;
}

Cuando se
detecta una excepción, puede usar la siguiente instrucción para recuperar la excepción original: Throwble e = se.getCause; se
recomienda encarecidamente utilizar esta técnica de empaquetado. Esto permite a los usuarios lanzar excepciones de alto nivel en el subsistema sin perder los detalles de la excepción original.
El compilador observará la instrucción throw en el bloque catch, y luego observará el tipo de e, y señalará que este método puede lanzar cualquier excepción en lugar de SQLException. Este problema ahora se ha mejorado. El compilador rastreará que e proviene del bloque try.
Finalmente cláusula:
cuando el código arroja una excepción, terminará el procesamiento del código restante en el método y saldrá de la ejecución de este método. Pero si desea liberar los recursos locales del método, hay un esquema que es más tedioso, captura y relanza todas las excepciones, pero necesita borrar los recursos en dos lugares: uno está en el código normal y el otro está en el código de excepción.
Hay una mejor solución en Java, usar finalmente, se produzca o no una excepción, finalmente se ejecutará.
Ejemplo:

InputStream in = new FileInputStream(...);
try
{
	//1
	code that might throw exception
	//2
}
catch (IOException e)
{
	//3
	show error message
	//4
}
finally
{
	//5
	in.close
}
//6

En el código anterior, los siguientes tres casos se ejecutarán finalmente.
1. El código no arroja una excepción: el programa primero ejecuta todo el código en try, luego ejecuta el código en la cláusula finalmente y luego ejecuta la primera instrucción después de try, ejecuta 1, 2, 5 y 6.
2. Si la instrucción try arroja una excepción, entonces la ejecución del código bajo try terminará, y luego se ejecutará el catch, y finalmente finalmente. Si el catch no arroja una excepción, entonces se ejecutará la primera instrucción después del try.
1, 2, 4, 5, 6.
3. El código arroja una excepción, pero la captura no captura la excepción, se ejecutará finalmente, y no ejecutará la primera instrucción de la
instrucción try , 1, 5. La instrucción try solo puede ser finalmente, y la
instrucción return regresará sin captura finalmente, Pero supongamos que también hay un retorno en la instrucción try, y finalmente también se ejecutará, de modo que el valor devuelto por return in finalmente sobrescribirá el valor en try.
A veces, la cláusula finally también causará problemas, y el método de limpieza de recursos puede arrojar una excepción.

InputStream in=...;
try
{
	code that might throw exceptions
}
finally
{
	in.close();
}

Se puede lanzar una excepción en try, pero el mismo tipo de excepción en try también se puede lanzar finalmente para sobrescribir la excepción anterior. Puedes usar los siguientes métodos

InputStream in=...;
Exception ex=null;
try
{
	try{
		code that might throw exceptions
		}
	catch(Exception e)
	{
		ex=e;
		throw e;
	}
}
finally
{
	try
	{
		in.close();
	}
	catch(Exception e)
	{
		if(ex==null)throw e;
	}
}

La forma más simple de una declaración de prueba con recursos es

try(Resource res=...)
{
	work with res
}

javaSE 7 proporciona este código con un void close() throws Exceptionbloque de instrucción try que llama automáticamente a res.close () cuando sale.
Puede llamar al método getSuppressed para obtener la excepción lanzada por el método close.
La instrucción try con recursos también puede tener una cláusula catch y una cláusula finalmente, estas cláusulas se ejecutarán después de cerrar el recurso.
Analice el seguimiento de la pila El seguimiento de la
pila es una lista de procedimientos de invocación de métodos. Contiene la ubicación específica de la invocación del método durante la ejecución del programa. Puede llamar al método printstackTrace de la clase Throwable para acceder a la información de descripción de texto del seguimiento de la pila.

Publicado 74 artículos originales · ganó 15 · vistas 4094

Supongo que te gusta

Origin blog.csdn.net/V2636011127/article/details/105309501
Recomendado
Clasificación