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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM