本文共 1579 字,大约阅读时间需要 5 分钟。
packagecom.itheima.day1;/*反射就是把 Java类中的各种成分 映射成 相应的Java类.
Java类中有什么?(类所属的包,类中的字段,类中的方法)
Package getPackage()
获取此类的包。
Method getMethod(String name, Class>... parameterTypes)
返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
Field getField(String name)
返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
每个返回值都是一个对象,都映射成相应的类(相当于对java中所有类中的成分向上抽取描述),对上面那句话的理解学习反射的目的:
一个类中的 每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些
实例对象后,如何用?怎么用?这才是学习和应用反射的关键*/
import java.lang.reflect.*;public classReflectConstructor {/***@paramargs*/
public static void main(String[] args)throwsException {//TODO 自动生成的方法存根
/*public Constructor getConstructor(Class>... parameterTypes)
throws NoSuchMethodException,
SecurityException
返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
parameterTypes 参数是 Class 对象的一个数组,
这些 Class 对象按声明顺序标识构造方法的形参类型。*/
//new String(new StringBuffer("abc"));
Constructor strCons=String.class.getConstructor(StringBuffer.class);//对应String类中形参类型为StringBuffer的构造器对象
Constructor strBufCon=StringBuffer.class.getConstructor(String.class);//对应StringBuffered类中形参类型为String的构造器对象
/*public T newInstance(Object... initargs)//如果传入基本类型->自动装箱
throws InstantiationException,
IllegalAccessException,
IllegalArgumentException,
InvocationTargetException
使用此 Constructor 对象表示的构造方法来 创建该构造方法的声明类 的新实例,
并用指定的初始化参数初始化该实例。个别参数会自动解包,以匹配基本形参,
必要时,基本参数和引用参数都要进行方法调用转换。*/String str=(String)strCons.newInstance(strBufCon.newInstance("abc"));//这里没有使用泛型,编译时期不能确定返回类型,返回Object//如果传入类型非StirngBuffer类型->IllegalArgumentException
System.out.println(str+" "+str.length());
System.out.println(String.class.newInstance());//
转载地址:http://codnv.baihongyu.com/