try {
//得到對象
Class c = Class.forName("完整類名");
Object yourObj = c.newInstance();
//得到方法
Method methlist[] = cls.getDeclaredMethods();
for (int i = 0; i < methlist.length; i++) {
Method m = methlist[i];
}
//獲取到方法對象,假設方法的參數是一個int,method名為setAge
Method sAge = c.getMethod("setAge", new Class[] {int.class});
//獲得參數Object
Object[] arguments = new Object[] { new Integer(37)};
//執行方法
sAge.invoke(yourObj , arguments);
} catch (Exception e) {
}
下面以一個具體的實例來說明。此實例來自《精通Hibernate 3.0 Java數據庫持久層開發實踐》一書。
先在com.hqh.reflect下建一個文件UseInfojava
package com.hqh.reflect;
public class UseInfo {
private Integer id;
private String userName;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package com.hqh.reflect;
public class GetClassTest {
public static void main(String[] args) {
GetClassTest test = new GetClassTest();
if(test.ClassCheck())
System.out.println("OK");
}
public boolean ClassCheck() {
try {
System.out.println("通過類本身獲得對象");
Class userClass = this.getClass();
System.out.println(userClass.getName());
System.out.println("===========");
System.out.println("通過子類的實例獲得父類對象");
UseInfo useInfo = new UseInfo();
userClass = useInfo.getClass();
System.out.println(userClass.getName());
Class subUserClass = userClass.getSuperclass();
System.out.println(subUserClass.getName());
System.out.println("===========");
System.out.println("通過類名.class獲取對象");
Class forClass = com.hqh.reflect.UseInfo.class;
System.out.println(forClass.getName());
System.out.println("===========");
System.out.println("通過類名的字符串獲取對象");
Class forName = Class.forName("com.hqh.reflect.UseInfo");
System.out.println(forName.getName());
System.out.println("=============");
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}
結果:
通過類本身獲得對象
com.hqh.reflect.GetClassTest
===========
通過子類的實例獲得父類對象
com.hqh.reflect.UseInfo
java.lang.Object
===========
通過類名.class獲取對象
com.hqh.reflect.UseInfo
===========
通過類名的字符串獲取對象
com.hqh.reflect.UseInfo
=============
OK