一、异常分类
- Throwable是整个Java异常体系的顶层父类,它有两个子类,分别是:Error和Exception。
- Error表示系统致命错误,程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些错误发生时,Java虚拟机只能终止线程。
- Exception是程序本身可以处理的异常,这种异常分两大类:
受查异常
- 在Exception异常体系中,除了RuntimeException类及其子类的异常,均属于受查异常。当你调用了抛出这些异常的方法后,必须要处理这些异常。如果不处理,程序就不能编译通过。如:IOException、SQLException、用户自定义的Exception异常等。
非受查异常
- 非受查异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常属于unchecked异常,开发人员可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
二、异常处理
- 发生非受查异常可以进行异常处理,避免程序在运行的时候报异常,保护程序的健壮性。
- java的异常处理只要是解决一些你的程序无法掌控 但是又需要的部分比如说你的程序需要读取某个文件 或者需要连接网络 又或者使用数据库这样的情况虽然程序是你写的 但是你绝对不能保证文件一定存在 网络一定畅通 数据库一定会打开
- 这个时候为了程序能继续运行 就需要把上边说的情况解释成异常 要想运行就必须这些处理异常
- 语法如下:
//
try{
//有可能出现异常的语句
}catch(异常类 对象)....{ //可有可无
// 出现异常后的解决方案
}finally{ //可有可无
// 异常出口,无论是否产生异常,均会执行finally代码块
// 即便try,catch中存在return语句,也会在return之前执行finally代码块
}
//组合:
//try...catch...
//try...finally...
//try...catch...finally...
三、throw和throws的区别
1.throw的使用方法
class AddException extends Exception{
public AddException(String str){
super(str);
}
}
public class Test {
public static void main(String[] args) {
try{
throw new AddException("出错了啊 啊啊啊"); //这条语句百分之百出错
}catch (Exception e){
System.out.println("它出错了");
}
}
}
2.throws的使用方法
public class Test {
public static void main(String[] args) {
try {
fun(2,0); //这里是可能出错,比如:如果分母不是0就不出错
} catch (Exception e) {
e.printStackTrace();
System.out.println("出错");
}
}
public static int fun(int a,int b)throws Exception{
return a/b;
}
}
1、throw用在方法体内,上面代码显示了,是直接在main方法体内
throws用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。这个看上面的代码就理解了
2、throw是具体向外抛异常的,抛出的是一个异常实例
throws声明了是哪种类型的异常,使它的调用者可以捕获这个异常
3、throw,如果执行了,那么一定是抛出了某种异常了,安生throws表示可能出现,但不一定。
4、同时出现的时候,throws出现在函数头、throw出现在函数体,两种不会由函数去处理,真正的处理由函数的上层调用处理
好的编程习惯
1、在写程序时,对可能会出现异常的部分通常要用try{…}catch{…}去捕捉它并对它进行处理;
2、如果是系统异常的话可以什么都不用做,也可以针对方法抛出一个异常,但是还是建议针对方法写一个throws,因为这样在完成一个大型任务的时候可以让别的程序员知道这里会出现什么异常。
PS:马上考四级了,希望这次花时间给英语不会白费。对于大三,一年如一日,坚持!