zoukankan      html  css  js  c++  java
  • java基础-JAVA的异常体系

    Java的异常是class,它的继承关系如下:

    image-20200314133413440

    Throwable是异常体系的根,它继承自ObjectThrowable有两个体系:ErrorExceptionError表示严重的错误,程序对此一般无能为力

    image-20200314134027978

    Java标准库定义的常用异常包括:

    Exception
    │
    ├─ RuntimeException		(不需要捕获)
    │  │
    │  ├─ NullPointerException
    │  │
    │  ├─ IndexOutOfBoundsException
    │  │
    │  ├─ SecurityException
    │  │
    │  └─ IllegalArgumentException
    │     │
    │     └─ NumberFormatException
    │
    ├─ IOException
    │  │
    │  ├─ UnsupportedCharsetException
    │  │
    │  ├─ FileNotFoundException
    │  │
    │  └─ SocketException
    │
    ├─ ParseException
    │
    ├─ GeneralSecurityException
    │
    ├─ SQLException
    │
    └─ TimeoutException
    

    捕获异常

    捕获异常使用try...catch语句,把可能发生异常的代码放到try {...}中,然后使用catch捕获对应的Exception及其子类:

    在方法定义的时候,使用throws Xxx表示该方法可能抛出的异常类型。调用方在调用的时候,必须强制捕获这些异常,否则编译器会报错。

    比如

    String.getBytes(String)方法定义是:

    public byte[] getBytes(String charsetName) throws UnsupportedEncodingException {
        ...
    }
    

    定义了可能的 UnsupportedEncodingException异常,因此在使用 字符串对应的 .getBytes()方法时候,就必须要捕获可能出现的异常

    捕获异常的方式可以在:

    • 在使用了可能抛出异常的方法或者函数 的 函数内部,如 在 toGBK()函数里面使用到了 s.getBytes()方法
      使用 try catch语句,捕获对应的Exception及其子类

      import java.io.UnsupportedEncodingException;
      import java.util.Arrays;
      
      public class Main {
          public static void main(String[] args) {
              byte[] bs = toGBK("中文");
              System.out.println(Arrays.toString(bs));
          }
      
          static byte[] toGBK(String s) {
              try {
                  // 用指定编码转换String为byte[]:
                  return s.getBytes("GBK");
              } catch (UnsupportedEncodingException e) {
                  // 如果系统不支持GBK编码,会捕获到UnsupportedEncodingException:
                  System.out.println(e); // 打印异常信息
                  return s.getBytes(); // 尝试使用用默认编码
              }
          }
      }
      
    • 在声明函数的时候,使用 throws Xyz语句声明可能抛出的异常
      再在调用这个函数的时候,使用 try catch 语句

      import java.io.UnsupportedEncodingException;
      import java.util.Arrays;
      
      public class Main {
          public static void main(String[] args) {
              try {
                  byte[] bs = toGBK("中文");
                  System.out.println(Arrays.toString(bs));
              } catch (UnsupportedEncodingException e) {
                  System.out.println(e);
              }
          }
      
          static byte[] toGBK(String s) throws UnsupportedEncodingException {
              // 用指定编码转换String为byte[]:
              return s.getBytes("GBK");
          }
      }
      
      

    可见,只要是方法声明的Checked Exception,不在调用层捕获,也必须在更高的调用层捕获。所有未捕获的异常,最终也必须在main()方法中捕获,不会出现漏写try的情况。

  • 相关阅读:
    第三方驱动备份与还原
    Greenplum 解决 gpstop -u 指令报错
    yum安装(卸载)本地rpm包的方法(卸载本地安装的greenplum 5.19.rpm)
    Java JUC(java.util.concurrent工具包)
    netty 详解(八)基于 Netty 模拟实现 RPC
    netty 详解(七)netty 自定义协议解决 TCP 粘包和拆包
    netty 详解(六)netty 自定义编码解码器
    netty 详解(五)netty 使用 protobuf 序列化
    netty 详解(四)netty 开发 WebSocket 长连接程序
    netty 详解(三)netty 心跳检测机制案例
  • 原文地址:https://www.cnblogs.com/tangg/p/13267197.html
Copyright © 2011-2022 走看看