chap13-异常


一.概念

  • 异常:程序运行过程中出现的非正常情况
  • 异常处理的必要性:任何程序在运行过程中都会出现大量的非正常情况,如果没有正确的处理异常情况,给用户带来损失,或者不必要的麻烦。
  • 异常的处理:预先准备一段代码,在异常发生时,执行此代码。

二.异常的分类

  • Throwable:java中所有异常和错误的父类

    • 位置:java.lang包

    • 常用方法:

        getMessage();返回详情信息
        printStackTrace();打印堆栈信息
      
    • 结构图
      在这里插入图片描述

  • Error:错误

    • 特点:仅仅依靠程序无法处理的问题,如硬件问题、jvm问题、逻辑问题

    • 例子

        java.lang.StackOverflowError;当应用程序递归太深而发生的堆栈溢出,抛出的错误
      
  • Exception:异常

    • 特点:可以处理
    • 分类:
      • 非RuntimeException:非运行时异常

        • 发生在程序编译时期的异常,必须处理掉;又称编译时异常,受查异常,已检查异常

        • Exception的子类中除了RuntimeException的所有子类,包括子类的子类

        • 例子

            java.lang.ClassNotFountException;类未找到异常
          
      • RuntimeException;运行时异常

        • 编译时不报错,运行时报错,可以处理,也可以不处理;又称未未检查异常

        • Exception下Runtime及其子类

        • 例子:

            java.lang.NullPointerException:空指针异常
            java.lang.ArrayIndexOutOfBoundsException:数组下标越界异常
            java.lang.ClassCastException:类型转换异常
            java.util.InputMismatchException:输入不匹配异常
            java.lang.ArithmeticException:算数异常
            ....			  
          

三.异常的产生

  • 自动产生异常:当程序遇到可能出现错误的代码,会发生异常
  • 手动产生异常:
    • 位置:方法内部

    • 语法

        throw 异常对象;//手动抛出异常
        //new xxxException();没有异常信息
        //new xxxException(String s);s代表异常的详细信息 
      
    • 作用:相当于return,结束当前方法的执行

四.异常的传递

  • 异常具有传递性:按照调用链的方向(main方法—>m1方法—>m2方法---->m3方法)反向传递(m3—>m2—>m1---->main),最终交给JVM处理,JVM默认打印堆栈信息

五.异常处理

  • 消极处理
    • 语法:声明异常

        修饰符 返回值类型 方法名 (参数列表) throws 异常类型1,异常类型2.....{
        		//产生异常
        }
      
    • 作用:可以保证程序编译通过

    • 效果:消极处理异常的方式是不负责任的处理方式,把异常交给调用者处理,并不能解决程序因为异常而终止的结果

  • 积极处理:
    • 语法:捕获异常

        try{
        	//可能发生异常的代码
        } catch(异常的类型 异常名){
        	//异常处理
        }
      
    • 注意

      • catch可以有多个,产生的异常类型依次对比catch()中异常的类型,对比成功执行当前catch块
      • catch捕获异常存在多态,子类异常写在上面,父类异常写在下面
      • 可以获取任何没有发生的运行时异常,不可以试图捕获没有发生的编译时异常
    • finally

        try{
        	//可能产生的异常
        }catch{
        	//异常处理
        }finally{
        	//无论异常是否发生都必须执行的代码
        }
      
      • 作用:关闭资源
      • 注意:开发中通常不把return放在finally中
    • trycahch执行条线(结构)

        try{}catch(){}
        try{}catch(){}catch(){}...
        try{}catch(){}...finally{}
        try{}finally{}
        try{try{}catch(){}...finally{}}catch(){}
        try{}catch(){try{}catch(){}...finally{}}
        try{}catch(){}...finally{try{}catch(){}...finally{}}
      

六.自定义异常

//自定义异常类型继承Exception及其子类---运行时异常RuntimrException及其子类
class 类名 extends 异常类{
		//无参构造方法
		public 类名 (){}
		//有参构造方法---给异常详情信息赋值
		public 类名(String message){
			super(message);
		}
}

七.方法覆盖

  • 方法覆盖初级版

      方法名相同,参数列表相同,返回值类型相同,访问修饰符相同或更宽
    
  • 方法覆盖进阶版

      方法名相同,参数列表相同,返回值类型相同,访问修饰符相同或更宽
      子类不能抛出比父类更大的异常(与运行时异常无关)
    
  • 方法覆盖终极版

      方法名相同,参数列表相同,访问修饰符相同或更宽
      子类不能抛出比父类更大的异常(与运行时异常无关)
      子类的返回值可以是父类返回值的子类和本身
    

 
 
 
 

看完如果对你有帮助,感谢点赞支持!
                                           在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值