异常
概述
就是出现了不正常的情况
异常结构
JVM的默认处理方案
如果程序出现问题,我们没有做任何处理,最终JVM会做默认的处理:
- 把异常的名称、异常原因及异常出现的位置等信息输出在控制台
- 程序停止执行
异常处理
try…catch…
格式:
try {
//可能出现异常的代码;
} catch(异常类名 变量名) {
//异常处理代码;
}
执行流程:
程序从try里面的代码开始执行
出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统
当Java运行时系统接收到异常对象时,会到catch中去找匹配的异常类,找到后进行异常的处理
执行完毕后,程序还可以继续往下执行
try…catch…finally
try {
//可能出现异常的代码;
} catch(异常类名1 变量名1) {
//异常处理代码;
} catch(异常类名2 变量名2) {
//异常处理代码;
}…
finally {
//异常处理出口(无论是否发生异常,finally必然执行)
}
Throwable
成员方法
方法名 | 说明 |
---|---|
public String getMessage() | 返回此throwable的详细消息字符串 |
public String toString() | 返回此可抛出的简短描述 |
public void printStackTrace() | 把异常的错误信息输出在控制台 |
throws
异常是否抛出
如果是参数导致异常,应该通过throws将异常抛出
格式
返回值 方法名()throws 异常类名{}
注意
这个格式是
跟在方法的括号后面的
-
编译时异常必须要进行处理
,两种处理方案:try…catch…或者throws,如果采用throws这种方案,将来谁调用谁处理 -
运行时异常可以不处理
,出现问题后,需要我们回来修改代码
自定义异常
格式
public class 异常类名 extends Exception {
无参构造
带参构造
}
不同异常类型的自定义异常
-
编写一个类,继承Exception,并重写一参构造方法,即可完成自定义受检异常
-编 写一个类,继承RuntimeException,并重写一参构造方法,即可完成自定义运行时异常
throws与throw的区别
throws |
throw |
---|---|
用在方法声明后面,跟的是异常类名 | 用在方法体内,跟的是异常对象名 |
表示抛出异常,由该方法的调用者来处理 | 表示抛出异常,由方法体内的语句处理 |
表示出现异常的一种可能性,并不一定会发生这些异常 | 执行throw一定抛出了某种异常 |