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的情况。

  • 相关阅读:
    Spring Boot 使用 Dom4j XStream 操作 Xml
    Spring Boot 使用 JAX-WS 调用 WebService 服务
    Spring Boot 使用 CXF 调用 WebService 服务
    Spring Boot 开发 WebService 服务
    Spring Boot 中使用 HttpClient 进行 POST GET PUT DELETE
    Spring Boot Ftp Client 客户端示例支持断点续传
    Spring Boot 发送邮件
    Spring Boot 定时任务 Quartz 使用教程
    Spring Boot 缓存应用 Memcached 入门教程
    ThreadLocal,Java中特殊的线程绑定机制
  • 原文地址:https://www.cnblogs.com/tangg/p/13267197.html
Copyright © 2011-2022 走看看