java 27 - 3 反射之 通过反射获取构造方法并使用

类 Constructor<T>:提供关于类的单个构造方法的信息以及对它的访问权限。

通过反射的方法获取构造方法并使用  ps:先忽略泛型

  A.1:获取构造方法的数组:

    public Constructor<?>[] getConstructors():获得所有公共构造方法

    public Constructor<?>[] getDeclaredConstructors():获得所有构造方法

  A.2:获取单个构造方法(用于非私有的构造方法)

    public Constructor<T> getConstructor(Class<?>... parameterTypes)

      参数表示的是:你要获取的构造方法的构造参数个数及数据类型的class字节码文件对象

  A.3:获取单个构造方法(用于私有的构造方法)

    public Constructor<T> getDeclaredtConstructor(Class<?>... parameterTypes)

  B.1:初始化构造方法的实例:(用于非私有的构造方法)

    public T newInstance(Object... initargs)  注意:T表示的是泛型,Object... initargs表示的是你要实例化的指定参数

      使用此 Constructor对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。

  B.2:初始化构造方法的实例:(用于私有的构造方法)   

   先用: public void setAccessible(boolean flag):flag的值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。

   再用: public T newInstance(Object... initargs)

代码:

  A:public Constructor<?>[] getConstructors():获得所有公共构造方法

1         Constructor[] c1 = c.getConstructors();
2         System.out.println(c1);// 返回的是地址值,证明得到的是个数组对象
3         // 遍历这个数组
4         for (Constructor ct : c1) {
5             System.out.println(ct);
6         }  //获得Person类中的所有公告构造方法

  B:public Constructor<?>[] getDeclaredConstructors():获得所有构造方法

1         // B:public Constructor<?>[] getDeclaredConstructors():获得所有构造方法
2          Constructor[] c1 = c.getDeclaredConstructors();
3          //遍历数组
4          for(Constructor ct : c1){
5              System.out.println(ct);
6          } //获得Person类的所有构造方法

  

  C:public Constructor<T> getConstructor(Class<?>... parameterTypes):获得指定的构造方法

获得无参构造方法: 

1         Constructor c1 = c.getDeclaredConstructor();
2         System.out.println(c1);

获得带参构造方法:

1         //获取指定的构造方法,需要该方法的参数列表
2         Constructor c1 = c.getDeclaredConstructor(String.class,int.class,String.class);
3         System.out.println(c1);

  D:public T newInstance(Object... initargs)  注意:T表示的是泛型,Object... initargs表示的是你要实例化的指定参数

    使用此 Constructor对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。

    也就是初始化对象

通过反射获取公共带参构造方法并使用:

1         //获取指定的构造方法,需要该方法的参数列表
2         Constructor c1 = c.getDeclaredConstructor(String.class,int.class,String.class);
3         System.out.println(c1);
4
5         // 通过带参构造方法对象创建对象
6         // public T newInstance(Object... initargs):
7         //有泛型,前面没使用泛型,先用Objcet
8         Object b = c1.newInstance("张三",13,"家乡");
9         System.out.println(b); //Person [name=张三, age=13, address=家乡]

通过反射获取私有带参构造方法并使用:

 1         //获取指定的私有构造方法
 2         Constructor c1 = c.getDeclaredConstructor(String.class);
 3
 4         //public void setAccessible(boolean flag):
 5         //flag的值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。
 6         c1.setAccessible(true);
 7
 8         // public T newInstance(Object... initargs)
 9         Object ob = c1.newInstance("张三");
10         System.out.println(ob);

后两个代码,相当于以前的: 只不过通过反射,不需要导入对应的类

1 public Person(String name, int age, String address)
2
3  Person p = new Person("张三",13,"家乡");
4  System.out.println(p);

1  private Person(String name){}
2
3  Person p = new Person("风清扬");
4  System.out.println(p);
时间: 2024-08-24 17:15:26

java 27 - 3 反射之 通过反射获取构造方法并使用的相关文章

Java反射《三》获取属性

1 package com.study.reflect; 2 3 import java.lang.reflect.Field; 4 /** 5 * 反射,获取属性 6 * @ClassName: FieldDemo 7 * @author BlueLake 8 * @date 2015年9月10日 下午4:21:29 9 */ 10 public class FieldDemo { 11 12 public static void main(String[] args) throws NoSu

【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】

方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; private String name; private Boolean flag; public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public String getNam

复习java基础第七天(反射)

一:目标 Ø理解 Class 类 Ø理解 Java 的类加载机制 Ø学会使用 ClassLoader 进行类加载 Ø理解反射的机制 Ø掌握 Constructor.Method.Field 类的用法 Ø理解并掌握动态代理 1.Class类 –对象照镜子后可以得到的信息:某个类的数据成员名.方法和构造器.某个类到底实现了哪些接口. 对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象. 一个 Class 对象包含了特定某个类的有关信息. –  Class 对象只能由系统建立对象.

00111_通过反射获取构造方法并使用

1.在反射机制中,把类中的成员(构造方法.成员方法.成员变量)都封装成了对应的类进行表示.其中,构造方法使用类Constructor表示.可通过Class类中提供的方法获取构造方法: (1)返回一个构造方法 public Constructor<T> getConstructor(Class<?>... parameterTypes) 获取public修饰, 指定参数类型所对应的构造方法 public Constructor<T> getDeclaredConstruc

Java高级篇(四)——反射

之前写到了设计模式的代理模式,因为下一篇动态代理等内容需要用到反射的知识,所以在之前Java篇的基础上再写一篇有关反射的内容,还是以实际的程序为主,了解反射是做什么的.应该怎么用. 一.什么是反射 反射就是把Java类中的各个成分映射成一个个的Java对象.即在运行状态中,对于任意一个类,都能够知道这个类的所以属性和方法:对于任意一个对象,都能调用它的任意一个方法和属性.这种动态获取信息及动态调用对象方法的功能叫Java的反射机制. 1. 反射机制的功能 Java反射机制主要提供了以下功能: 在

Java之旅(2)—反射

1.     概念 反射就是将java类中的各种成分映射成相应的java类.之前我们已经讲过了Class类,也明白了一个java类中用一个Class类的对象来表示,一个类中的组成部分有:成员变量,方法,构造方法,包等等信息也用一个个的java类来表示. 举个生活中的例子,生活中我们经常见到汽车,如果说汽车是一个类的话,那么汽车中的发动机.变速箱等等也是一个个的类.表示java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象

java 反射和暴力反射 两个DEMO

该类为反射函数 获取和暴力获取ReflectPoin类中的属性 package com.tuozou.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectTest { public ReflectTest() { // TODO Auto-generated con

java基础10:正则表达式与反射

关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

深入理解Java类型信息(Class对象)与反射机制(干货)

[版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/70768369 出自[zejian的博客] 本篇主要是深入对Java中的Class对象进行分析,这对后续深入理解反射技术非常重要,这篇有点偏向内功类文章,主要内容如下: 深入理解Class对象 RRTI的概念以及Class对象作用 Class对象的加载及其获取方式 Class对象的加载 ClassforName方法 Class字面常