反射 Reflection

下面是一个简单反射类的应用

学生类

public class Student {

    private Student(){

    }

    public Student(String stuid){
        this.stuid = stuid;
    }

    private String stuid;

    public String getStuid() {
        return stuid;
    }

    public void setStuid(String stuid) {
        this.stuid = stuid;
    }

    private void getPicName(String pic){
        System.out.println(pic);
    }

    @Override
    public String toString() {
        return "Student [stuid=" + stuid + "]";
    }

}

反射调用

public class Realize {
    public static void main(String[] args) {
        try {
            //get public Constructor
            Class<?> c = Class.forName("com.test.ref.Student");
            Constructor<?> constructor = c.getConstructor(String.class);
            Object obj = constructor.newInstance("this is my test example");    
            System.out.println(obj.toString());

            //get private Constructor
            Constructor<?> co = c.getDeclaredConstructor();
            //private constructor need to access
            co.setAccessible(true);
            obj = co.newInstance(); 
            System.out.println(obj.toString());

            //get method
            Method method = obj.getClass().getDeclaredMethod("getPicName", String.class);
            method.setAccessible(true);

            //get all method 
            Method[] methods = obj.getClass().getDeclaredMethods();
            for (Method mm : methods) {
                System.out.println("method name : " + mm.getName());
            }

            //get the parameters of the specified method
            Class<?>[] paramClasses = method.getParameterTypes() ;
            for (Class<?> class1 : paramClasses) {
                System.out.println("parameter type: " + class1.getName());
            }

            // whether it is a private method
            System.out.println(method.getName() + " is private "
                    + Modifier.isPrivate(method.getModifiers()));
            //call method
            method.invoke(obj, "Let me think");

            // get all field
            Field[] publicFields = obj.getClass().getDeclaredFields();
            for (Field field : publicFields) {
                System.out.println("field name : " + field.getName());
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值