zoukankan      html  css  js  c++  java
  • 15.异常处理

    1. 什么是异常

      1. 程序执行产生了非预期的结果(突然下降冰雹,天气预报说是晴天),此时程序会终止运行

      2. 异常的体系结构

      3. 说明
        根接口是Throwable
        异常(exception):通常发生后可以处理(可保证程序的正常执行)
        运行时异常:系统异常
        自定义异常:根据业务需要自己定义的异常
        可自定义系统异常(继承RuntimeException)
        可自定义普通异常(继承Exception)
        错误(Error):一般指编译时,语法不对产生的,编译都不能通过更不用谈执行了

    2. 常用系统异常有那些
      ArithmeticException 算术异常类,如以零做除数
      ArrayIndexOufOfBoundsException 数组下标越界异常
      NullpointerException 空指针异常
      ClassNotFouundException 不能加载所需的类
      IOException 输入输出异常
      SQLException 操作数据库异常
      FileNotFoundException 文件末找到异常
      llegalArgumentException 非法的参数异常

    3. 如何自定义异常类

      1. 可自定义系统异常(继承RuntimeException)

      2. 可自定义普通异常(继承Exception)

      3. 它们的区别
        前者处理异常的方式只有:抛出,抓住
        后者多一种方式:JVM处理(建议使用后者)

    4. 什么是异常处理

      1. 对可能发生的异常行为进行处理
    5. 异常处理的作用

      1. 完善代码功能(有漏洞就会有异常),保证程序的正常运行
    6. 如何使用异常处理(默认是JVM处理)

      1. 抛出异常,让调用者来处理
        在方法名后抛出
        关键字:throws
        语法
        方法的定义 方法名 throws 异常类名1,…,异常类名n{

         	}
          说明
         	 调用此方法时需要解决异常
         		 继续抛出
         			
         		 使用try-catch语句块
         			 
         		 如果是系统异常,什么都不做交给JVM处理
         			 
         	 我们需要抛出的一般是自定义异常
        

        在方法体内抛出
        关键字:throw
        语法
        throw 异常对象
        说明
        如果抛出异常对象是自定义异常就需要解决异常
        继续抛出
        使用try-catch语句块
        图解

         	 如果抛出的异常对象是系统异常,可什么都不做交给JVM处理
         		 
         	 通常是:new 异常类型(变量数据+"异常信息");这样的形式构造异常对象
         	 通用系统异常类型就用,节省工作量
         		 如:IllegalArgumentException
        
      2. 抓住异常,直接处理掉异常
        执行流程
        try是必须的:程序执行try中语句块时,一旦发生异常,try中剩余的代码不会执行
        如果有catch(finally)至少有一个
        先判断发生的异常对象是否这catch捕获的异常对象或是其子类
        如果是就进行catch语句块
        如果不是就跳转到下个catch语句块进行相同的操作
        如果有finally(catch)至少有一个
        无论如何总会执行
        处理异常的编码思路
        打印异常信息,方便弄清问题所在
        异常对象.printStackTrace()打印堆栈信息
        异常完整类名:异常信息
        发生异常的起始位置
        如果只想获取异常信息:异常对象.getMessage()
        输出提示,并根据需求处理此异常
        编码方式
        trach-catch:抓住异常并处理
        语法
        try{
        可能发生异常的代码段;
        }catch(异常类型变量){
        异常处理操作;
        }…
        catch(异常类型变量){
        异常处理操作;
        }
        说明
        可以有多个catch语句块

         		 多个catch语句块时,根据异常对象的层级关系从小到大写(这样代码才合理)
         			 
         		 非层级关系的异常对象可合并一起写,减少catch语句块个数
         			 
         		 选择需要异常处理的代码块,按alt+shift+z可快速构建try-catch块
         			 
          trach-catch-finally:抓住异常并处理,最后释放相应的资源
         	 语法
         		try{
         		
         		}catch(异常类型 变量){
         		
         		}
         		…
         		catch(异常类型 变量){
         		
         		}finally{
         			释放资源的代码;
         		}
         	 说明
         		 不可有多个finally
         		 从上到下,都要执行的代码放在finally块中(如:关闭流)
         			 
         		 除非你手动退出JVM,否则在JVM终止程序前总会执行finally语句块的(一般不会这样做)
         			 
         		 虽然try可只与finally组合使用,没意义(因为没异常处理呀)
        
      3. 让JVM处理异常
        终止程序执行
        在控制台输出堆栈信息
        异常完整类名:异常信息
        发生异常的起始位置
        图解

    7. 说明

      1. 程序中有异常必须处理,不处理就是错误(编译不通过)

      2. 处理异常总共3种方式,自行选择(如果是自定义普通异常只有2种选择)

      3. 子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类(解释如下)

        1. 子类不能抛出父类没有的异常
        2. 如果被重写的方法没有异常抛出
          那么子类的方法绝对不可以抛出异常
          如果子类方法内有异常发生,那么子类只能try,不能throws
      4. 如何选择处理异常的方式

        1. 如果想让程序继续运行选择抓住异常
        2. 如果只是想看异常信息选择抛出异常
          首选JVM处理方式
          次选抛出异常
      5. final,finally,finalize的区别

        1. final:修饰类或类成员
        2. finally:异常处理的语句块
        3. finalize:Object定义的垃圾回收机制的方法
      6. finally与return混合使用时,return如何返回

        1. 如下代码输出结果是?
          1. 结果是:5
          2. 分析
            1. return的作用是:结束方法调用或返回值
            2. 没有异常,程序会走try,会走finally
              1. 执行try:a变成了2,此时return a只起到返回值的作用(把结果放进函数栈),没结束方法
              2. 执行finally:a变成了5,此时return a既返回值,又结束方法调用,所以最后结果是5
            3. 扩展
              1. 如果注释finally后面return语句,输出结果就是2
              2. 如果在a+=1后面抛出异常,throw new Exception();需要删除 return a;语句输出结果就是7
  • 相关阅读:
    iOS利用通知(NSNotification)进行传值
    yum gd linux
    discuz搬家
    快速上传到rackspace cdn工具turbolift swift 安装
    linux 文件属性、权限、所有人、所属组
    Tar压缩文件
    lamp安装手稿
    Mysql导出导入相关操作记录
    How to Install a Language Pack
    centos下开启htaccess
  • 原文地址:https://www.cnblogs.com/River111/p/9616590.html
Copyright © 2011-2022 走看看