------- android培训、java培训、期待与您交流! ----------
(一)概述
1.异常:就是不正常。程序在运行时出现的不正常情况。其实就是程序中出现的问题。
2.异常的又来:问题也是现实生活中一个具体的事物,也可以通过java类的形式进行描述,并封装成了对象。
(二)异常体系
1.严重的问题——一通过了Error类进行了描述,编译时错误
2.非严重的问题——通过了Exception类进行处理,运行时错误
Throwable
|__Error
|__Exception
|__RuntimeException
(三)应用
1.异常的处理
举例出现除数为0的异常
第一种方法用try{}catch(){}来捕捉处理
public class Test {
public static void main(String[] args) {
try{
demo(1,0);
}
catch(ArithmeticException a){
System.out.println("被除数不能为0!");
}
}
public static void demo(int x,int n){
System.out.println(x/n);
}
}
第二种方法可以自定义异常类,如果是被除数是0就可以抛出这个异常类
public class Test {
public static void main(String[] args) {
try{
demo(1,0);
}
catch(MyException a){
a.printStackTrace();
}
}
public static void demo(int x,int n)throws MyException{
if(n==0)
throw new MyException("被除数为零了!"); //这里抛出了异常对象,函数上面就必须声明抛出,这样调用者才会处理
System.out.println(x/n);
}
}
class MyException extends Exception{ //自定义异常继承Exception就具备了可拋性了
MyException(String str){
super(str);
}
}
3.throws和throw的区别
throws用于函数上,声明抛出异常类
throw用于函数内,抛出异常对象
4.RuntimeException(运行时异常,编译不检测的异常)
1.RuntimeException是Exception特殊的子类
2.如果在函数内抛出了该类异常,函数上可以不用生命,调用者也不用处理,一样编译通过
3.自定义异常时如果该异常发生无法再继续进行运算就可以让自定义异常继承RuntimeException
5.finally关键字
finally代码块是一定会执行的代码块,除非遇到System.exit()
6.异常在字父类覆盖中的体现
1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类覆盖方法只能抛出父类抛出的异常,或者异常的子类。
2.如果父类方法抛出多个异常,那么子类在覆盖方法时,只能抛出父类异常的子集。
7.try catch finally组合的三种形式
try{}catch(){}finally{}
try{}catch(){}
try{}finally{}