(I) Hierarquia de exceção de Java
Para entender a diferença entre a exceção verificada e a exceção desmarcada em Java, vamos primeiro olhar para a hierarquia de exceção de Java.
Este é um diagrama de hierarquia de exceção Java simplificado. Deve -se notar que todas as classes são herdadas do lançável e a próxima camada é dividida em duas estruturas, erro e exceção. O nível da classe de erro descreve erros internos e erros de exaustão de recursos no sistema de tempo de execução do Java. Além de simplesmente relatar esse erro ao usuário e tentar impedir que o programa seja encerrado com segurança, geralmente existem outras soluções.
(Ii) a diferença entre exceção desmarcada e exceção verificada
Depois de entender o exposto acima, vamos dar uma olhada no que é verificado exceção e o que é exceção desmarcada. De fato, a especificação da linguagem Java define esses dois muito simples. Exceções derivadas de erros ou tempo de execução ATENCECCECTIVAS são chamadas de exceções desmarcadas, e todas as outras exceções se tornam exceções verificadas . Embora essa definição seja muito simples, o RuntimeException é um conceito muito confuso. Parece que todas as nossas exceções estão em processo de execução do programa. Minha explicação sobre a RuNTimeException em Java eficaz não é tão satisfatória.
Use exceções verificadas para condições recuperáveis e exceções de tempo de execução para erros de programação (Item 58 na 2ª edição)
No entanto, a partir desta frase, podemos simplesmente estendê -la, ou seja, se ocorrer uma hora de execução, deve ser um problema para o próprio programador. Por exemplo, os subscritos de matriz estão fora dos limites e acessam exceções de ponteiro nulo etc. Enquanto você prestar um pouco de atenção, essas exceções são exceções que podem ser evitadas no estágio de codificação. Se você ainda acha que esses dois conceitos são difíceis de distinguir, o método "mais violento" é memorizar a Common RunTimeException, que pode economizar muito tempo para julgar.
(Iii) Por que devemos distinguir entre exceções sem controle e exceções verificadas?
O motivo é realmente muito simples. O compilador verificará se você fornecerá um mecanismo de manipulação de exceções para todas as exceções verificadas. Por exemplo, quando usamos o Class.ForName () para encontrar o objeto de classe de uma determinada string, se o manuseio de exceção não for fornecido para esse método, a compilação não será passada.
(Iv) Que exceções devemos declarar?
Como dissemos anteriormente, a RunTimeException é um erro que pode ser evitado durante o processo de programação. Então, não precisamos jogar essas exceções? Em princípio, isso é verdade, mas a especificação Java não limita isso. Parece que você joga uma variedade de limites e não há significado prático e, pelo contrário, causará certas perdas de desempenho. Então, como devemos projetar exceções? Precisamos lembrar que as duas situações a seguir são necessárias para declarar exceções de arremessos:
Ligue para um método de exceção verificada, como a IOException. Quanto ao motivo, discutimos anteriormente, se todas as exceções verificadas forem lançadas, elas não podem ser compiladas. Um erro foi encontrado durante o programa em execução e uma exceção foi lançada usando a instrução THON. Para exceções desmarcadas, existem apenas duas situações principais: evitável (exceção de tempo de execução) ou incontrolável. Estes também requerem declaração de exceções.
Aqui estão exemplos para ilustrar as coisas desajeitadas mencionadas na nota 2 acima:
Primeiro, defina uma classe básica de exceção gericexception, herdada da exceção.
pacote check_unchecked_exceptions; classe pública gericexception estende a exceção { / ** * * / private estático final serialversionuid = 2778045265121433720l; public genericexception () {} public genericexception (string msg) {super (msg); }} A seguir, define uma classe de teste VerifyException.
pacote check_unchecked_exceptions; classe pública verifyException {public void primeiro () lança genericexception {throw new genericexception ("exceção verificada"); } public void Second (String msg) {if (msg == null) {lança new NullPointerException ("Exceção desmarcada"); }} public void terceiro () lança genericexception {primeiro (); } public static void main (string [] args) {verifyException ve = new verifyException (); tente {ve.first (); } catch (genericexception e) {e.printStackTrace (); } ve.second (nulo); }}Após a execução, obtenha as seguintes informações sobre o console do Eclipse:
check_unchecked_exceptions.genericexception: Exceção verificada
em check_unchecked_exceptions.verifyException.first (verifyException.java:6)
em check_unchecked_exceptions.verifyException.main (verifyException.java:23)
Exceção no thread "Main" java.lang.nullpointerException: exceção desmarcada
em check_unchecked_exceptions.verifyException.second (verifyException.java:11)
em check_unchecked_exceptions.verifyException.main (verifyException.java:29)
No exemplo acima, combinado com os conceitos de verificado e desmarcado, pode -se ver que a exceção da classe pai é do tipo verificado, mas sua subclasse RuntimeTeException (Subclass NullPointerException) está desmarcada.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.