java异常体系

java异常体系

1.异常的分类

在这里插入图片描述

1.1 运行时异常

1.2 编译时异常

在这里插入图片描述

2.异常处理

2.1 JVM处理异常的方式

如果出现异常我们没有处理。JVM会帮我们进行处理,它会把异常的类型、原因以及发生的位置(包、类、方法)显示在命令行,并终止程序,异常后面的代码将不在执行

2.2 自己处理

2.2.1 捕获处理
1.try…catch 语句
try{
    可能出现问题的代码
}catch(异常类  对象){
    处理异常
}
public class ExceptionDemo{
    public static void main(String[] args){
        try{
            System.out.printlm(2/0);
        }catch(AritnmeticException e ){
            System.out.println("除0操作")}
    }
}

try…catch的执行顺序

首先执行try语句,如果发现异常,异常下面 的代码将不再执行,直接跳入catch语句中,catch语句结束后,整个try…catch结束。若没有发现异常,try语句执行结束后,try…catch语句直接结束,不执行catch 语句

处理多个异常方法

1.多个try… catch 组合

public class ExceptionDemo{
    public static void main(String[] args){
        try{
            String S=null;
            System.out.println(S.length);
        }catch(NullpointException n){
            System.out.println("空指针异常");
        }
        try{
            int[] arr = new int[4];
            System.out.println(arr[5]);
        }catch(ArrayIndexoutofBoundsException a){
            System.out.println("数组越界异常");
        }
    }
}

2.一个try 多个catch

public class ExceptionDemo{
    public static void main(String[] args){
        try{
            String S=null;
            System.out.println(S.length);
            
            int[] arr = new int[4];
            System.out.println(arr[5]);
        }catch(NUllPointException e){
            System.out.println("空指针异常");
        }catch(ArrayIndexoutofBoundsException a){
            System.out.println("数组越界异常");
        }
    }
}

多个catch之间的执行顺序

1)多个catch之间可以由继承关系 ,若存在继承关系,父类异常必须放在子类后

2)平级之间没有异常

若try中的异常处理在catch中没有出现,程序依然会出现异常

解决办法:

catch(Exception e){//使用父类!
    System.out.println("出现异常!");;
}
2.try…catch…finally 语句

finally 组合try…catch 语句使用 ,用于释放资源的收尾工作,无论try…catch 语句如何,finally中的语句一定会被执行。

 try {
            System.out.println(2/0);
        } catch (ArithmeticException e) {
            e.printStackTrace();
        }finally{
            System.out.println(6666);
        }
}

2.3 抛出去

当我们不想处理,或者没有能力处理异常时,我们可以选择抛出异常,谁调用,谁抛出

2.3.1.throws 关键字

用在方法上 ;使用throws关键字在方法声明时抛出异常,

package www;
/** 
 * @Name:抛出异常
 * @Author:ZYJ
 * @Date:2019-05-09-20:46
 * @Description:throws  处理异常
 */
public class ExceptionDemo {
    public static void main(String[] args) {
       try{
           System.out.println(calculate(10,0));
       }catch (Exception e){
           e.printStackTrace();
       }
    }
    public static int  calculate(int x,int y)  throws Exception{
        return x/y;
    }
}

主方法抛出异常:主方法本身也是一个方法,所有主方法也可以使用throws进行异常抛出,这个时候如果产生了异常就会交给JVM处理

package www;

/**
 * @Name:主方法抛出异常
 * @Author:ZYJ
 * @Date:2019-05-09-20:55
 * @Description:
 */
public class ExceptionDemo2 {
    public static void main(String[] args) throws Exception {
        System.out.println(calculate(10,0));
    }
    public static  int calculate(int x,int y)throws Exception{
        return x/y;
    }
}
2.3.2 throw 关键字

throw直接编写在语句中,表示认为进行异常的抛出,如果异常类对象实例化不希望由JVM产生而由用户产生,就可以使用throw来完成

package www;
/**
 * @Name:throw 关键字使用
 * @Author:ZYJ
 * @Date:2019-05-09-21:00
 * @Description:
 */
public class ExceptionDemo3 {
    public static void main(String[] args) {
        try{
            throw new Exception("抛个异常玩~~~~");
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

2.3.3 throwable类

定义

  • public class Throwable extends Object implements Serializable
    
  • Java语言中所有错误和异常都是Throwable类。 只有作为此类(或其一个子类)的实例的对象由Java虚拟机抛出,或者可以由Java throw语句抛出。 类似地,只有这个类或其子类可以是catch子句中的参数类型。 对于异常,编译时检查的目的Throwable和任何子类Throwable ,是不是也无论是子类RuntimeExceptionError被视为检查的异常。 常用方法

常用方法

String getMessage();//异常原因
String toString();//异常类型及原因
void printStackTrace();//异常类型、原因、位置

void printStackTrace() 打印的内容与JVM处理异常打印的内容相同,但JVM处理异常后的语句不再执行,该方法执行后,这个异常后的内容课正常执行;

3.Exception 类与RuntimeException 类的区别

1.Exception 类是RuntimeException 类的父类,使用Exception 定义的异常都要求必须使用异常处理,而RuntimeException 定义的异常可以由用户选择性的来进行异常处理

2.常见的RuntimeException :ClassCastException(类型转换异常) ,NullPointerException(空指针异常)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值