源码分析七(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类,然后

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

时间: 2024-08-02 10:57:55

源码分析七(java.lang包之IllegalArgumentException类)的相关文章

JDK源码简析--java.lang包中的基础类库

题记 JDK,Java Development Kit. 我们必须先认识到,JDK只是,仅仅是一套Java基础类库而已,是Sun公司开发的基础类库,仅此而已,JDK本身和我们自行书写总结的类库,从技术含量来说,还是在一个层级上,它们都是需要被编译成字节码,在JRE中运行的,JDK编译后的结果就是jre/lib下得rt.jar,我们学习使用它的目的是加深对Java的理解,提高我们的Java编码水平. 本系列所有文章基于的JDK版本都是1.7.16. 本节内容 在本节中,简析java.lang包所包

Nouveau源码分析(七): 各SUBDEV/ENGINE初始化 (1)

Nouveau源码分析(七) 虽然各个SUBDEV/EGINE的初始化实际还是在nouveau_drm_load里,但还是换个标题吧. 等把各个SUBDEV/ENGINE之类的说完再换回去. 上次已经按着初始化的顺序介绍了一下各个subdev的用途,现在按顺序,首先来看VBIOS的ctor函数: // /drivers/gpu/drm/nouveau/core/subdev/bios/base.c 537 struct nouveau_oclass 538 nouveau_bios_oclass

Spring Core Container 源码分析七:注册 Bean Definitions

前言 原本以为,Spring 通过解析 bean 的配置,生成并注册 bean defintions 的过程不太复杂,比较简单,不用单独开辟一篇博文来讲述:但是当在分析前面两个章节有关 @Autowired.@Component.@Service 注解的注入机制的时候,发现,如果没有对有关 bean defintions 的解析和注册机制彻底弄明白,则很难弄清楚 annotation 在 Spring 容器中的底层运行机制:所以,本篇博文作者将试图去弄清楚 Spring 容器内部是如何去解析 b

Spring IoC 源码分析 (基于注解) 之 包扫描

在上篇文章Spring IoC 源码分析 (基于注解) 一我们分析到,我们通过AnnotationConfigApplicationContext类传入一个包路径启动Spring之后,会首先初始化包扫描的过滤规则.那我们今天就来看下包扫描的具体过程. 还是先看下面的代码: AnnotationConfigApplicationContext类 //该构造函数会自动扫描以给定的包及其子包下的所有类,并自动识别所有的Spring Bean,将其注册到容器中 public AnnotationConf

java.lang包【Object类】

基本描述: (1)Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入: (2)Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法.可以使用类型为Object的变量指向任意类型的对象 Object的主要方法介绍: package java.lang; public class Object { /* 一个本地方法,具体是用C(C++)在DLL中实现的,然后通过JNI调用.*

String源码分析之Java中的String为什么是不可变的以及replace方法源码分析

什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变. 区分对象和对象的引用 对于Java初学者, 对于String是不可变对象总是存有疑惑.看下面代码: String s = "ABCabc";

【Android实战】----从Retrofit源码分析到Java网络编程以及HTTP权威指南想到的

一.简介 接上一篇[Android实战]----基于Retrofit实现多图片/文件.图文上传中曾说非常想搞明白为什么Retrofit那么屌.最近也看了一些其源码分析的文章以及亲自查看了源码,发现其对Java网络编程及HTTP权威指南有了一个很好的诠释.一直以来,都信奉一个原则,在这个新技术日新月异的时代,如何在Java界立足,凭借的就两点: 1.基本功,包括:Java基本知识,(Java编程思想.Effective Java),Java进阶(Java虚拟机.Java设计模式).网络相关(这个时

JDK源码简析--java.util包中的工具类库

题记 JDK,Java Development Kit. 我们必须先认识到,JDK只是,仅仅是一套Java基础类库而已,是Sun公司开发的基础类库,仅此而已,JDK本身和我们自行书写总结的类库,从技术含量来说,还是在一个层级上,它们都是需要被编译成字节码,在JRE中运行的,JDK编译后的结果就是jre/lib下得rt.jar,我们学习使用它的目的是加深对Java的理解,提高我们的Java编码水平. 本系列所有文章基于的JDK版本都是1.7.16. 本节内容 在本节中,简析java.util包所包

编译andriod源码出错:java.lang.UnsupportedClassVersionError: com/google/doclava/Doclava : Unsupported

问题:java.lang.UnsupportedClassVersionError: com/google/doclava/Doclava : Unsupported update-java-alternatives -l查看需要的版本 sudo update-java-alternatives -s  java-1.7.0-openjdk-amd64