java异常体系

异常

异常体系

Throwable

         Error
         Exception    -->RuntimeException    &    非RuntimeException

异常就是程序出现了不正常的情况

处理

Error:严重问题,一般不需要处理,如StackOverflowError(例如:递归,或不断创建线程时可能会出现)、OutOfMemoryError(例如:方法区无法满足内存分配需求时)

Exception:称为异常类,它表示程序本身可以处理的问题

  1. RuntimeException 运行时异常,当运行出现问题后,需要我们修改代码,如NullPointerException、IndexOutOfBoundsException,都是RuntimeException及其⼦类
  2. 非RuntimeException ,编译时异常,编译时就需要处理,否则程序不能通过编译,就更不能正常运行了,如IOException、SQLException,都是Exception及其⼦类,这些异常是⼀定需要try catch捕获的
JVM的默认处理方案

如果程序出现了异常,我们没做任何处理,最终JVM会做默认处理

  1. 把异常的名称,异常原因及异常出现的位置等信息输出在控制台
  2. 程序停止执行
try、catch处理
try{
    //可能出现异常的代码;
}catch{
    //异常的处理代码;
}

执行流程:程序从try里面的代码块开始执行,出现异常会自动生成一个异常类对象,该对象会被提交给java运行时系统,当Java运行时系统接收到异常对象时,会到catch中去找匹配的异常类,找到后进行异常的处理,执行完毕后程序继续往下执行。

throws处理
throws 异常类名;//跟在方法的括号后面

抛出异常,谁调用谁处理

Throwable的成员方法

先给给出栗子:

public class Test {
    public static void main(String[] args) {
        int[] a={1,2,3};
        try{
            System.out.println(a[6]);
        }catch(ArrayIndexOutOfBoundsException e){
            System.out.println(e.getMessage());
            System.out.println("___________________");
            System.out.println(e.toString());
            System.out.println("___________________");
            e.printStackTrace();
        }
    }

}
/*
运行结果如下:
6
___________________
java.lang.ArrayIndexOutOfBoundsException: 6
___________________
java.lang.ArrayIndexOutOfBoundsException: 6
	at test.Test.main(Test.java:7)

Process finished with exit code 0
*/
  1. getMessage() 返回throwable的详细消息字符串
  2. toString() 返回此可抛出异常的简短描述
  3. printStackTrace() 把异常的错误信息输出在控制台
自定义异常throw
public class 异常类名 extends Exception{
    无参构造;//没有错误信息
    带参构造;//使用supper传递错误信息
}
throw new 自定义异常;
throw和throws的区别

throws:用在方法声明的后面,跟的是异常的类名;表示抛出异常,由该方法的调用者来处理;表示出现异常的一种可能性,并不一定会发生这种异常;

throw:用在方法体内,跟的是异常对象名;表示抛出异常,由方法体的语句处理,执行throw一定抛出了某种异常

参考四种常见异常

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值