异常总结

Java异常总结

异常:指的是程序在执行过程中,出现的非正常的情况下,最终导致jvm的非正常停止。Java处理异常的方式是中断处理。

异常的根类是java.lang.throwable,分为errorexception以及runtimeException三类,error是程序运行时出错,不可避免,exception是编译错误,必须throws给方法调用者进行处理。runtimeexception可以不用抛出throws,但是也会抛给方法调用者进行处理。

throw和throws都需要抛出异常给调用者,但是他们的编译要求不同,只需要throw的异常是运行时异常,不可避免的,不强制要求catch,属于我们的代码问题,应该由编写者进行规避,如果是编译时异常,那么必须进行throws抛出,然后进行处理

在这里插入图片描述

Throwable中的常用方法:

  • public void printStackTrace():打印异常的详细信息。

    包含了异常的类型,异常的原因,还包括异常出现的位置,在开发和调试阶段,都得使用printStackTrace。

  • public String getMessage():获取发生异常的原因。

    提示给用户的时候,就提示错误原因。

  • public String toString():获取异常的类型和异常描述信息(不用)。

异常处理流程

在这里插入图片描述

throw异常

throw异常是运行时异常,用户在使用时产生的代码错误,其根本原因是我们的程序逻辑未考虑完全,需要进行完善。

栗子:

声明了一个runtimeException:

package anomalyCode.demo3;
/*
*自定义异常必须继承异常类,异常类有编译时异常:Exception和
* 运行时异常:RuntimeException
* */
public class AgeOutOfBound extends runtimeException{
    public AgeOutOfBound() {
        System.out.print("Sorry,age out of bound !");
    }
}

然后可以不使用throws抛出改方法:

package anomalyCode.demo3;

public class AgeInput {
    public static void checkAage(int age) {    //用关键字throws指明调用此方法可能抛出的异常
        if(age>0 && age<200){
            System.out.print("right!");
        }else{
            System.out.println("---------------");
            throw new AgeOutOfBound();        //抛出异常用关键字throw
        }
    }
}

最后调用时catch异常:

package anomalyCode.demo3;
/*1.异常分为编译时异常和运行时异常,那么编译时异常必须
*在程序中处理,即必须有个catch方法。必须通过throws抛出给方法调用者进行处理,
* 当我们进行自定义异常时,其属于编译时异常,需要throws抛出。
* 2.运行时异常则是不需要throws进行抛出,只需要声明即可。
* 3.捕获异常后,程序会继续执行。
*
* */
public class demo {
    public static void main(String[] args) {
        int age = 300;
        try {
            AgeInput.checkAage(age);
        } catch (AgeOutOfBound e) {
            System.out.println("Are you rellly :" + age + " years old?");
        }finally {
            System.out.println("执行了finall");
        }
        System.out.println("hello");
    }
}

throws抛出异常

throws是编译时异常,必须在方法后面进行抛出,可以同时抛出多个异常给方法调用者,直至找到对应的catch。

声明了一个exception:

package anomalyCode.demo3;
/*
*自定义异常必须继承异常类,异常类有编译时异常:Exception和
* 运行时异常:RuntimeException
* */
public class AgeOutOfBound extends Exception{
    public AgeOutOfBound() {
        System.out.print("Sorry,age out of bound !");
    }
}

然后必须使用throws抛出改方法:

package anomalyCode.demo3;

public class AgeInput {
    public static void checkAage(int age) throws AgeOutOfBound {    //用关键字throws指明调用此方法可能抛出的异常
        if(age>0 && age<200){
            System.out.print("right!");
        }else{
            System.out.println("---------------");
            throw new AgeOutOfBound();        //抛出异常用关键字throw
        }
    }
}

最后调用时catch异常:

package anomalyCode.demo3;
/*1.异常分为编译时异常和运行时异常,那么编译时异常必须
*在程序中处理,即必须有个catch方法。必须通过throws抛出给方法调用者进行处理,
* 当我们进行自定义异常时,其属于编译时异常,需要throws抛出。
* 2.运行时异常则是不需要throws进行抛出,只需要声明即可。
* 3.捕获异常后,程序会继续执行。
*
* */
public class demo {
    public static void main(String[] args) {
        int age = 300;
        try {
            AgeInput.checkAage(age);
        } catch (AgeOutOfBound e) {
            System.out.println("Are you rellly :" + age + " years old?");
        }finally {
            System.out.println("执行了finall");
        }
        System.out.println("hello");
    }
}

使用try…catch后,主程序能够继续向下执行,但是调用程序(子程序中断)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值