java.lang.reflect.Constructor

java.lang.reflect.Constructor

一、Constructor类是什么
  Constructor是一个类,位于java.lang.reflect包下。
  在Java反射中 Constructor类描述的是 类的构造方法信息,通俗来讲 有一个类如下:

 1 package com.testReflect;
 2 public class ConstructorDemo {
 3     private int num;
 4     private String str;
 5
 6     public ConstructorDemo(){
 7         num = 2;
 8         str = "xixi";
 9     }
10
11     public ConstructorDemo(int num,String str){
12         this.num = num;
13         this.str = str;
14     }
15
16     @Override
17     public String toString() {
18         return "ConstructorDemo [num=" + num + ", str=" + str + "]";
19     }
20 }

  在Java反射中ConstructorDemo类中的构造方法ConstructorDemo()、ConstructorDemo(int num,String str)都是Constructor类的实例,这个Constructor类的实例描述了构造方法的全部信息。(包括:方法修饰符、方法名称、参数列表 等等)

二、如何获取Constructor类对象
  一共有4种方法,全部都在Class类中:
    - getConstructors():获取类中的公共方法
    - getConstructor(Class[] params): 获取类的特定构造方法,params参数指定构造方法的参数类型
    - getDeclaredConstructors(): 获取类中所有的构造方法(public、protected、default、private)
    - getDeclaredConstructor(Class[] params): 获取类的特定构造方法,params参数指定构造方法的参数类型

三、Constructor类中常用的方法
  对于构造方法,我们就是用来创建类的实例的,但是在Java反射中需要注意的是:默认构造函数和带参数的构造方法创建实例的区别。

 1 package com.testReflect;
 2
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.Modifier;
 5
 6 public class ConstructorTest {
 7     public static void main(String[] args) throws Exception {
 8         //使用反射第一步:获取操作类ConstructorDemo所对应的Class对象
 9         Class<?> cls = Class.forName("com.testReflect.ConstructorDemo");
10
11         //获取默认的构造函数
12         Constructor constructor1 = cls.getConstructor(new Class[]{});
13         //获取构造函数信息
14         System.out.println("修饰符: "+Modifier.toString(constructor1.getModifiers()));
15         System.out.println("构造函数名: "+constructor1.getName());
16         System.out.println("参数列表: "+constructor1.getParameterTypes());
17         //通过默认的构造函数创建ConstructorDemo类的实例
18         Object obj = constructor1.newInstance();
19         System.out.println("调用默认构造函数生成实例:"+obj.toString());
20
21         System.out.println("===============================================");
22
23         //获取带参数的构造函数
24         Constructor constructor2 = cls.getConstructor(new Class[]{int.class,String.class});
25         System.out.println("修饰符: "+Modifier.toString(constructor2.getModifiers()));
26         System.out.println("构造函数名: "+constructor2.getName());
27         System.out.println("参数列表: "+constructor2.getParameterTypes());
28         //获取构造函数信息
29         //通过带参数的构造函数创建ConstructorDemo类的实例
30         Object obj2 = constructor2.newInstance(new Object[]{33,"haha"});
31         System.out.println("调用带参数构造函数生成实例:"+obj2.toString());
32     }
33 }
时间: 2024-10-02 04:32:13

java.lang.reflect.Constructor的相关文章

利用java.lang.reflect.Constructor动态实例化对象

1 public class Student { 2     private String name; 3     private Integer age; 4     private Student(String name,Integer age){ 5         this.name=name; 6         this.age=age; 7     } 8     public String getName() { 9         return name;10     }11 

自己写一个java.lang.reflect.Proxy代理的实现

前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的.本文就自己写一个Proxy类出来,功能和java.lang.reflect.Proxy一样,传入接口.代理内容,生成代理. 抛砖引玉吧,个人觉得自己写一些JDK里面的那些类挺好的,写一遍和看一遍真的是两个不同的概念,写一遍既加深了对于这些类的理解.提升了自己的写代码水平,也可以在写完之后对比一下自己的实现有哪些写得不好

Java反射API研究(2)——java.lang.reflect详细内容与关系

对于最新的java1.8而言,reflect中接口的结构是这样的: java.lang.reflect.AnnotatedElement java.lang.reflect.AnnotatedType java.lang.reflect.AnnotatedArrayType java.lang.reflect.AnnotatedParameterizedType java.lang.reflect.AnnotatedTypeVariable java.lang.reflect.Annotated

JAVA中反射机制六(java.lang.reflect包)

一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段,方法和构造函数对其底层对等进行操作. 二.java.lang.reflect AccessibleObject类 java.lang.reflect.AccessibleObject类是Field,Method和Constructor类对象的基类. 它提供了将反射对象标记为在使用它时抑制默认Java

java.lang.reflect(一)

要梳理这个包,就必须要整理一下反射了.为了方便描述,我们假定已经写好了一个普通类,com. 反射API 接口 AnnotatedElement GenericArrayType GenericDeclaration InvocationHandler Member ParameterizedType Type TypeVariable WildcardType 类 AccessibleObject (代表访问检查的能力) Array (代表数组) Constructor (代表构造方法) Fie

moon 反射机制---java.lang.reflect包

java反射机制:在运行状态中,对于一个已经加载到JVM的java对象/类 在程序中实现访问.检查.修改.描述java对象本身的信息(构造方法.方法.成员变量.类本身的信息) 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. C++,Java,C#不是动态语言.但是JAVA有着一个非常突出的动态相关机制:Reflection, 反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接. 二,反射机制的作用:

java.lang.reflect.invocationtargetexception

bout Sotirios-Efstathios Maneas Sotirios-Efstathios (Stathis) Maneas is a postgraduate student at the Department of Informatics and Telecommunications of The National and Kapodistrian University of Athens. His main interests include distributed syste

java.lang.reflect.InvocationHandler中invoke()方法调用时机

Java中动态代理的实现,关键就是这两个东西:Proxy.InvocationHandler,下面从InvocationHandler接口中的invoke方法入手,简单说明一下Java如何实现动态代理的. invoke方法的完整形式如下: public Object invoke(Object proxy, Method method, Object[] args) throws Throwable       {              method.invoke(obj, args);  

错误/异常:java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType 的解决方法

1.错误/异常视图 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'baseDao' defined in class path resource [spring/beans_common.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInsta