Student类
public class Student {
private String name;
private int age;
public Student() {
super();
}
public Student(String name, int age) {
super();
this.name = name;
this.age = 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;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "Student [name=]" + name + ", age="+age;
}
public void show() {
Log.i("Student", "student show() method called");
}
}
public class Worker {
private int age;
private String name;
private Student mStudent;
public Worker() {
super();
mStudent = new Student("I am a student",22);
}
public Worker(int age, String name) {
super();
this.age = age;
this.name = name;
mStudent = new Student("I am a student",22);
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "Worker [name=" + name + ", age="+age+"]";
}
}
关键代码:
/**
* java 反射机制的使用
* http://blog.csdn.net/lfdfhl/article/details/13509839
* @author andy
*
*/
public class MainActivity extends Activity {
private Field mStudendField;
private Object mStudentObject;
private Class<?> mStudentClass;
private Method mStudentShowMethod;
private static String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
try {
//1)首先获取到类中的字段
//2根据字段获取到对象
//3)根据对象获取方法
//4)用方法直接调用
String workerclassname = "com.example.javareflect.Worker";
Class<?> workerClass = Class.forName(workerclassname);
//得到Worker类中的mStudent字段
mStudendField = workerClass.getDeclaredField("mStudent");
mStudendField.setAccessible(true);
//实例化mStudent对象 返回指定字段值的对象
mStudentObject = mStudendField.get(new Worker());
//得到mStudent对应类的class
Log.i(TAG, "mStudentObject class name"+ mStudentObject.getClass().getName());
mStudentClass = Class.forName(mStudentObject.getClass().getName());
//反射出该class类中的show()方法
mStudentShowMethod = mStudentClass.getDeclaredMethod("show");
//取消访问私有方法的合法性检查
mStudentShowMethod.setAccessible(true);
//调用show()方法
mStudentShowMethod.invoke(mStudentObject);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}