反射机制指的是程序在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。
反射是:指程序可以访问、检测和修改它本身状态或行为的一种能力
得到类
import java.lang.reflect.Modifier;
public class FanShe {
public static void main(String[] args) {
try {
Class a = String.class;
Class b= new String("qwert").getClass();
Class c = Class.forName("java.lang.String");
System.out.println(b.getName()+""+Modifier.isPublic(b.getModifiers()));
//二进制 为公有的那个位置是否为1,为1时则为公有
Class d = Class.forName("oo.ll.nn.Student1");
System.out.println(d.getName());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Student1{
private String name = null;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public void test1() {
try {
Class c = Class.forName("java.util.Date"); //加载驱动
Method[] m = c.getMethods(); //里面的全部方法
for(Method n:m) {
Class t = n.getReturnType(); //得到方法的返回类型
System.out.println(n.getName()+"返回方法"+t.getName());
Parameter[] p = n.getParameters(); //得到方法里的参数
for(Parameter pp:p) {
System.out.println(pp.getName());
}
System.out.println();
}
Class tt = c.getSuperclass(); //得到父类
System.out.println(tt.getName());
Class[] ttt = c.getInterfaces(); //得到接口类
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
往反射类的方法里添加数据,和输出数据
public void test2() {
try {
//将东西写到一个文件里
String str = null;
BufferedReader br = new BufferedReader(new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream("tt.txt")));
str = br.readLine(); //等于读到的那一行
//这样可以先不用写类
Class c = Class.forName(str);
Object o = c.newInstance();//实例化类,返回无参数的构造函数
//调用方法
for(Method m:c.getMethods()) {
if("setName".equals(m.getName())) {
m.invoke(o,new Object[] {"学习"}); //往里面添加数据
break;
}
}
for(Method m:c.getMethods()) {
if("getName".equals(m.getName())) {
Object oo = m.invoke(o,new Object[] {});//多态,不管是什么类型的变量
// System.out.println(m.invoke(o,new Object[] {}));
System.out.println(oo);
break;
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}