java异常处理

运行时异常与错误

java异常是运行期出现的错误

java异常的父类是Throwable,Throwable有两个子类一个是Error一个是Exception

Rrror:是错误,不是有程序员引起的错误,是大错误(可能由环境等原因导致的)

Exception是异常,是由程序员引起的错误,是小错误,可以被编译器允许的

Exception有两个分类一个是检查行异常一个是非检查性异常

检查性异常:代码写在类中就会报错,需要提起那进行预处理,否则编译报错 范围是:RuntimeException及其子类以外的类

非检查性异常:代码写在类中不会报错,可以不进行预处理,范围是:RuntimeException及其子类

java异常分类

Unchecked Exception(非检查异常)
范围:RuntimeException及其子类
经常出现的异常,可以人为处理也可以不处理
编程导致的错误,程序员的错误
例如:NullPointerException, IndexOutOfBoundsException

Checked Exception(检查异常)
范围:RuntimeException及其子类以外的异常类
方法定义后所加的Exception,必须要人为处理,否则编译报错
程序无法避免的错误,不是程序员的错误
例如:IOException, DataFormatException

 异常的处理机制

异常的声明(throws):方法告诉编译器该方法有可能发生的错误,可能抛出的异常——异常在方法声明后被抛出

异常的抛出(throw):运行时出现异常事件,生成对应的异常对象,该对象封装了异常的信息并被提交给Java运行时系统——异常在程序中被抛出

异常的捕获(catch):Java运行时系统接收到异常对象,会寻找处理异常的代码并交给他处理

如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出

如果被调方法发生异常,主调方法仍处理不了此异常,则由此方法的上层主调方法处理,如果main方法仍无法处理此异常,则抛出异常:

如当前不是主线程(main方法),则终止该线程,其他线程依然运行

如当前是主线程,则终止整个应用程序

public void method1() throws ClassNotFoundException {
        //throws声明异常,在方法的小括号和大括号中间写,如果需要声明多个异常,中间用逗号分割
        //声明异常并不是处理异常
        Class.forName("");
    }
    public void method2() throws ClassNotFoundException {
        method1();
    }
    //被调方法出现异常会抛给主调方法,如果主调方法还不处理异常就会抛给主调方法的上层方法,如果还不处理就会最终抛给main方法
    //如果还不处理,最后会发生宕机,程序停止运行。
    public void method3(){
        try {
            method2();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
public void method(){
        //try代码块中写的是可能发生异常的代码
        try{
            //try种定义的变量只能在try中使用。catch和finally中都不能使用
            int[] a = new int[5];
            //try中出现异常就会停止,后续的代码不再执行了,直接进入catch
            System.out.println(a[5]);
            //当try中没有异常,则catch中的代码就不会执行了
            System.out.println("try中代码");
        }
        //catch代码块中写的是处理异常的代码
        catch (ArrayIndexOutOfBoundsException e){
            System.out.println("catch中代码");
        }
        //try后面可以跟零个或多个catch
        catch (NullPointerException e){

        }
        //写多个catch时父异常不能写在子异常前面
        catch (Exception e) {}
        //finally代码块中写的是受保护的代码
        //try后面可以跟一个或零个finally
        finally {
            //finally是不管异常发布发生都会执行代码
            System.out.println("finally中代码");
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值