1、首先什么是异常
异常就是一些违反规则的情况,比如数组下标越界,除数为0,空的类引用变量调用方法。
2、java的异常体系
3、异常的分类&错误
异常分为检查时(Check Exceptions)异常和运行时(Runtime Exceptions)异常
共同点:这两种方法都会导致程序报错
不同点:检查时异常会提醒你这个地方可能会出现什么异常,你需要针对这个异常做一些处理,强制程序的编写者去处理这个异常,要么抛出,要么捕获,而运行时异常不会提醒你这个地方可能会出现的异常,也不会强制程序编写者去处理这个异常,你处不处理这个异常是你自己的事情,系统不管你。
错误:错误不是异常,一般来说错误是致命的,它会直接杀死一个进程,是程序员无法控制的,错误往往是虚拟机造成的
4、处理异常的几种方法
1、try……catch:
try块里面写可能会出异常的代码;如果try块里面的代码确实出异常了,那么自动创建一个异 常对象,被catch块捕获,然后程序会跳转到catch块去执行catch块里面的代码。如果说我们 在try块之前,或者try块里开启了物理资源,比如说数据库的连接,读取磁盘文件等;在出现 异常之后我们需要关闭这些资源,那么我们可以在catch块的后面添加一个finally块,在finally 块里面关闭这些资源。finally块放到最后执行,也就是说出现异常,先去执行相应的catch 块,然后再去执行finally块
2、throw
用throw可以手动的抛出异常,用它抛出的异常是针对人的主观角度来讲算不算异常,举个例 子,下雨,对我来说是好事,对你来说不是好事,那么下雨对你来说就是异常,但对于系统 来说下雨就是很平常的一件事,系统并不认为它是一个异常所以你需要手动的抛出下雨这个 异常 。
3、throws
throws与throw的区别在于,throws是写在方法签名上的,抛出的是一个类型,而throw是写 在代码块里的,抛出的是一个异常类的实例。 throws一般可以抛出运行时异常,也可以抛出 检查异常,如果抛出的异常是检查时异常,那么系统将强制这个方法所有的调用者必须处理 这个异常,如果抛出的异常是运行时异常,系统不会强制这个方法的调用者处理这个异常
5、自定义异常
自定义异常需要继承java提供的Exception基类,或者其父类Throwable,如果说我们想自定义 一个运行时异常,那么我们需要继承RuntimeException。继承完之后然后根据我们的需要去 重写里面的一些方法,便可以完成我们自定义异常类的编写