分类:Error 、Exception(error和exception都是继承自Throwable
)
Throwable类的方法
getmessage():获取详细的异常描述信息
getCause():获取发生异常的起因
printStackTrace():打印异常发生时的方法调用栈信息
一、Error
一般是指与虚拟机(Java virtual machine )相关的严重问题,如系统崩溃,虚拟机错误,内存溢出等,这一类错误往往会导致应用程序直接中断,仅靠程序本身无法恢复和预防,并且遇到这种情况,建议直接中断。
常见的Error
1、NoSuchMethodError 没有此方法的错误
2、OutOfMemoryError 内存溢出
3、StackoverflowError 栈溢出的错误(栈也是内存中的一种)
4、ThreadDeath 线程死锁
二、Exception
表示程序可以处理的异常情况,我们可以通过直接捕捉这些异常,使程序继续运行,也可以选择不处理,让程序终止,而不是随意让程序终止
Java中的Exception分为了两类:
1、编译时异常(检查性异常),直接继承自Exception
2、运行时异常(非检查性异常),直接继承自RuntimeException
编译时异常:编译器在代码编译的时候出现的异常
运行时异常:编译时发现不了问题,但运行会报错
常见的编译时异常
1、ClassNotFoundException:找不到类
2、IllegalAccessException:拒绝访问目标类
3、InstantiationException:当试图使用Class类中的newInstance方法创建一个类的实例,目标类无法实例化
4、NoSuchMethodException:请求方法不存在
常见的运行时异常
1、ArithmeticException:算术异常
2、ArrayIndexOutOfBoundsException:数组下标越界
3、NumberFormatException:数字格式异常
4、NullpointerException:空指针异常
5、indexOutOfBoundsException:索引下标越界
6、ClassCastException:类转换异常
三、异常处理机制
1、异常直接抛出,给上一级调用者去处理,直到被处理,如果所有上级调用者都不处理就会java虚拟机处理。
2、通过try....catch来捕捉处理异常,语法如下:
try{
//try块是指的受保护的代码,可能会抛出异常的代码。
}catch(XXException e){
//catch后面的小括号是抓取到的异常,这个异常可以被当做参数传入到catch块,catch块是抓取到异常后的处理逻辑,而处理逻辑一般是这么几种(做日志、将异常重新封装后抛出、其他逻辑)
}
四、自定义异常
实现方式:
1、自定义一个编译性异常:继承于Exception
2、自定义一个运行时异常:继承于RuntimeException
3、覆盖掉父类或者超类的某些方法
目的:为了重新给予更友好的错误提示
1、自定义一个异常
public class DivException extends RuntimeException {
//无参构造函数
public DivException(){
super("接口请求出现异常");//默认提示
}
//用详细信息指定一个异常
public DivException(String message){
super(message);
}
}
2、使用自定义的异常
public class Caculater {
public static void div(int a){
if (a <= 0){
throw new DivException("初始化数据不能小于0");
}
}
public static void main(String [] args){
Caculater.div(0);
}
运行结果:
image.png
网友评论