本文共 1359 字,大约阅读时间需要 4 分钟。
1、反射就是把Java类中的各种成分映射成相应的Java类。例如,一个Java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量、方法、构造方法、包等等信息也用一个个的Java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。表示Java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,它们是Field、Method、Constructor、Package等等。
2、一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对象后,得到这些实例对象后有什么用呢?怎么用呢?这正是学习和应用反射的要点。
1、Constructor类代表某个类中的一个构造方法
2、得到某个类所有的构造方法:例子:
Constructor[] constructors = Class.forName(“java.lang.String”).getConstructors();3、得到某一个构造方法
例子:
Constructor constructor = Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);4、创建实例对象
通常方式:
String str = new String(new StringBuffer(“abc”));
反射方式:
String str = (String)constructor.newInstance(new StringBuffer(“abc”));5、Class.newInstance()方法
例子:
String obj = (String)Class.forName(“java.lang.String”).newInstance();该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象; 该方法内部的具体代码是怎样写的呢?用到了缓存机制来保存默认构造方法的实例对象。
6、示例代码
package cn.sunft.day01.reflect;import java.lang.reflect.Constructor;public class ConstructorTest { public static void main(String[] args) throws Exception { //new String(new StringBuffer("abc")) //获取指定参数的构造器 Constructor constructor1 = String.class.getConstructor(StringBuffer.class); //构造的时候,需要传入一个StringBuffer的实例 String str1 = (String) constructor1.newInstance(new StringBuffer("abc")); System.out.println(str1.charAt(2));//c }}
转载地址:http://xflvb.baihongyu.com/