Fale sobre Java novamente

Capturar exceções
Se uma exceção não for capturada em nenhum lugar, o programa será encerrado e imprimirá as informações de exceção no console. Isso inclui o tipo de exceção e o conteúdo da pilha. Para uma interface gráfica, também impressas informações na pilha após exceção é detectada, mas o programa irá retornar o ciclo de processamento da interface do usuário (GUI ao depurar um programa, é melhor para garantir que a janela do console é visível e não minimizado)
, a fim de pegar um must exceção set try/catchdeclaração

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

Se uma classe de exceção descrita na cláusula catch for lançada em qualquer código no bloco da instrução try, então
1. O programa ignorará o código restante no bloco da instrução try
2. O programa executará o código do processador
na cláusula catch se Se nenhum erro for lançado na instrução try, o bloco do código de captura será ignorado. Se uma exceção for lançada na tentativa. Como não pensou em um bloco de código de captura adequado, o método sairá diretamente.
Existem duas maneiras de lidar com exceções.
Uma é a instrução try / catch para capturar a exceção através da instrução catch quando a exceção
é lançada, e a outra é lançar a exceção diretamente e passar a exceção ao chamador.
Ao escolher esses dois métodos, geralmente, as exceções que sabem como manipular devem ser capturadas e as que não sabem como manipular continuarão a ser transmitidas.Se você deseja passar uma exceção, deve adicionar um especificador de arremessos no início do método . Se você escrever um método que substitua a superclasse, e esse método não lançar uma exceção, esse método deverá capturar todas as exceções verificadas no código do método. Não é permitido que apareça no especificador de arremessos da subclasse além do escopo da classe de exceção listada no método da superclasse
Captura de várias exceções
Capture vários tipos de exceção em um bloco de instrução try e faça tratamentos diferentes para tipos diferentes. Por exemplo:

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
}

Um objeto de exceção pode conter informações relacionadas à classe de exceção.Você pode usá-lo para e.getMessage()obter informações detalhadas
sobre erros ou usar e.getClass().getName()o tipo real do objeto de exceção.No
Java SE 7, a mesma sub-instrução catch pode capturar vários tipos de exceção, por exemplo:

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
}

Ao capturar uma exceção, a variável de exceção é implicitamente uma variável final. A
cadeia de exceção e exceção
é lançada novamente. Uma exceção pode ser lançada na cláusula catch. O objetivo disso é alterar o tipo de exceção. , A classe de anomalia que representa uma falha do subsistema pode produzir várias explicações.

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

Defina a exceção original como a "causa" da nova exceção

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

Quando uma exceção é capturada, você pode usar a seguinte instrução para
recuperar a exceção original: Throwble e = se.getCause; É
altamente recomendável usar essa técnica de empacotamento. Isso permite que os usuários lançem exceções de alto nível no subsistema sem perder os detalhes da exceção original.
O compilador examinará a instrução throw no bloco catch e, em seguida, examinará o tipo de e, e indicará que esse método pode gerar qualquer exceção em vez de SQLException. Este problema foi agora melhorado. O compilador rastreará que e vem do bloco try.
Cláusula Finalmente:
Quando o código lança uma exceção, ele encerra o processamento do código restante no método e sai da execução desse método. Mas se você deseja liberar os recursos locais do método, existe um esquema mais tedioso, capturando e repetindo todas as exceções, mas é necessário limpar os recursos em dois locais: um está no código normal e o outro no código de exceção.
Existe uma solução melhor em Java, usando finalmente, independentemente de uma exceção ocorrer ou não, finalmente será executado.
Exemplo:

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

No código acima, os três casos a seguir serão executados finalmente.
1. O código não gera uma exceção.O programa primeiro executa todo o código na tentativa, depois executa o código na cláusula finally e, em seguida, executa a primeira instrução após a tentativa, executa 1, 2, 5 e 6.
2. Se a instrução try lançar uma exceção, a execução do código em try será encerrada e, em seguida, a captura será executada e, finalmente, se a captura não lançar uma exceção, a primeira instrução após a tentativa será executada.
1, 2, 4, 5, 6.
3. O código lança uma exceção, mas a captura não captura a exceção, ele será executado finalmente e não executará a primeira instrução da
instrução try , 1, 5. A instrução try pode ser apenas finalmente e a
instrução return retornará sem a captura finalmente, Mas suponha que também exista um retorno na instrução try e, por fim, também seja executado, para que o valor retornado por return in finalmente substitua o valor em try.
Às vezes a cláusula finally também causará problemas e o método de limpeza de recursos poderá gerar uma exceção.

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

Uma exceção pode ser lançada na tentativa, mas o mesmo tipo de exceção na tentativa também pode ser lançada finalmente para substituir a exceção anterior. Você pode usar os seguintes 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;
	}
}

A forma mais simples de uma instrução try com recursos é

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

O javaSE 7 fornece esse código com um void close() throws Exceptionbloco de instrução try que chama automaticamente res.close () quando ele sai.
Você pode chamar o método getSuppressed para obter a exceção lançada pelo método close.
A instrução try com recursos também pode ter uma cláusula catch e finalmente uma cláusula, essas cláusulas serão executadas após o fechamento do recurso.
Analisar o rastreamento de pilha O rastreamento de
pilha é uma lista de procedimentos de chamada de método.Ele contém o local específico da chamada de método durante a execução do programa.Você pode chamar o método printstackTrace da classe Throwable para acessar as informações de descrição de texto do rastreamento de pilha.

Publicado 74 artigos originais · ganhou 15 · visualizações 4094

Acho que você gosta

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