java异常

关键字

try: 抛出异常

catch: 捕获异常

finally: 无论如何都会执行的代码,如果代码中有System.exit(int status);则程序终止不会执行,status为0则表示程序正常终止,非0表示程序异常终止;
如果finally中有终端方法的return语句,则最终都会return finally中的值

必须组合使用,try可以跟多个catch,也可以不跟catch,跟一个finally。

常见的运行时异常: java.lang包下
ArithmeticException: 数学运算异常
NumberFormatException: 数字格式化异常
ArrayIndexOutOfBoundsException: 数组下标越界异常
NullPointerException: 空指针异常
ClassCastException: 类型转换异常
ArrayStoreException: 数组中包含不兼容的值的异常
java.util. InputMismatchException: 输入格式错误的异常
FileNotFoundException: 文件未找到异常

throw&throws:
throws:

  • 当一个方法没有能力处理异常或者不想处理异常,则可以在方法后跟一个throws将异常抛出,由调用该方法的方法处理异常。可以抛出多个, 当抛是非检查异常时,编译器不会强制要求调用方法进行异常处理
  • 当一个类重写父类方法抛出了一个异常,子类中重写方法中所抛出的异常必须时父类抛出的同类(兄弟类)或其子类
/**
 *父类
 */
public class Father {
    public void test() throws HotelException{
        throw new HotelException();
    }
}
/**
 * 子类
 */
public class Son extends Father {
    @Override
    public void test() throws RuntimeException {
    }
}

throw:
语法:throw new 异常类型(String message)
throw和return都会终止操作故不能同时出现
throw抛出异常后的处理方案:

  1. 自己try…catch…
  2. 在方法声明处throws抛出(可以跑出异常类型相同类型或者父类)

自定义异常

  • 继承exception或其子类,在构造方法中调用父类的构造并传参。
  • 自定义异常必须经过抛出后才能进行捕获、处理
public class HotelException extends Exception {
    public HotelException(){
        super("酒店不允许小于18岁大于80岁的人员单独入住");
    }
}

异常链

多个方法依次抛出异常,可以用异常链将异常都保存下来,一次性处理

public class TryDemo {
    public static void main(String[] args) {
        TryDemo t = new TryDemo();
        try {
            t.testThree();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void testOne() throws HotelException{
        throw new HotelException();
    }

    public void testTwo() throws Exception {
        try {
            testOne();
        }catch (Exception e){
            //避免异常丢失的第一种方法:在throw新异常时,在参数中加上之前的异常
            throw new Exception("我是two中的异常",e);
        }
    }
    public void testThree() throws Exception {
        try {
            testTwo();
        } catch (Exception e) {
            //避免异常丢失的第二种方法,新生命一个异常,调用initCause将之前的异常封到新异常
            Exception e1 = new Exception("我是three中的异常");
            e1.initCause(e);
            throw(e1);
        }
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值