java反射机制

来源:互联网 发布:php 图片处理库 编辑:程序博客网 时间:2024/06/06 00:58

java的反射主要使用了以下几个类:Class Method Constructor Field。

顾名思义:

Class 是类,可以通过以下几种方式取得:

Class.forName("xx");MyModel.class


Constructor是构造函数,可以通过此构造函数实例化一个类:

Constructor.newInstance(Object ... initargs)


Method是这个类中包含的方法,私有方法不会取出。


Field是这个类中包含的属性。


具体看一下代码:

import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * Created by vito.zhou on 2016/6/14. */public class ReflectModel {    private String privateField;    String normalField;    public int publicField;    private void privateMethod() {}    public ReflectModel(String privateField, String normalField) {        this.privateField = privateField;        this.normalField = normalField;    }    public String getPrivateField() {        return privateField;    }    public void setPrivateField(String privateField) {        this.privateField = privateField;    }    public void printField() {        System.out.println(getPrivateField() + ":" + normalField);    }    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {        Class reflectModelClass = Class.forName("ReflectModel");        Constructor constructor = reflectModelClass.getConstructor(String.class, String.class);        ReflectModel reflectModel = (ReflectModel)constructor.newInstance("Hello", "World");        reflectModel.printField();        Method[] methodAry = reflectModelClass.getMethods();        for (Method method:methodAry) {            System.out.println(method.getName());            if (method.getName().equals("setPrivateField")) {                method.invoke(reflectModel, "Set Hello");            }        }        reflectModel.printField();        Field[] fields = reflectModelClass.getFields();        for (Field field:fields) {            System.out.println(field.getName());        }    }}

java反射可以操作类中的属性方法等特性 可以使得java可以实现代理。代理可以下一次开始记录



0 0
原创粉丝点击