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培训、期待与您交流!