黑马程序员系列第十篇 异常

ASP.Net+Android+IOS开发  、Net培训、期待与您交流!

 

 目录:1、java中异常概述      2、java异常处理机制     3、java异常应用

 

1、java中异常概述

概念: 异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。

异常类层次结构图(常用的就Exception)

error

这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。这些错误是不可查的,因为它们在应用程序的控制和处理能力之 外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在 Java中,错误通过Error的子类描述。

Exception

是程序本身可以处理的异常。Exception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。

2、异常处理机制(抛出异常,捕捉异常)

        抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。

        捕获异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适 的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适 的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。

 

 3、java异常应用

 

语法规则:

1)  必须在 try 之后添加 catch 或 finally 块。try 块后可同时接 catch 和 finally 块,但至少有一个块。

2) 必须遵循块顺序:若代码同时使用 catch 和 finally 块,则必须将 catch 块放在 try 块之后。

3) catch 块与相应的异常类的类型相关。

4) 一个 try 块可能有多个 catch 块。若如此,则执行第一个匹配块。即Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,如果异常对象为某个异常类型或其子类的实例,就执行这个catch代码块,不会再执行其他的 catch代码块

5) 可嵌套 try-catch-finally 结构。

6) 在 try-catch-finally 结构中,可重新抛出异常。

7) 除了下列情况,总将执行 finally 做为结束:JVM 过早终止(调用 System.exit(int));在 finally 块中抛出一个未处理的异常;计算机断电、失火、或遭遇病毒攻击。

 

    简单示例

 1 package Test;  
 2 import java.lang.Exception;  
 3 public class TestException {  
 4     static int quotient(int x, int y) throws MyException { // 定义方法抛出异常  
 5         if (y < 0) { // 判断参数是否小于0  
 6             throw new MyException("除数不能是负数"); // 异常信息  
 7         }  
 8         return x/y; // 返回值  
 9     }  
10     public static void main(String args[]) { // 主方法  
11         int  a =3;  
12         int  b =0;   
13         try { // try语句包含可能发生异常的语句  
14             int result = quotient(a, b); // 调用方法quotient()  
15         } catch (MyException e) { // 处理自定义异常  
16             System.out.println(e.getMessage()); // 输出异常信息  
17         } catch (ArithmeticException e) { // 处理ArithmeticException异常  
18             System.out.println("除数不能为0"); // 输出提示信息  
19         } catch (Exception e) { // 处理其他异常  
20             System.out.println("程序发生了其他的异常"); // 输出提示信息  
21         }  
22     }  
23   
24 }  
25 class MyException extends Exception { // 创建自定义异常类  
26     String message; // 定义String类型变量  
27     public MyException(String ErrorMessagr) { // 父类方法  
28         message = ErrorMessagr;  
29     }  
30   
31     public String getMessage() { // 覆盖getMessage()方法  
32         return message;  
33     }  
34 }  

 

ASP.Net+Android+IOS开发  、Net培训、期待与您交流!

原文地址:https://www.cnblogs.com/blueFlowers/p/4977129.html