1. O que é uma exceção?
Primeiro, vamos dar uma olhada no exemplo da figura abaixo:
Neste exemplo, o código de erro existe dividindo -se por 0. Exceção devido à divisão por 0: arithmeticexception
Helloexception.java
pacote com.yiibai.tutorial.exception; public class helloexception {public static void main (string [] args) {system.out.println ("três"); // Esta divisão sem problemas. int valor = 10/2; System.out.println ("dois"); // Esta divisão sem problemas. valor = 10 /1; System.out.println ("One"); // Esta divisão tem um problema, dividido por 0. // Ocorreu um erro aqui. valor = 10/0; // e o código a seguir não será executado. System.out.println ("Vamos lá!"); }}Executar este exemplo resultará:
Você pode ver notificações na tela do console. As notificações de erro são muito claras, incluindo informações sobre linhas de código.
Vamos dar uma olhada no seguinte programa através do processo na figura abaixo:
Modificaremos o código da modalidade acima mencionada.
HellocatchException.java
pacote com.yiibai.tutorial.exception; public class HellocatchException {public static void main (string [] args) {System.out.println ("três"); // Esta divisão sem problemas. int valor = 10/2; System.out.println ("dois"); // Esta divisão sem problemas. valor = 10 /1; System.out.println ("One"); tente {// Esta divisão tem problemas, dividida por 0. // Um erro ocorreu aqui. valor = 10/0; // e o código a seguir não será executado. System.out.println ("value =" + valor); } catch (arithmeticexception e) {// O código no bloco de captura será executado system.out.println ("erro:" + e.getMessage ()); // O código no bloco de captura será executado System.out.println ("Ignore ..."); } // Este código é executado System.out.println ("Vamos lá!"); }}Executando os resultados da amostra:
Três
Dois
Um
Erro: / por zero
Ignorar...
Vamos!
Explicaremos o seguinte procedimento da seguinte maneira o fluxo da imagem de exemplo.
2. Hierarquia de exceção <r /> Este é um modelo do gráfico hierárquico das exceções Java.
A classe mais alta é: jogável
As duas subclasses diretas são erros e exceção.
Há uma subclasse de RuntimeTexception na transferência de exceção, incluindo exceções de tempo de compilação não verificadas no Java. Verifique e cancele a verificação no horário de compilação, conforme descrito na próxima seção do exemplo de implementação.
NOTA: Sua classe deve herdar de duas ramificações: erro ou exceção, não diretamente do lançável.
A máquina virtual levanta esse erro quando um link dinâmico falha ou quando ocorre outra falha "difícil" da máquina virtual. Os programas Java típicos não captam erros, portanto, os programas Java não lançam erros. A maioria dos programas joga e captura objetos derivados da classe de exceção. Uma exceção indica um problema, mas esses problemas não são problemas sistêmicos graves. A maioria dos programas que você escreve jogará e capturará exceções.
A classe de exceção define muitas subclasses no pacote Java. Essas subclasses indicam que diferentes tipos de exceções podem ocorrer. Por exemplo, o NegativearRaysizeException indica que o programa está tentando criar uma matriz de tamanho negativo.
Um significado especial da subclasse de um diretor no idioma Java: a classe RuntimeException representa uma exceção que ocorre (durante o tempo de execução) em uma máquina virtual Java. Um exemplo de uma exceção de tempo de execução é a exceção de NullyiibaiErexception, que é aumentada quando um método tenta acessar um membro de um objeto por meio de uma referência nula. O NullyiiBaieRexception pode aparecer em qualquer lugar que um programa tenta desreferenciar um objeto. Os benefícios de verificar a exceção capturam frequentemente em muito os custos.
Como as exceções de tempo de execução são onipresentes, é inútil tentar capturar ou especificar o tempo todo (código inadequado e indiferente), o compilador permite que exceções de tempo de execução não sejam capturadas e especifiquem.
O pacote Java define várias classes de tempo de execução. Você pode pegar essas exceções, assim como os outros. Mas não há necessidade de uma maneira de especificar que ele lança uma exceção de tempo de execução. Além disso, você pode criar sua própria subclasse de tempo de execução. Exceções de tempo de execução - A discussão abaixo contém uma discussão aprofundada de quando e como usar exceções de tempo de execução. 3. Use Try-Catch para lidar com exceções
Escreva as aulas herdadas da exceção.
AgeException.Java
pacote com.yiibai.tutorial.exception.basic; public class AgeException estende a exceção {public AgeException (string message) {super (mensagem); }} Tooyoungexception.javapackage com.yiibai.tutorial.exception.basic; public class TooyOngexception estende ageException {public Tooyoungexception (string message) {super (message); }} ToooldException.java
pacote com.yiibai.tutorial.exception.basic; public class ToooldException estende ageException {public toooldException (string message) {super (message); }} E o método estático de verificar a idade da aula de Ageutils.
Ageutils.Java
pacote com.yiibai.tutorial.exception.basic; classe pública Ageutils {// Este método verifica a idade. / Se a idade for menor que 18, o método lançará uma exceção de TooyOngexception // se a idade superior a 40, o método lançará uma exceção também a verificação de vazio estático público (INT AGE) lança tooyoungexception, muito que aexception {if (idade <18) {// se a idade tiver menos de 18 jogar a nova Tooyoungexception ("idade" + idade + "muito jovem"); } else if (idade> 40) {// Se idade superior a 40, uma exceção será lançada. // Este método termina aqui. jogue novo ToooldException ("idade" + idade + "muito velho"); } // Se a idade for entre 18 e 40 anos. // Este código será executado. System.out.println ("idade" + idade + "ok!"); }} Verifique se há exceções e exceções desmarcadas:
Agexception é exceção, subclasse de ToooldException e Tooyoungexception2 são subclasses diretas da AgeException, então elas são "exceção verificada"
O método AgeUtils.Ceckage (INT) lançou uma exceção e precisa listar suas declarações de método através da palavra -chave "arremessos". Ou você pode declarar lançar mais níveis.
A localização do AgeUtils.Ceckage (INT) também deve ser processada para capturar a exceção ou continuar a jogá -lo.
"Exceção verificada" é verificada por "Java Compiler".
Existem duas opções:
Trycatchdemo1.java
pacote com.yiibai.tutorial.exception.basic; public class TryCatchDemo1 {public static void main (string [] args) {System.out.println ("Start Recruiting ..."); // verifique o System.out.println ("Verifique sua idade"); Int Age = 50; tente {Ageutils.CHeckage (idade); System.out.println ("Você passa!"); } catch (Tooyoungexception e) {// Faça algo aqui .. System.out.println ("Você é muito jovem, não passa!"); System.out.println (e.getMessage ()); } catch (toooldException e) {// faça algo aqui .. System.out.println ("Você é muito velho, não passa!"); System.out.println (e.getMessage ()); }}} No exemplo a seguir, pegaremos a exceção (classe Hiperexception) através da classe pai.
Trycatchdemo2.java
pacote com.yiibai.tutorial.exception.basic; public class TryCatchDemo2 {public static void main (string [] args) {System.out.println ("Start Recruiting ..."); // verifique o System.out.println ("Verifique sua idade"); Int Age = 15; tente {// aqui pode jogar ToooldException ou TooyOngexception Ageutils.Cecheckage (idade); System.out.println ("Você passa!"); } Catch (AgeException e) {// Se ocorrer uma exceção, tipo de AgeException // Este bloco de captura será executado System.out.println ("Sua idade inválida, você não passa"); System.out.println (e.getMessage ()); }}} Exceções diferentes também podem ser agrupadas em blocos para lidar se forem tratados da mesma maneira com o programa lógico.
Trycatchdemo3.java
pacote com.yiibai.tutorial.exception.basic; public classe trycatchdemo3 {public static void main (string [] args) {System.out.println ("Start Recruiting ..."); // verifique o System.out.println ("Verifique sua idade"); Int Age = 15; tente {// aqui pode jogar ToooldException ou TooyOngexception Ageutils.Cecheckage (idade); System.out.println ("Você passa!"); } catch (Tooyoungexception | TOOLODOLDEXCECTIMENTE E) {// Catch Multi Exceptions em um bloco. System.out.println ("Sua idade inválida, você não passa"); System.out.println (e.getMessage ()); }}} 4. Try-Catch-finalmente
Estamos acostumados a capturar erros através de blocos de tentativa. Experimente-se-fina-final para lidar com exceções completamente.
tente {// faça algo aqui} catch (exceção1 e) {// faça algo aqui} catch (excepção e) {// faça algo aqui} finalmente {// finalmente o bloco é sempre executado // faz algo aqui} TryCatchFinallyDemo.java
pacote com.yiibai.tutorial.exception.basic; public class TryCatchFinallyDemo {public static void main (string [] args) {string text = "001234a2"; int valor = toInteger (texto); System.out.println ("value =" + valor); } public static int toInteger (text de string) {try {System.out.println ("BEGN Parse text:" + text); // Uma exceção pode jogar aqui (númeroFormatexception). int vale = integer.parseint (texto); valor de retorno; } catch (númeroFormatexception e) {// No caso de 'texto' não é um número. // Este bloco de captura será executado. System.out.println ("Number Format Exception" + E.GetMessage ()); // Retorna 0 se ocorrer NumberFexception Ocorre retorno 0; } finalmente {System.out.println ("End Parse Text:" + Text); }}}Este é o processo do programa. O bloco finalmente será sempre executado sob quaisquer circunstâncias.
5. Exceção circundante
Person.java
pacote com.yiibai.tutorial.exception.wrap; public class Pessoa {public static final string masculino = "masculino"; public static final string feminino = "feminino"; nome de string privado; gênero de cordas privadas; private Int Age; Pessoa pública (nome da string, gênero da string, int ad) {this.name = name; this.gnder = gênero; this.age = idade; } public string getName () {return name; } public void setName (nome da string) {this.name = name; } public string getGender () {return gênero; } public void setgender (string gênero) {this.gender = gênero; } public int getage () {Age de retorno; } public void setage (int Age) {this.age = Age; }} Genterexception.java
pacote com.yiibai.tutorial.exception.wrap; // classe de gênero. }}
O pacote da classe ValideException tem outras exceções.
ValidateException.java
pacote com.yiibai.tutorial.exception.wrap; public class validexception estende a exceção {// envolve uma exceção public validexception (exceção e) {super (e); }} ValidateTutils.java
pacote com.yiibai.tutorial.exception.wrap; import com.yiibai.tutorial.exception.basic.ageutils; public class validateTils {public static void checkperson (pessoa pessoa) lança validexception {try {// verifique a idade. // válido se entre 18-40 // esse método puder lançar ToooldException, Tooyoungexception. Ageutils.Cecheckage (PERSON.GETAGE ()); } catch (Exceção e) {// Se não for válido // Enrole esta exceção pela validexception e jogue nova valideException (e); } // Se essa pessoa é feminina, ou seja, inválida. if (Person.getGender (). Equals (Person.female)) {genterexception e = new genderexception ("Não aceite mulheres"); lançar nova validexception (e); }}} WrapperexceptionDemo.java
pacote com.yiibai.tutorial.exception.wrap; public class wrapperexceptiondemo {public static void main (string [] args) {// um recrutamento de participantes. Pessoa pessoa = nova pessoa ("Casar", Person.Female, 20); tente {// exceções podem ocorrer aqui. Validateutils.checkperson (pessoa); } Catch (WRAP ValideException) {// Obtenha a causa real. // pode ser TooyounGexception, TOOLODOLDEXCECTION, exceção da generexception Causa = (exceção) wrap.getcause (); if (causa! = null) {system.out.println ("não passa, causa:" + causa.getMessage ()); } else {System.out.println (wrap.getMessage ()); }}}}6. RuntimeTimeException e subclasse a classe RuntimeException e suas subclasses são "exceções desmarcadas". Não é verificado no horário de compilação pelo compilador Java. Em alguns casos, você pode herdar desta filial para escrever suas próprias exceções.
Abaixo estão algumas classes pertencentes à filial de RuntimeException (é claro, isso não é tudo).
Alguns exemplos de exceções de manuseio deste tipo:
6.1- NuLlyibaiErexception
Esta é a exceção mais comum e geralmente causa erros no programa. A exceção é lançada quando você chama um método ou acessa o campo de um objeto vazio.
NullyiibaierexceptionDemo.java
pacote com.yiibai.tutorial.exception.runtime; classe pública NuLlyibaiErexceptionDemo {//, por exemplo, aqui está um método que pode retornar a string null. public static string getString () {if (1 == 2) {return "1 == 2 !!"; } retornar nulo; } public static void main (string [] args) {// Este é um objeto que não faz referência a nulo. String text1 = "Hello Exception"; // Ligue para o método recupera o comprimento da string. int length = text1.length (); System.out.println ("comprimento text1 =" + comprimento); // Este é um objeto que faz referência a NULL. String text2 = getString (); // Ligue para o método recupera o comprimento da string. // NuLlyiibaiErexception ocorrerá aqui. // é uma exceção ocorre em tempo de execução (tipo de tempo de execução) // o compilador javac não force você a usar um bloco de tentativa para lidar com isso comprimento = text2.Length (); System.out.println ("acabamento!"); }}Resultados da execução do exemplo:
Na realidade, o Try-Catch pode ser usado para capturar e lidar com essa exceção, como lidar com outras exceções. No entanto, isso é mecânico e geralmente devemos verificar se o objeto não é nulo antes de usá -lo.
Você pode corrigir o código acima para torná -lo semelhante ao seguinte para evitar exceções de ponteiro nulo:
// Este é um objeto nulo.
6.2- ArrayIndexOfBoundException
Essa exceção ocorre quando você tenta acessar um elemento de matriz com um índice inválido. Por exemplo, uma matriz possui 10 elementos para acessar, mas você está acessando elementos com o índice 20.
ArrayIndexOfBoundSexceptionDemo.java
pacote com.yiibai.tutorial.exception.runtime; public class ArrayIndexOfBoundSexceptionDemo {public static void main (string [] args) {string [] strs = new string [] {"One", "dois", "três"}; // o acesso ao elemento possui índice 0. String str1 = strs [0]; System.out.println ("String em 0 =" + str1); // O acesso ao elemento possui Índice 5. // ArrayIndexOfBoundSexception ocorre aqui. String str2 = strs [5]; System.out.println ("String em 5 =" + str2); }} Para evitar o ArrayIndexOfBoundSexception, devemos ver mais a verificação da matriz do que usar o Try-Catch.
if (strs.length> 5) {string str2 = strs [5]; System.out.println ("String em 5 =" + str2);} else {System.out.println ("nenhum elementos com índice 5");}O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.