java反射機制,經過類名獲取對象,經過方法名和參數調

實例:java

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下建一個文件UseInfojavathis

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

結果:code

經過類自己得到對象
com.hqh.reflect.GetClassTest
===========
經過子類的實例得到父類對象
com.hqh.reflect.UseInfo
java.lang.Object
===========
經過類名.class獲取對象
com.hqh.reflect.UseInfo
===========
經過類名的字符串獲取對象
com.hqh.reflect.UseInfo
=============
OK對象

相關文章
相關標籤/搜索