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

  • 相关阅读:
    前端解决跨域问题的8种方案(最新最全)
    javascript中“use strict”的好处和坏处
    转载 :请描述一下 cookies,sessionStorage 和 localStorage 的区别?
    七天学会nodejs
    js中的类、继承、闭包
    转:浏览器内核、渲染引擎、js引擎
    html中position定位问题
    html浏览器的兼容问题
    css命名规则
    搭建keepalived遇到的问题
  • 原文地址:https://www.cnblogs.com/tangg/p/13267197.html
Copyright © 2011-2022 走看看