目录
异常分类
Java中异常类被写在Throwable类中,Throwable分为error和exception。
error:是Jvm无法处理的异常,一旦error错误出现程序直接就挂了。
exception:是Jvm可以处理的异常,出现exception异常之后,JVM会通过异常处理机制来处理exception。
其中exception的RuntimeException子类是在运行过程中可能触发的异常,属非必需处理异常,因为对于这种异常JVM已经写好了,除RuntimeException其他属Exception类中的其他异常是必须处理的异常。
为什么要处理异常?
异常就是在程序运行中,因为一些特殊原因导致程序出现错误,如果不处理这些异常,则程序无法继续运行,Jvm将会中断程序,在不希望程序被终止时,异常就异常重要,异常增加了程序的健壮性,异常以有利于帮助程序员寻找错误。
异常处理机制
一旦在程序运行中发生异常,Jvm会查看该异常是否被处理,若异常未被处理,则将异常抛到所调用这个方法的地方并查看这里是否有处理异常的代码,若没有则再次向外抛,直到从main抛出,则Jvm将中断程序并将异常代码输出。
生成异常:
当自己编写程序并在程序当中有可能出现某种异常时,可利用throw生成异常。
语法:
throw new someException();
异常处理的两种方式
概述:
Java处理异常的两种方式,trycatch是真正的处理异常,并对异常做出相应的处理,而throws则只是将异常抛出,不处理异常,让别人处理。
1.try{}catch{}[finally{}]语句:
将有可能出现异常的代码方法try语句中,如果发生异常后,Jvm先会查看catch中是否有对应异常,如果有则运行对应代码对一场进行处理。
Notes:
在try{}catch{}中可以有多个catch语句,这就有先后问题,按上下顺序依次对比,且父类应该写在子类下,因为按照多态,父类一定可以接受子类,如果父类在上,则子类一定无法被执行。
finally语句可选,finally语句块中的代码只有有异常发生就执行,一般用来资源回收。
2.throws
语法:
public void f() throws ExceptionLIst
写在可能出现异常的方法声明后,当方法体内出现此类异常,则告诉Jvm这个异常我不管,将异常抛给调用这个方法的调用者,让调用者处理。
Notes:
在方法内有throw语句的时候一般写上throws将对应异常抛出,因为在生成异常的地方,你一般无法处理异常,只能交给调用者让它来处理异常。
thorws语句不生成异常,只抛出异常,而throw是生成异常,并不向上抛出异常,一般需要搭配throws将异常向上抛出。
自定义异常类:
class Exception1 extends Exception
{
Exception1(String note)
{
super(note);
}
}
class A
{
public static void main(String [] args) throws Exception1
{
throw new Exception1("我自定义了一个Exception1异常");
}
}
Notes:
- 自定义异常类一般要继承Exception或者它的子类,Error一般不需要我们定义。
Notes:
- 涉及到重写方法抛出异常时,需要注意抛出异常的范围,假如被重写方法throws A,B异常,那么在重写该方法的方法所抛出异常的范围必须要小于被重写方法抛出的异常范围,这是因为多态的缘故,当我们利用多态父类接收子类调用父类和子类都有的函数时,要对异常进行处理,那么就有捕获范围的问题,若子类抛出的异常范围比父类大,则可能有异常而捕获不到的情况,这种情况要杜绝。
- catch与catch之间不可以有语句,try和catch是一个整体。
- catch的顺序问题,子类应当放到父类之前。