异常就是程序出现不正常的情况
编译时异常:
都是Exception类及其子类/.....必须显示处理,否则程序就会发生错误,无法通过编译
运行时异常:
都是RuntimeException类及其子类/.....无需显示处理,也可以和编译时异常一样处理
throws异常:
public void 方法 () throws 异常类名 {
}
注意:
1.这个throws格式是跟在方法的括号后面的
2.编译时异常必须要进行处理,两种处理方案:try...catch …或者 throws,如果采用 throws 这种方案,在方法上进行显示声明,将来谁调用这个方法谁处理
3.运行时的异常是因为在运行时才会让发生的,所以在方法后面的可以不写,运行时的异常交给jvm处理
try...catch …:
try {
可能出现异常的代码;
} catch(异常类名 变量名) {
异常的处理代码;
}
执行流程:
-
程序从 try 里面的代码开始执行
-
出现异常,就会跳转到对应的 catch 里面去执行
-
执行完毕之后,程序还可以继续往下执行
注意事项:
-
如果 try 中没有遇到问题,怎么执行?
会把try中所有的代码全部执行完毕,不会执行catch里面的代码
-
如果 try 中遇到了问题,那么 try 下面的代码还会执行吗?
那么直接跳转到对应的catch语句中,try下面的代码就不会再执行了 当catch里面的语句全部执行完毕,表示整个体系全部执行完全,继续执行下面的代码
-
如果出现的问题没有被捕获,那么程序如何运行?
那么try...catch就相当于没有写.那么也就是自己没有处理. 默认交给虚拟机处理.
-
同时有可能出现多个异常怎么处理?
出现多个异常,那么就写多个catch就可以了. 注意点:如果多个异常之间存在子父类关系.那么父类一定要写在下
throw抛出异常:
格式: throw new 异常();
表示当前的代码手动抛出一个异常,下面的代码就不再执行了
throw与throws的区别:
throws | throw |
---|---|
用在方法声明后面,跟的是异常类名 | 用在方法体内,跟的是异常对象名 |
表示声明异常,调用该方法有可能会出现这样的异常 | 表示手动抛出异常对象,由方法体内的语句处理 |
Throwable成员方法(应用):
方法名 | 说明 |
---|---|
public void printStackTrace() | 把异常的错误信息输出在控制台 |