基础异常
基础的异常:
1、什么是异常?
什么时候会出现异常?其实出现异常了不就是代表你的代码出现了问题了嘛!所以可以说异常其实看做是对问题的描述,java是面向对象的语言,正所谓万物皆对象,所以,java中异常是将问题进行对象的封装。
异常:
Throwable
|-error
|-Exception
|-RuntimeException
异常(Exception)分为两种:
一种是编译时异常:编译时异常,就需要抛出或者捕获处理,不然编译就会失败
一种是运行时异常(RuntimeException):不需要进行任何处理,编译器也不会检查出来,就让它存在,然后在运行时出现问题,使得程序停止。然后就需要对代码进行修正。
2、异常具有什么特性?
异常具有可抛性。同时也只有异常体系具有可抛性。
3、对于异常的处理有两种方式,一种就是讲异常抛出,通常就是throw,throws,这两个单词的区别,在下面再说,第二中就是try{}catch{}.。
4、throw:作用于方法内部,讲异常进行对象的封装,然后抛出,如:throw new Exception();这里使用了new,从这也可看出异常是对问题的一个封装。
throws:作用于方法上,其实就相当于一个声明,告诉调用者,我这里会抛出异常,让调用者做好准备,或者是处理,或者是接着抛出。
5、如果不讲异常抛出。就必须使用捕获处理。捕获处理一共有两种方式
第一种方式:try{
} catch() {
}
第二种方式:try{
被检测代码;
} catch() {
处理异常的代码;
} finally {
一定会执行的代码;
}
注:一个try后面可以跟多个catch,不过有一条,父类的catch放在最下面
6、第三种方式
try{
} finally {
}
这个时候因为没有catch,也就是没有处理异常的代码,所以也就是必须要将异常抛出,需要再方法上声明异常,在方法内抛出异常。
7、finally:finally内的代码因为基本上都会被执行的。即使出现了异常,也会执行。
有一种特殊情况:在执行到System.exit(0);这个代码说明了正常退出程序,关闭了jvm,将所有的内存释放了。所以finally内的代码就不能执行了
8、子类抛出的异常必须是父类的子类或子集,也可以跟父类抛出一样的异常。
如果父类没有抛出异常,则子类即使有异常也只能捕获处理掉,不能抛出
例子:有两个异常A,B都是继承了Exception,而C异常继承了A异常,如果我调用了父类的方法,抛出了A异常,那么我如果调用子类继承重写父类的这个方法,那么会抛出A,B,C中的那个异常呢?
只可能抛出A,C异常,不可能抛出B异常