异常的介绍和处理方式
1.什么是异常
程序在自上而下的执行过程中发生了不可预料的事件导致代码停止运行,这种情况就是异常
数组下标越界,类转换异常,空指针等等
Java给我们封装了很多的异常,并且提供了很优秀的处理机制
2.Throwable类
throwable类是所有异常和错误的父类
他的下面分为了两个大类,一个是Error类,一个是Exception类
Error类是指JVM自己本身的错误,比如内存溢出这些程序员靠代码无法解决的情况
Exception类是指在编译时或者运行时发生的一些不可预期但是可以用一些方法让代码继续走下去的异常(注意:这里说的异常并不是语法格式错误那些情况)。
异常分为两种情况:
第一种是编译时异常:
FileNotFoundException
SQLException
ClassNotFoundException
InterruptException
第二种时运行时的异常:
数组下标越界 ArrayIndexOutOfBoundException
类转换异常 ClassCastException
空指针异常 NullPointerException
3异常的处理方案
那么在代码出现异常的时候有两个处理方案:
1.异常的捕捉
2.异常的抛出
3.1异常的捕捉
当代码运行时有可能会遇到异常时使用try -- catch语句进行捕捉
语法格式
try{
有可能会出现异常的代码
} catch (异常对象) {
针对异常程序员自行定义的处理方案
} finally {//这个finally{}在语法格式上写或不写,try--catch这个语句体依然能编译通过且执行
无论是否有异常都会执行的内容
}
System.out.println("代码继续执行......");
那么如果出现了异常代码,则会执行catch后面方法体里面的解决方案,并且代码继续往下执行。
如果没有出现异常的话,则会不执行catch后买方法体中的解决方案,按照正常流程从上而下执行。
3.2异常的抛出
在遇到可能会发生的异常时还可以使用关键字throws,throws的作用是把这个异常不处理,直接抛出这个方法体,给到上一个类或者父类,一直往上抛出,每次抛出都可以选择继续抛出或者使用try--catch进行捕捉,如果一直抛出则最后会抛给JVM机,代码终止。
public class Aaa{
//throws会抛出这个类型的异常给JVM机
public static void main(String [] args) throws Exception {
//0不可以作为除数,所以会出运行异常
int a = 5, b = 0 ;
int ret = a / b ;
//注意抛出异常之后就会在出现异常的地方终止代码,下面这个代码就不会继续执行
System.out.println("代码执行......");
}
}
一般情况下不影响代码整体的运行和功能时建议try--catch进行捕捉,就像生病一样,医生会先让你吃药,不行了在打针输液,再不行之后才会动手术,最后真的治不了了,才会抛弃抛出。
public class Aaa{
public static void main(String [] args){
//这里依然可以选择抛出异常或者抓住这个异常
test ( 5, 0);
}
//这里这个throws Exception则会把异常抛出给上面
//throws也有提醒程序员当前代码中可能会出现异常,小心!
public static void test(int a , int b) throws Exception {
//除数不能为0,所以可能在b被赋值为0时就会出现运行异常,可以选择捕捉或者抛出
int ret = a / b ;
//如果代码被捕捉则会继续执行下面代码,如果选择抛出则会最终抛给JVM之后终止代码
System.out.println("代码继续执行......");
}
}