`

java.lang.class学习2--获取构造方法的过程,

阅读更多

 

    private Constructor<T> getConstructor0(Class[] parameterTypes,
                                        int which) throws NoSuchMethodException
    {
        Constructor[] constructors = privateGetDeclaredConstructors((which == Member.PUBLIC)); //获取public的构造方法
        for (int i = 0; i < constructors.length; i++) {
            if (arrayContentsEq(parameterTypes,
                                constructors[i].getParameterTypes())) {
                return getReflectionFactory().copyConstructor(constructors[i]); //返回构造方法的对象
            }
        }
        throw new NoSuchMethodException(getName() + ".<init>" + argumentTypesToString(parameterTypes));
    }

    //
    // Other helpers and base implementation
    //

    private static boolean arrayContentsEq(Object[] a1, Object[] a2) {
        if (a1 == null) {//比较构造方法的参数
            return a2 == null || a2.length == 0;
        }

        if (a2 == null) {
            return a1.length == 0;
        }

        if (a1.length != a2.length) {
            return false;
        }

        for (int i = 0; i < a1.length; i++) {
            if (a1[i] != a2[i]) {
                return false;
            }
        }

        return true;
    }



 //
    //
    // java.lang.reflect.Constructor handling
    //
    //

    // Returns an array of "root" constructors. These Constructor
    // objects must NOT be propagated to the outside world, but must
    // instead be copied via ReflectionFactory.copyConstructor.
    private Constructor[] privateGetDeclaredConstructors(boolean publicOnly) {
        checkInitted();
        Constructor[] res = null;
        if (useCaches) {
            clearCachesOnClassRedefinition();
            if (publicOnly) {
                if (publicConstructors != null) {
                    res = (Constructor[]) publicConstructors.get();
                }
            } else {
                if (declaredConstructors != null) {
                    res = (Constructor[]) declaredConstructors.get();
                }
            }
            if (res != null) return res;
        }
        // No cached value available; request value from VM
        if (isInterface()) {
            res = new Constructor[0];
        } else {
            res = getDeclaredConstructors0(publicOnly); //本地方法,获取声明的构造方法
        }
        if (useCaches) {
            if (publicOnly) {
                publicConstructors = new SoftReference(res);
            } else {
                declaredConstructors = new SoftReference(res);
            }
        }
        return res;
    }

   
分享到:
评论

相关推荐

    Java.lang.reflect 包下常用的类及方法简介

    在Java编程语言中,`java.lang.reflect`包是核心库的一部分,它提供了运行时访问类、接口、字段和方法的能力。这个包对于理解和操作对象的动态特性至关重要,尤其是在实现反射机制时。反射允许我们在程序运行期间...

    java.lang包介绍

    在Java 2(J2SE)中,`java.lang`包添加了一些新的类和方法,如`InheritableThreadLocal`,`ThreadLocal`的扩展,使得子线程可以继承父线程的变量,以及`SecurityManager`,用于实现安全管理策略。 过时方法在Java ...

    在Java中异常分析

    - **异常路径**:`java.lang.Object -&gt; java.lang.Throwable -&gt; java.lang.Exception -&gt; java.lang.RuntimeException -&gt; java.lang.IndexOutOfBoundsException -&gt; java.lang.ArrayIndexOutOfBoundsException` ...

    java.lang.Class类

    Class类的特点是没有公共构造方法,Class对象是在加载类时由Java虚拟机自动构造的,因此不能显式地声明一个Class对象。虚拟机为每种类型管理一个独一无二的Class对象,每个类(型)都有一个Class对象。 获取Class...

    java.lang包

    通过`Class`对象,我们可以获取关于类的信息,如类的名称、构造函数、方法等。`Class.forName()`方法可以动态加载类。 `Object`类是所有Java类的最终超类,包含所有对象共有的属性和方法,如`equals()`比较两个对象...

    java.lang.ExceptionInInitializerError异常的解决方法

    System.out.println("初始化构造方法"); } private static StaticParamsSingle buildStaticParams() { if (sps == null) { sps = new StaticParamsSingle(); } int result = NUM_A + NUM_B; System.out....

    java.lang研究

    在Java 2中,一些新类和方法被添加到`java.lang`包,如`ThreadLocal`、`RuntimePermission`等,以增强安全性、多线程支持和性能优化。 值得注意的是,虽然`java.lang`包中的许多类在早期版本的Java中就已经存在,但...

    java_lang包详解.pdf

    在Java 2版本中,java.lang包引入了一些新的类和接口,例如InheritableThreadLocal、RuntimePermission等,以增强多线程特性和安全控制。同时,一些过时的方法也被标记出来,虽然仍可供老程序使用,但不建议在新代码...

    JAVA反射机制-Class类-Class对象的获取.pdf

    ### JAVA反射机制——Class类与Class对象的获取 #### 概述 在Java语言中,反射是一种强大的功能,允许程序在运行时动态地检查和修改自身的行为。这种能力是通过`java.lang.Class`类实现的,它提供了封装类或接口...

    Java java.lang.ExceptionInInitializerError 错误如何解决

    `java.lang.ExceptionInInitializerError` 是Java编程语言中一个特殊的运行时异常,它通常表示在类的静态初始化过程中发生了异常。这个错误不是因为类的构造函数,而是由于静态变量初始化或者静态初始化块(也称为...

    java开发-com.alibaba.fastjson.JSONObject

    2. 获取值:使用`getString()`、`getInt()`、`getLong()`等方法获取不同类型的值,或者使用`get()`获取Object类型,然后进行类型转换。例如: ```java String name = jsonObject.getString("name"); int age = ...

    java-lang包详解

    - **Class**: 表示运行时的类信息,可以用来获取类的方法、字段等信息。 - **Object**: 所有Java类的根类,包含了对象的基本操作,如equals()、toString()等。 - **System**: 提供系统相关的属性和操作,如标准...

    java反射 反编译:.class--&gt;.java

    例如,`java.lang.Class`类提供了获取类信息的方法,`java.lang.reflect.Field`用于访问字段,`java.lang.reflect.Method`用于调用方法,而`java.lang.reflect.Constructor`则用于操作构造器。 获取类的三种方式:...

    北大青鸟JAVA培训教程-java.lang包

    通过`Class`对象,我们可以动态地获取类的信息,如类名、构造函数、方法等,并能创建类的实例。这对于实现元编程和动态加载类等功能非常关键。 【Object】类是所有Java类的超类,它定义了一些通用的方法,如`equals...

    commons-lang3-3.9-bin.tar.gz

    6. **ClassUtils**: 反射相关的帮助类,可以用来获取类的信息、创建实例、检查兼容性等。 7. **ReflectionUtils**: 更强大的反射工具,可以方便地访问和操作类的字段、方法、构造器等。 在搭建Hadoop集群并使用...

    JAVA反射实现和实现机制

    2. **`java.lang.reflect.Constructor`**:表示类的构造器。 3. **`java.lang.reflect.Field`**:表示类的成员变量。 4. **`java.lang.reflect.Method`**:表示类的方法。 5. **`java.lang.reflect.Modifier`**:...

    Java反射机制笔记(简单易懂)

    通过Java反射机制,我们可以在运行时获取类的信息,包括类的成员变量、方法、构造方法等,并可以动态地调用这些成员变量和方法。 获取Class对象 ---------------- 在Java中,Class对象是反射机制的基础。我们可以...

    java面试题--反射机制

    3. **通过`Class`类的静态方法`forName()`获取**:如`Class.forName("java.lang.String")`。 #### 六、动态加载类 动态加载类是Java反射机制的重要应用场景之一。通过`Class.forName()`方法或者`ClassLoader`的`...

    java.lang.Void类源码解析

    Java.lang.Void类是一个不可实例化的占位符类,它的主要作用是持有对Java关键字void的Class对象的引用。该类的源码解析对应的内容如下: 首先,Void类的定义为public final class Void {},其中final关键字表明该类...

    【Java基础笔记】反射.docx

    - `java.lang.Class`:表示运行时的类信息,通过类名获取`Class`对象的方法有`forName()`、`getClass()`、`类名.class`等。 - `java.lang.reflect.Method`:表示类的方法信息,提供了获取方法和调用方法的功能。 ...

Global site tag (gtag.js) - Google Analytics