大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java反射——如何通過Java中的反射調用對象的方法?

Java反射——如何通過Java中的反射調用對象的方法?

更新時間:2019-08-15 10:50:31 來源:動力節點 瀏覽2222次

 


    一、Java反射拿到調用對象的方法


  1、通過Class.forName(“包名+方法的類名”)拿到方法的對象;


  如:Class clazz = Class.forName("ReflectionTest");


  也可以通過實例,獲取方法的對象類,


  如:String str = "test , reflection";


  Class clazz = str.getClass();


  2、明確反射方法名稱 ;


  3、明確方法的參數類型,就可以拿到對象的方法。


  如:Method method = clazz.getMethod("test",String.class,int.class);



  二、接著就是invoke()調用方法了:


  1、實例化對象,可以直接調用已創建的對象,也可以newInstance()一個。


  2、確定具體方法的參數


  如: Object obj1 = method.invoke(clazz.newInstance(),"xiaojun",23);


  System.out.println("直接反射:"+obj1);



  三、補充一些關于Java反射的知識:


  Java反射的作用:在Java代碼編譯時,可以通過反射訪問裝載到JVM中類的內部信息。


  如: Clazz.getName()獲取類的完整名字


  getPackage()獲取此類所屬的包


  getSuperclass() 獲取父類對應的Class對象


  getFiled(String name) 獲得類的指定成員變量


  getMethods() 獲得類的public類型的方法


  getMethod(String name, Class[] args) 獲取類的指定方法



  四、具體實例:


  import java.lang.reflect.InvocationTargetException;


  import java.lang.reflect.Method;


  public class ReflectionTest {


  public String test(String name ,int age) {


  return name+",今年"+age+"歲,是一個極富好奇心地樂觀青年!";


  }


  public static void main(String args[]) {


  String str = "test , reflection";


  int len1 = str.length();


  System.out.println("直接調用length() :"+len1);


  //反射String.length()方法


  //直接填入調用該方法的對象str,這里不需要newInstance()


  Object len2 = Reflection(str,str.getClass(),"length",null,null);


  System.out.println("java 反射調用length() :"+len2);


  Class clazz;


  try {


  //調用自己創建的函數,


  //反射得到類 包名+類名,我這邊沒有包名就直接是 "ReflectionTest"


  clazz = Class.forName("ReflectionTest");


  //直接java反射得到方法


  Method method= clazz.getMethod("test",String.class,int.class);


  Object obj1 = method.invoke(clazz.newInstance(),"xiaojun",23);


  System.out.println("直接反射:"+obj1);


  //創建函數完成反射


  //創建參數class 類型的數組


  Class cla[] = {String.class,int.class};


  Object obj = Reflection(clazz.newInstance(),clazz,"test",cla,"小君",22);


  System.out.println("創建函數完成反射: "+obj);


  } catch (ClassNotFoundException e) {


  // TODO Auto-generated catch block


  e.printStackTrace();


  } catch (InstantiationException 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 (SecurityException e) {


  // TODO Auto-generated catch block


  e.printStackTrace();


  } catch (IllegalArgumentException e) {


  // TODO Auto-generated catch block


  e.printStackTrace();


  } catch (InvocationTargetException e) {


  // TODO Auto-generated catch block


  e.printStackTrace();


  }


  }


  /*


  * 通過反射執行cclass的方法


  * @param object ---調到該方法的具體對象


  * @param cclass ---具體對象的class類型


  * @param paramClasses ---反射方法中參數class類型


  * @param methodName ---反射方法的名稱


  * @param args ----調用該方法用到的具體參數


  *


  *


  * */


  public static Object Reflection(Object object ,Class cclass,String methodName,Class[] paramclasses, Object... args) {


  try {


  Method method = cclass.getMethod(methodName,paramclasses);


  return method.invoke(object,args);


  } catch (NoSuchMethodException e) {


  // TODO Auto-generated catch block


  e.printStackTrace();


  } catch (SecurityException e) {


  // TODO Auto-generated catch block


  e.printStackTrace();


  } catch (IllegalAccessException e) {


  // TODO Auto-generated catch block


  e.printStackTrace();


  } catch (IllegalArgumentException e) {


  // TODO Auto-generated catch block


  e.printStackTrace();


  } catch (InvocationTargetException e) {


  // TODO Auto-generated catch block


  e.printStackTrace();


  }


  return null;


  }


  }


  /* 運行結果:


  直接調用length() :17


  java 反射調用length() :17


  直接反射:xiaojun,今年23歲,是一個極富好奇心地樂觀青年!


  創建函數完成反射: 小君,今年22歲,是一個極富好奇心地樂觀青年!*/



提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产成人精品日本亚洲语言 | 国产一级特黄生活片 | 欧美成人精品高清在线观看 | 精品久久久久不卡无毒 | 欧美大狠狠大臿蕉香蕉大视频 | 亚洲精品第五页中文字幕 | 亚洲精品第一国产麻豆 | 国产大毛片 | 久久精品在线观看 | 大陆一级毛片免费视频观看i | 精品视频在线观看 | 男人看片网站 | 日韩精品福利视频一区二区三区 | 97人人插| 免费 高清 日本1在线观看 | 综合网亚洲 | 97国产在线视频公开免费 | 四虎在线永久精品高清 | 久久综合精品视频 | 亚洲区精品久久一区二区三区 | 中文字幕在线观看第二页 | 国产欧美日韩一区二区三区视频 | 精品国产日韩亚洲一区在线 | 天天撸天天操 | 亚洲精品在线观看视频 | 国产高清一区二区三区 | 午夜影院一区二区三区 | 特级全黄一级毛片免费 | 亚洲欧美日韩综合精品网 | ww亚洲ww在线观看国产 | 四虎影视在线影院在线观看观看 | 亚洲乱码国产乱码精品精98 | 国产精品亚洲精品爽爽 | 性色生活免费看性大片 | 美国毛片aaa在线播放 | 91亚洲精品一区二区自 | 99在线精品免费视频九九视 | 欧洲成人在线视频 | 素人巨乳被调教 | 久艾草国产成人综合在线视频 | 亚洲香蕉毛片久久网站老妇人 |