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

  • 相关阅读:
    global mapper合并多个tif影像
    arcgis 10.2 licence manager无法启动
    Error C2079 'CMFCPropertySheet::m_wndOutlookBar' uses undefined class 'CMFCOutlookBar'
    家里的技嘉B360主板win10 uefi系统安装
    vc 6.0项目转为vs 2017项目遇到 的问题
    PPT学习笔记
    git拉取分支
    将本地源码推向gitee码云
    java反编译工具使用记录
    node.js install and cecium apply
  • 原文地址:https://www.cnblogs.com/tangg/p/13267197.html
Copyright © 2020-2023  润新知