1 Java里面 class<?> 是代表啥意思,其实就是一个类,而这个类是变动的,意思是可以是Student,也可以是类person。
看段代码:
<pre class="java" name="code">package com.test.main;
import java.lang.reflect.Field;
public class Main {
public static class Student {
private int id;
public void SetId(int _id) {
id = _id;
}
public int GetId() {
return id;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Class<?> temp;
try {
temp = Class.forName("com.test.main.Main$Student");
Student stu2 = (Student) temp.newInstance();
System.out.println(stu2.GetId());
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
<pre class="plain" name="code">
2 Field 這個类,表示类字段成员
<pre class="java" name="code">package com.test.main;
import java.lang.reflect.Field;
public class Main {
public static class Student {
private int id;
public int id2;
public void SetId(int _id) {
id = _id;
}
public int GetId() {
return id;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Student stu = new Student();
stu.SetId(1);
// 第一种:暴力反射得到字段,即使private成员也能得到
// try {
// Field f = stu.getClass().getDeclaredField("id");
// f.setAccessible(true);
// System.out.println(f.getInt(stu));
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// 第二种:只能得到public 成员
// try {
// Field f2 = stu.getClass().getField("id2");
// System.out.println(f2.getInt(stu));
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// 第三,get/set方法的使用,注意id2字段是public
Field[] fs = stu.getClass().getFields();
for (Field field : fs) {
// field.getType().equals(Integer.class)
if (field.getName().equals("id2")) {
try {
field.setInt(stu, 10);
System.out.println(stu.id2);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}