强大的Java的反射机制

强大的Java的反射机制,第1张

强大的Java的反射机制

该反射是要以泛型编程知识为基础的

反射原理:是指在运行时去获取一个类的变量和方法信息。然后通过获取到的信息来创建对象,调用方法的一种机制。由于这种动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期仍然可以扩展。

引入包

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 Constructor getDeclaredConstructor(Class... parameterTypes)
public Constructor[] getConstructors()
public Constructor getConstructor(Class... parameterTypes)

构造器和上面的方法、属性都是大同小异的。需要注意的是,当返回一个数组的时候,返回类型是Constructor[]而不是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反射机制详解

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5683206.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存