• 源码分析七(java.lang包之IllegalArgumentException类)


    一:IllegalArgumentException非法参数类,这个类继承父类RuntimeException

    1 public
    2 class IllegalArgumentException extends RuntimeException

    重载的几个构造方法都是直接调用父类的构造方法:

    //无参数构造器,默认构造器
    public IllegalArgumentException() {
        super();
        }
    
       //参数为字符串String的构造器
        public IllegalArgumentException(String s) {
        super(s);
        }
    
        //参数为String以及Throwable两个参数构造器
        public IllegalArgumentException(String message, Throwable cause) {
            super(message, cause);
        }
     
        //参数为Throwable的构造器
        public IllegalArgumentException(Throwable cause) {
            super(cause);
        }
    
        private static final long serialVersionUID = -5365630128856068164L;

    RuntimeException类是直接继承extends Exception类

    public class RuntimeException extends Exception {
        static final long serialVersionUID = -7034897190745766939L;
    
         
        public RuntimeException() {
        super();
        }
    
        
        public RuntimeException(String message) {
        super(message);
        }
    
        
        public RuntimeException(String message, Throwable cause) {
            super(message, cause);
        }
    
        
        public RuntimeException(Throwable cause) {
            super(cause);
        }

    Exception类:

    public class Exception extends Throwable {
        static final long serialVersionUID = -3387516993124229948L;
    
        
        public Exception() {
        super();
        }
    
         
        public Exception(String message) {
        super(message);
        }
    
       
        public Exception(String message, Throwable cause) {
            super(message, cause);
        }
    
         
        public Exception(Throwable cause) {
            super(cause);
        }
    }

    而Exception类是继承Throwable类

    1 //无参数构造器 
    2 public Throwable() {
    3         fillInStackTrace();
    4     }
    5 
    6 //调用native方法,底层是c或者c++语言实现
    7  public synchronized native Throwable fillInStackTrace();
    //参数为String的构造器,描述异常信息
    public Throwable(String message) {
            fillInStackTrace();
            detailMessage = message;
        }
    
    private String detailMessage;
    1 //参数为String以及Throwable的构造器 
    2 public Throwable(String message, Throwable cause) {
    3         fillInStackTrace();
    4         detailMessage = message;
    5         this.cause = cause;
    6     }
    //参数为Throwable的构造器 
    public Throwable(Throwable cause) {
            fillInStackTrace();
            detailMessage = (cause==null ? null : cause.toString());
            this.cause = cause;
        }

    再来看一下Throwable中的其他的方法:

    //异常的详细信息,就是在构造方法中封装的message
     public String getMessage() {
            return detailMessage;
        }
    

      

    //直接调用getMessage方法,返回的也是异常的描述信息  
     public String getLocalizedMessage() {
            return getMessage();
        }
    

      

    //获取这个异常对象,因为这个cause异常对象初始化的时候
    是this,就是它本身,所以如果没有变,就是null,否则是cause
    
    private Throwable cause = this;
     
    public Throwable getCause() {
            return (cause==this ? null : cause);
        }
    

      

    二:自定义异常类

    如果我们想要自定义异常类,只需要继承RuntimeException或者Exception类,然后

    在构造方法中调用父类的构造方法就可以了。

  • 相关阅读:
    继承与多态——动手又动脑
    类与对象--动手又动脑
    Go语言接口
    GO语言结构体
    GO指针
    GO函数
    GO获取随机数
    GO基础
    Go语言的%d,%p,%v等占位符的使用
    GO语言常量和变量
  • 原文地址:https://www.cnblogs.com/warrior4236/p/6653887.html
Copyright © 2020-2023  润新知