构造方法的反射应用constructor方法newInstance(Obeject...initargs)功能

Constructor类代表某个类中的一个构造方法

得到某个类所有的构造方法:Constructor []constructors=Class.forName("java.lang.String").getConstructs();

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

Constructor constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);//获得方法时要用到的类型

创建实例对象

通常方式:String str=new String(new StringBuffer("abc"));

反射方式:String str=(String)constructor.newInstance(new StringBuffer("abc"));//调用获得的方法时要用到上面相同类型实例对象

Class.newInstacne()方法:

String obj=(String)Class.forName("java.lang.String").newInstance();

该方法内部先得到默认的构造方法,然后用该构造方法来创建实例对象。该方法内部的具体代码用到了缓存机制来保存默认构造方法的实例对象。

-----------------------------------------------------------

Constructor的方法 newInstance(Object...initargs)功能//可变参数

newInstance方法是根据构造函数来生成对象

其中initargs就是你这个对象的构造函数的参数,如果构造函数是无参的,就一个也不要传,这个列表和构造函数的参数列表时一样的,只不过,当是基本数据类型传入的时候,需要一个包装类来包装它,但是jdk1.5也可以直接传入基本数据类型了,因为编译器会帮你自动装箱,拆箱

package cn.itcast.heima;

import java.lang.reflect.Constructor;

public class ReflectTest {

 public static void main(String[] args)throws Exception {//注意抛出异常

  // TODO Auto-generated method stub

  //开发程序时要明确 编译时跟运行时 编译时 只是将代码翻译成二进制文件 没有执行 一些错误可能不会出现 但是一运行就出现问题了 类型转化

        String str2="abc";

        Class cls1=str2.getClass();

        Class cls2=String.class;

        Class cls3=Class.forName("java.lang.String");

  Constructor constructor=String.class.getConstructor(StringBuffer.class);//StringBuffer 类型

       String str=(String) constructor.newInstance(new StringBuffer("abc"));//同样类型的对象

       System.out.println(str.charAt(2));

 }

}

猜你喜欢

转载自djkin.iteye.com/blog/2171731