该反射是要以泛型编程知识为基础的
反射原理:是指在运行时去获取一个类的变量和方法信息。然后通过获取到的信息来创建对象,调用方法的一种机制。由于这种动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期仍然可以扩展。
引入包
import java.lang.reflect.Field; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.AccessibleObject;
获取class类的对象
// 通过类的class方法 Consumer.class // 通过对象的getClass方法,该方法是Object类的方法 Consumer c = new Consumer(); c.getClass() // 使用Class类中的forName(String className) Class> c = Class.forName("cn.lh.Consumer");
其中反射用的方法是第二种方法
反射获取构造方法
public static void getProperty() throws ClassNotFoundException, NoSuchMethodException { Class> c = Class.forName("cn.lh.Consumer"); Constructor>[] cs = c.getConstructors(); for (Constructor> cr: cs) { System.out.println(cr); } }
相关API
public Constructor>[] getDeclaredConstructors() public ConstructorgetDeclaredConstructor(Class>... parameterTypes) public Constructor>[] getConstructors() public Constructor getConstructor(Class>... parameterTypes)
构造器和上面的方法、属性都是大同小异的。需要注意的是,当返回一个数组的时候,返回类型是Constructor>[]而不是Constructor
其他同理
反射获取所有方法
public Method[] getDeclaredMethods() public Method getDeclaredMethod(String name, Class>... parameterTypes) public Method[] getMethods() public Method getMethod(String name, Class>... parameterTypes)
获取成员变量信息
public Field getField(String name) public Field[] getFields() public Field[] getDeclaredFields()
总结:反射其实就是在程序运行期创建对象的方法,也成为动态创建对象,与此相对的是new的静态创建对象,new是在编译期间创建对象的,增加了.class文件的体积,把一些事情给计算机做岂不是更好?
参考:
- Java反射机制详解
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)