java 基础 - 异常

异常

  1. Throwsble:总父类
  2. Error:错误
    • 无法提前避免和解决
    • 通常由设备或内存问题导致
  3. Exception:异常
    • 可以提前避免或解决
    • 通常由代码导致
    • RuntimeException:运行异常,也称未检查异常,未检异常等
      • 编译不报错,运行出错
      • 可以选择性的处理
      • java.lang.ArrayIndexOutOfBoundsException:数组下标越界
      • java.lang.StringIndexOutOfBoundsException:字符串下标越界异常
      • java.lang.IndexOutOfBoundsException:下标越界异常
      • java.lang.NullPointerException:空指针异常
      • java.lang.ClassCastException:类型转换异常
      • java.lang.NumberFormatException:数据类型转换异常
      • java.lang.Arithm eticException:数学运算异常
      • 运行时异常都属于java.lang包
    • 非运行时异常:也称已检查异常,已检异常等
      • 编译就会报错
      • 必须作出处理
      • 只要不是运行时异常。则一定是非运行时异常

异常的产生

  1. 自然产生:编译或执行到有问题的代码时,会自动产生异常
  2. 手动产生:
	throw 异常对象;
  • 位置:方法内部
  • 执行:当执行或编译到该语句时,会抛出一个异常,程序终止
    • 该语句同一直属作用范围内,下方不可存在其他有效语句
      原因:无法执行

可以使程序停止运行

  1. 代码运行完毕
  2. 执行到异常
    3.在非递归的情况下运行到return;
	public class Test2 {
    public static void main(String[] args) {
        System.out.println("main开始");
        ma();
        System.out.println("main结束");
    }

    public static void ma(){
        System.out.println("ma开始");
        //手动抛出异常
        throw new RuntimeException();

        //System.out.println("ma结束");

    }

}

异常处理:消极处理

  1. 上抛异常,消极处理
访问修饰符 返回值类型 方法名()throws 异常类名1,异常类名2,..{
    
}
  • 特点:方法自身不处理异常,讲异常上抛给调用者,该解决方式无法根治问题,如果异常最终上抛至虚拟机,则程序任然强制终止
  • 使用
    1. 上抛父类异常可以解决处理内部的子类异常
    2. 调用者需要处理的异常类型由throws声明决定

throw和throws的区别:

  1. 位置:throw写在方法内部,throws写在方法声明处
  2. 作用:throw是抛出制造异常,throws是上抛解决异常
	public static void main(String[] args)throws Exception {
        System.out.println("main开始");
        mb();//Exception
        System.out.println("main结束");
    }

    public static void mb()throws Exception{
        //抛出一个非运行时异常
        throw new ActivationException();
    }
  1. try-catch:积极处理
try{
    //有可能出现异常的代码
}catch(有可能匹配的异常类型 引用名){
    //处理代码
}   
  • 特点:将有可能出现异常的代码放入try中,当发生异常时,如果有对应的catch块解决异常,则异常被消化,程序可以继续向下执行
  • 使用:
    1. 若catch匹配不成功,则程序仍然终止
    2. catch 块可以存多个
    3. 父类异常可以匹配子类异常
    4. 为了保证try-catch结构一定执行成功,通常会在最下方catch一个Exception
    5. 父类catch块必须写在子类catch块下方
    • 原因:catch块自上而下匹配且最多执行一个,父类catch块写在上方会导致子类catch块无效

finally

通常结合try-catch块使用,用于关于释放资源

try{

}catch(){

}finally{
}
  • 写在try-catch结构最下方

使用

  1. 不受try-catch影响,无论如何都会执行
  2. 可以和try单独使用,表示try中代码无论执行结果怎么样finally中都会执行
  3. 不可以和catch单独结合
  4. 不可以独立存在
  5. 当try-catch-finally出现rryurn 语句冲突时优先执行finally
    方法补充:

为了方便查看和处理异常,Throwable中提供了对应方法:

  1. String getMessage():获取异常的详细信息
  2. void printStackTrace():输出异常的追栈信息(异常类型、详细信息、触发位置)
		try {
            System.out.println(10 / 0);
        } catch (Exception e) {
            System.out.println("未知异常!");
            System.out.println("详细信息:" + e.getMessage());
            System.out.println("追栈信息:");
            e.printStackTrace();
        }

自定义异常

  1. 运行时:继承RuntimeException,提供无参有参构造(调用父类有参构造给Throwable中的详细信息属性赋值即可)

    /**
     * 运行时异常
     */
    public class MyRuntimeException extends RuntimeException {
        public MyRuntimeException(){
    
        }
    
        public MyRuntimeException(String message) {
            super(message);
        }
    
    }
    
  2. 非运行时异常:继承Exception,提供有参无参构造

    /**
     * 非运行时异常
     */
    public class MyException extends Exception {
        public MyException(){
    
        }
    
        public MyException(String message) {
            super(message);
        }
    
    }
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值