java反射

来源:互联网 发布:ubuntu修改启动器图标 编辑:程序博客网 时间:2024/04/27 02:30
反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。
在java中反射主要引用于泛型程序设计,在java中不支持潜在的类型机制,反射则可以补偿我们创建真正的泛型代码。
下面是使用反射实现潜在类型机制的代码:
package com.wth;
import java.lang.reflect.*;
class Person {
    private String name;
    private void work(String name) {
        System.out.println(name + "..... work....");
    }
}

class ShiRef {
//可以访问类的私有方法及变量
    public static void form(Object classname) {
        Class c = classname.getClass(); //通过对象串加载
        try {
            Field f = c.getDeclaredField("name"); //访问所有定义的变量
            Object o = c.newInstance();
            f.setAccessible(true);
            f.set(classname, "wutanghai");
            //System.out.println(f.get(classname));
            String[] s = new String[] {"wutanghai"};
            //Class<?> c=Class.forName("com.wth.Person");//通过字符串加载
//            Method[] m = c.getDeclaredMethods();
//           
//            for (int i = 0; i < m.length; i++) {
//                Method mi = m[i];
//                if(mi.getName().equals("work")){
//                    mi.setAccessible(true);
//                   mi.invoke(o, s);
//                }
//            }
            Method m = c.getDeclaredMethod("work",String.class); //访问所有定义的方法
//
//            //Method m = c.getMethod("work");
            m.setAccessible(true);
             m.invoke(o,s);
//            m
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

public class TestRef {
    public static void main(String[] args) {
        ShiRef.form(new Person());
    }
}
 
原创粉丝点击