所有的异常都有一个超类throwable;
throwable有两个子类:Exception和error(一般在重大错误,不能够自行恢复);
Exception有两个子类:checked和runtime exception异常;
checked:检查时异常,就是程序代码有的错误会有红色波浪线的异常,在运行之前会提示出来;
runtime exception:运行时有错误会报出的异常如空指针异常和下标越界异常;
进行异常处理有以下两个方法:
1、使用try{} catch(异常种类){}
try 里面一般是一整个功能在一起,有时候需要自己进行判断,有时是程序会自动提示需要加上try.....catch进行处理。
如下面的代码:
int a=3;
int b=0;
System.out.println(a/b);
System.out.println("除法运算");
会产生异常:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at anli.f.main(f.java:7)
这个时候如果不处理会报出如下异常,是虚拟机自动处理之后程序终止,后面的程序就不在执行,如果不想程序就此终止可以加上try...catch进行处理;
try {
int a = 3;
int b = 0;
System.out.println(a / b);
} catch (Exception e) {
// TODO: handle exception
System.out.println("除数不能为0!");
}
System.out.println("除法运算");
输出结果:
除数不能为0!
除法运算
另外还有一种模式:try....catch....finally;不管是否会发生异常都会处理finally的代码块除非用system.exist(0)进行了处理;
示例如下:
try {
int a = 3;
int b = 0;
System.out.println(a / b);
} catch (Exception e) {
// TODO: handle exception
System.out.println("除数不能为0!");
}finally {
System.out.println("finally代码块");
}
System.out.println("除法运算");
结果:
除数不能为0!
finally代码块
除法运算
注意:try可以和catch或者finally分别使用,但是不能单独使用
2、throws和throw;
throws:抛出异常声明,说明有异常,但不进行处理。抛出异常让程序的调用者进行处理,如果一直都不进行try....catch处理就会最终交给虚拟机处理;
throw:抛出一个异常,一般用于抛出一个新的异常或者自定义异常;
用法实例:
public void div(int a,int b) throws Exception{
if(b==0){
throw new Exception("除数不能为零");
}
System.out.println(a/b);
}
f fm=new f();
int a=4;
int b=0;
try {
fm.div(a, b);
} catch (Exception e) {
// TODO Auto-generated catch block
e.getMessage();//获取异常信息可以有这个和下面一行的方法;
e.printStackTrace();
}
System.out.println("除法运算");
结果:
java.lang.Exception: 除数不能为零
at anli.f.div(f.java:21)
at anli.f.main(f.java:10)
除法运算
注意:可以使用多重try....catch........catch;
子类异常在前面,父类异常在后面,一般最后的异常一般是exception;
3、自定义异常类;
可以自定义一个异常继承一个异常类,如exception或者runtime exception;
在使用的时候需要使用throw 抛出一个自定义异常;
如定义一个 AgeException extends Exception{
里面需要继承父类的构造方法,可以自定义生成;
};
在使用的时候只需要在在throw时抛出:
throw new AgeException("除数不能为零");
把上面的代码throw new exception改为上面代码,最后会抛出Age Exception;
4、throw和throws的区别:
a. 作用不同,throws是声明异常,throw是抛出异常;
b.作用位置不同,throws是在类后面声明,可以声明抛出多个异常,throw是抛出一个异常对象;
c.定义字眼不同;