zoukankan      html  css  js  c++  java
  • 异常

    一、概念

    • 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理
    • 异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行

    二、体系

    异常机制其实是帮助我们找到程序中的问题,异常的根类是java.lang.Throwable,其下有两个子类:java.lang.Errorjava.lang.Exception,平常所说的异常指java.lang.Exception

    image-20200508174215079

    Throwable中的常用方法:

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

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

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

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

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

    分类:

    • 编译器异常
    • 运行期异常

    三、解析异常产生的过程

    四、异常的处理

    1. throw new 异常类名(参数);

      • throw将问题描述类即异常进行抛出,也就是将问题返回给该方法的调用者
      • 对于调用者来说,该怎么处理呢?一种是进行捕获处理,另一种就是继续讲问题声明出去,使用throws 声明处理
    2. Objects非空判断

      public static T requireNonNull(T obj) :查看指定引用对象不是null

      String s = null;
      String s1 = Objects.requireNonNull("kd");
      System.out.println(s1);//kd
      String s2 = Objects.requireNonNull(s);//抛出异常
      System.out.println(s1);
      
    3. 声明异常throws:

      • 关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常)

      • 格式:修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }

    4. 捕获异常try…catch

      • 格式:

        try{
        	编写可能会出现异常的代码
        }catch(异常类型 e){
        	处理异常的代码
        	//记录日志/打印异常信息/继续抛出异常
        }
        
    5. finally 代码块

      • 格式:try...catch....finally:自身需要处理异常,最终还得关闭资源
      • 注意:
        • finally不能单独使用
        • 当只有在try或者catch中调用退出JVM的相关方法,此时finally才不会执行,否则finally永远会执行

      五、注意事项

      1. 多个异常使用捕获,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理
      2. 如果finally有return语句,永远返回finally中的结果,避免该情况
      3. 如果父类抛出了多个异常,子类重写父类方法时,字类抛出和父类相同的异常或者是父类异常的子类或者不抛出异常
      4. 父类方法没有抛出异常,子类重写父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出
      public class Fu {
          public void show01() throws NullPointerException,ClassCastException{}
          public void show02() throws IndexOutOfBoundsException{}
          public void show03() throws IndexOutOfBoundsException{}
          public void show04() throws Exception {}
      }
      
      class Zi extends Fu{
          //子类重写父类方法时,抛出和父类相同的异常
          public void show01() throws NullPointerException,ClassCastException{}
          //子类重写父类方法时,抛出父类异常的子类
          public void show02() throws ArrayIndexOutOfBoundsException{}
          //子类重写父类方法时,不抛出异常
          public void show03() {}
      
          /*
              父类方法没有抛出异常,子类重写父类该方法时也不可抛出异常。
      
           */
          //public void show04() throws Exception{}
      
          //此时子类产生该异常,只能捕获处理,不能声明抛出
          public void show04()  {
              try {
                  throw  new Exception("编译期异常");
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
      

      六、自定义异常

      异常类如何定义:

      1. 自定义一个编译期异常: 自定义类 并继承于java.lang.Exception
      2. 自定义一个运行时期的异常类:自定义类 并继承于java.lang.RuntimeException
  • 相关阅读:
    socket.io的抽象实现:engine.io
    Juicer javascript 模板引擎
    phonegap 开发案例
    安卓升级提示 phoneGap APK软件更新提示
    搭建Titanium开发环境
    phonegap WebApp
    vue-cli 配置vue项目环境笔记
    从一张表里面查询后十条数据的前七条
    js实现文字搬运工
    MySQL —— 数据库数据备份命令 mysqlump 的使用
  • 原文地址:https://www.cnblogs.com/zx-coder/p/12852393.html
Copyright © 2011-2022 走看看