java异常处理机制
Exception 类的层次
java中所有的异常类是从 java.lang.Exception 类继承的子类。
而Exception 类是 Throwable (可抛出的)类的子类。除了Exception类外,Throwable还有一个子类Error 。
Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。
Error 用来指示运行时环境发生的错误。
例如,例如操作系统崩溃, jvm出错, 动态链接库失败等,代表的是严重错误, 这种错误程序员一般无法进行处理
java中的异常基本分为
- 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被忽略。
- 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
常见的检查性异常:在Java的标准包java.util 和 java.net 中定义的异常都是非运行异常。
常见的非检查性异常:
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组下标越界异常:ArrayIndexOutOfBoundsException
java中对异常的处理
步骤主要是这几步:
- 对有可能出现的异常使用try catch处理,try catch处理后并不会终止程序,所以即使程序出现了错误, 也可以对错误进行一定的处理后继续执行.
- 函数里并不处理异常,使用throw or throws 关键字.把可能出现的异常抛给调用该函数的上级函数处理,throws 关键字放在方法签名的尾部,而throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。
- 交给jvm虚拟机处理,这种情况只适用于RuntimeExecption及其派生类.
实际上, 当java程序的1个函数抛出异常时,
首先会检查当前函数有没有try catch处理, 如果无检查上一级函数有无try..catch处理....
这样在函数栈里一级一级向上检查, 如果直至main函数都无try..catch, 则抛给jvm..
java自定义异常
在 Java 中你可以自定义异常。这是因为实际上, 当java程序执行时出现错误时, jvm会把执行时出错的信息(例如出错原因, 类型, 位置) 收集,然后打包成为1个对象(object), 程序员可以对这种对象进行处理. 这种对象就是所谓的异常.
编写自己的异常类时需要记住下面的几点。
- 所有异常都必须是 Throwable 的子类。
- 如果希望写一个检查性异常类,则需要继承 Exception 类。
- 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
例:
import java.io.*;
//自定义异常类,继承Exception类
public class Test_expt extends Exception{
public Test_expt()
{
System.out.println("HelloWord");
}
};
更详细的请看:
https://www.cnblogs.com/taiwan/p/7073743.html