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());
}
}