首页 > 编程语言 >18 | JAVA反射之调用构造方法

18 | JAVA反射之调用构造方法

时间:2022-09-02 08:33:55浏览次数:82  
标签:调用 JAVA 构造方法 18 Class Constructor Integer public

反射 调用构造方法

调用Class.newInstance()的局限是,它只能调用该类的public无参数构造方法。如果构造方法带有参数,或者不是public,就无法直接通过Class.newInstance()来调用。

为了调用任意的构造方法,Java的反射API提供了Constructor对象,它包含一个构造方法的所有信息,可以创建一个实例。Constructor对象和Method非常类似,不同之处仅在于它是一个构造方法,并且,调用结果总是返回实例:

import java.lang.reflect.Constructor;

public class Main {
    public static void main(String[] args) throws Exception {
        // 获取构造方法Integer(int):
        Constructor cons1 = Integer.class.getConstructor(int.class);
        // 调用构造方法:
        Integer n1 = (Integer) cons1.newInstance(123);
        System.out.println(n1);

        // 获取构造方法Integer(String)
        Constructor cons2 = Integer.class.getConstructor(String.class);
        Integer n2 = (Integer) cons2.newInstance("456");
        System.out.println(n2);
    }
}

通过Class实例获取Constructor的方法如下:

  • getConstructor(Class...):获取某个publicConstructor
  • getDeclaredConstructor(Class...):获取某个Constructor
  • getConstructors():获取所有publicConstructor
  • getDeclaredConstructors():获取所有Constructor

注意Constructor总是当前类定义的构造方法,和父类无关,因此不存在多态的问题。

调用非publicConstructor时,必须首先通过setAccessible(true)设置允许访问。setAccessible(true)可能会失败。

标签:调用,JAVA,构造方法,18,Class,Constructor,Integer,public
From: https://www.cnblogs.com/mmxingye/p/16648507.html

相关文章

  • 01 | JAVA入门基础
    基本数据类型基本数据类型是CPU可以直接进行运算的类型。Java定义了以下几种基本数据类型:整数类型:byte,short,int,long浮点数类型:float,double字符类型:char布尔类型:bool......
  • 02 | JAVA内部类
    java内部类Java的内部类分为好几种,通常情况用得不多,但也需要了解它们是如何使用的。1.InnerClass如果一个类定义在另一个类的内部,这个类就是InnerClass:它与普通类有......
  • 04 | JAVA模块
    模块jar只是用于存放class的容器,它并不关心class之间的依赖。从Java9开始引入的模块,主要是为了解决“依赖”这个问题。如果a.jar必须依赖另一个b.jar才能运行,那我们应该......
  • 05 | JAVA字符串
    字符串Strings1="Hello!";实际上字符串在String内部是通过一个char[]数组表示的,因此,按下面的写法也是可以的:Strings2=newString(newchar[]{'H','e','l','l......
  • 06 | JAVA的StringBuilder高效拼接字符串
    StringBuilder如果用+来拼接字符串速度满。我们可以提前用StringBuilder来申请一大块的内存。把他想象成一个容器。为了能高效拼接字符串,Java标准库提供了StringBuil......
  • 07 | JAVA的StringJoiner对象专门拼接字符串
    StringJoiner对象专门用来拼接字符串importjava.util.StringJoiner;publicclassMain{publicstaticvoidmain(String[]args){String[]names={......
  • 08 | JAVA包装类型
    包装类型我们已经知道,Java的数据类型分两种:基本类型:byte,short,int,long,boolean,float,double,char引用类型:所有class和interface类型引用类型可以赋值为null,表示空,但基本......
  • 09 | JavaBean一种类的格式
    JavaBean在Java中,有很多class的定义都符合这样的规范:若干private实例字段;通过public方法来读写实例字段。如果字段是xyz,那么读写方法名分别以get和set开头,并且后......
  • 10 | JAVA枚举类enum
    枚举类enumpublicclassMain{publicstaticvoidmain(String[]args){Weekdayday=Weekday.SUN;if(day==Weekday.SAT||day==Weekda......
  • 11 | JAVA纪录类Record
    纪录类(也是一种不变类)使用String、Integer等类型的时候,这些类型都是不变类,一个不变类具有以下特点:定义class时使用final,无法派生子类;每个字段使用final,保证创建实例......