`

37、java.lang.reflect.Constructor<T>类

阅读更多

一、Constructor<T>

 

  1. Constructor 提供关于类的单个构造方法的信息以及对它的访问权限。 
  2. Constructor 允许在将实参与带有底层构造方法的形参的 newInstance() 匹配时进行扩展转换,
  3. 但是如果发生收缩转换,则抛出 IllegalArgumentException。

二、方法

 

public final class Constructor<T>extends AccessibleObject implements GenericDeclaration, Member
{
	//没有构造方法

	//以字符串形式返回此构造方法的名称。它总是与构造方法的声明类的简单名称相同
	public String getName(){}

	//使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
	public T newInstance(Object... initargs)
              throws InstantiationException,
                     IllegalAccessException,
                     IllegalArgumentException,
                     InvocationTargetException{}

	//返回描述此 Constructor 的字符串,其中包括类型参数
	public String toGenericString(){}

	//返回描述此 Constructor 的字符串
	public String toString(){}
}

 

三、应用

 

得到某个类所有的构造方法

  • 例子:Constructor[] constructors = Class.forName(“java.lang.String”).getConstructors();

得到某一个构造方法

  • 例子:Constructor<String> constructor = (Constructor<String>)Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);

创建实例对象

  • 通常方式:String str = new String(new StringBuffer(“abc”));
  • 反射方式:String str = constructor.newInstance(new StringBuffer(“abc”));

Class.newInstance()方法:

  • 例子:String obj = (String)Class.forName(“java.lang.String”).newInstance();
  • 该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象
  • 该方法内部的具体代码是怎样写的呢?用到了缓存机制来保存默认构造方法的实例对象。。。。

四、示例

 

 

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class ReflectDemo {
	public static void main(String[] args) throws SecurityException, NoSuchMethodException, ClassNotFoundException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException
	{
		Constructor<String> con = (Constructor<String>) Class.forName("java.lang.String").getConstructor(StringBuffer.class);
		String str = con.newInstance(new StringBuffer("abc"));
		System.out.println(str);
		String obj = (String) Class.forName("java.lang.String").newInstance();
		System.out.println("<"+obj+">");
	}
}

 

分享到:
评论

相关推荐

    ibatis 开发指南(pdf)

    mysql://localhost/sample"/&gt; &lt;br&gt;&lt;property name="JDBC.Username" ="user"/&gt; &lt;br&gt;&lt;property name="JDBC.Password" ="mypass"/&gt; &lt;br&gt;&lt;property name=&lt;br&gt;value="10"/&gt; &lt;br&gt;&lt;property name=value="5"/&gt; &lt;br&gt;&lt;property...

    项目源码-java进销存管理系统

    【项目源码】-java进销存管理系统 ... import java.awt.BorderLayout; import java.awt.Color;...import java.lang.reflect.Constructor; import java.net.URL; import java.util.HashMap; import java.util.Map;

    java 反射例子 代码

    java.lang.reflect.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier;

    java反射例子

    i &lt; constructor.length; i++) { System.out.println("构造方法:"+constructor[i]); } //方法二 for (int i = 0; i &lt; constructor.length; i++) { Class&lt;?&gt; p[]=constructor[i].getParameterTypes(); ...

    Java高级程序设计实战教程第三章-Java反射机制.pptx

    //类 java.lang.reflect.Constructor;//构造方法 java.lang.reflect.Field; //类的成员变量 java.lang.reflect.Method;//类的方法 java.lang.reflect.Modifier;//访问权限 Java高级程序设计实战教程第三章-Java反射...

    Java 高级特性.doc

    4、泛型的参数类型可以使用extends语句,例如&lt;T extends superclass&gt;。习惯上成为“有界类型”。 5、泛型的参数类型还可以是通配符类型。例如Class&lt;?&gt; classType = Class.forName(java.lang.String); 例子: a..使用...

    richfaces_erro

    richfaces_erro 正在建立中 调试当中 严重: Cant instantiate class: org.ajax4jsf.application.AjaxStateManager. java.lang.reflect.... at java.lang.reflect.Constructor.newInstance(Constructor.java:494)

    文件加密解密算法(Java源码)

    KeySpec dks = (KeySpec) constructor.newInstance(new Object[]{rawKeyData}); // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance...

    Java跳过构造方法新建对象

     (2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。  (3) 调用对象的clone()方法。  (4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 ...

    在Java中优雅而简洁的创建对象的方法总结

    反射调用 Class 或 java.lang.reflect.Constructor 的 newInstance()方法 克隆调用现有对象的 clone()方法 反序列化调用 java.io.ObjectInputStream 的 getObject()方法反序列化 各自适合的场景,面对参数的变化,本...

    java框架知识点汇总(反射,XML,设计模式,Redis缓存数据库)

    Class 类与 java.lang.reflect 类库一起对反射的概念进行了支持,该类库包含了 Field,Method,Constructor 类 (每个类都实现了 Member 接口)。这些类型的对象时由 JVM 在运行时创建的,用以表示未知类里对应的成员。...

    基础深化和提高-java反射技术

    Java反射技术的核心在于java.lang.reflect包,它提供了一系列类和接口,用于在运行时获取关于类和对象的信息,并进行相应的操作。主要的类和接口包括Class、Method、Field、Constructor等。 以下是Java反射技术的...

    候捷谈Java反射机制

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它...本文将谈到java.lang.Class,以及java.lang.reflect中的Method、Field、Constructor等等classes。

    eclipse安卓开发必备工具

    import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; public class SimpleTest { /** *//** * @param args */ public static void main(String[] args) { // TODO Auto-...

    JSP Simple Examples

    In java, Strings are objects that belong to class java.lang.String. A string is a sequence of simple characters. We can get the length of the string by using the method length() of java.lang.String. ...

Global site tag (gtag.js) - Google Analytics