最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java反射獲取和調(diào)用方法

 更新時(shí)間:2017年12月05日 11:50:30   投稿:laozhang  
本篇內(nèi)容主要給大家詳細(xì)講解了java反射獲取方法以及調(diào)用方法,需要的朋友參考學(xué)習(xí)一下吧。

Class類中獲取方法:
public Method[] getMethods();//獲取包括自身和繼承(實(shí)現(xiàn))過來的所有的public方法——Method不支持泛型<>,即后面不接<>
public Method[] getDeclaredMethods();//獲取自身所有的方法(private、public、protected,和訪問權(quán)限無關(guān)),不包括繼承的
在jdk1.8后可以直接獲取私有屬性的方法不需要設(shè)置權(quán)限 但是僅限于getDeclaredMethod方法 對于Method 的方法仍然需要設(shè)置
權(quán)限。
public Method[] getMethod(String methodName, Class<T>...parameterTypes);//表示獲取指定的一個(gè)公共的方法,包括繼承的
參數(shù): methodName:表示獲取的方法的名字
parameterTypes:表示獲取的方法的參數(shù)的Class類型
public Method[] getDeclaredMethod(String methodName, Class<T>...parameterTypes);//表示獲取本類中的一個(gè)指定的方法(private、protected、public,與訪問權(quán)限無關(guān)),不包括繼承的方法

Class clazz = new Person().getClass(); 
 try { 
  //調(diào)用指定的方法 
  /*@SuppressWarnings("unchecked") 
  Method me = clazz.getDeclaredMethod("getName", String.class); 
  me.invoke(clazz.newInstance(),"zhangsan");*/ 
  //獲取所有的方法 
  Method[] methods = clazz.getDeclaredMethods(); 
  for (Method method : methods) { 
  System.out.println(method.getName()); 
  } 
 } catch (Exception e) { 
  e.printStackTrace(); 
 } 

對于多個(gè)參數(shù)的方法調(diào)用:getDeclaredMethod后面跟的parameterTypes可以理解為Class類型的形參 ,通過調(diào)用invoke來賦實(shí)參 多個(gè)參數(shù)的賦值 最好是包裝在new Object[]{}中 。

@SuppressWarnings("unchecked") 
Method method = clazz.getDeclaredMethod("getName",new Class[]{String.class,int.class}); 
method.invoke(new Person(), new Object[]{"zhangsan",10});

調(diào)用靜態(tài)方法

class User{
public static void staticMethod(){
System.out.println(“static mthod invoke.”);
}
}
Eg:
Class<User> clz=User.class;
Method staticMethod=clz.getMethod(“staticMthod”);

兩種方式調(diào)用靜態(tài)方法:

1. 因?yàn)殪o態(tài)方法屬于所有實(shí)例對象公共的,可以創(chuàng)建該類的一個(gè)任意對象,通過該對象調(diào)用
staticMethod.invoke(clz.newInstance());//staticMethod無參,故參數(shù)列表類型不填

2. 如果底層方法是靜態(tài)的,那么可以忽略指定的obj參數(shù),將obj參數(shù)設(shè)置為null即可
staticMethod.invoke(null);

 

更多相關(guān)的內(nèi)容:

一:反射概念

可以通過Class類獲取某個(gè)類的成員變量以及方法,并且調(diào)用之。

二:通過反射獲取方法、變量、構(gòu)造方法

@Test
 // 通過反射獲取類定義的方法
 public void testMethod() throws Exception {
  @SuppressWarnings("rawtypes")
  Class clazz = Class.forName("java.lang.String");
  Method[] m = clazz.getDeclaredMethods();
  for (int i = 0; i < m.length; i++) {
   System.out.println(m[i].getName() + " " + m[i].getDeclaringClass());
  }
 }

 @Test
 // 通過反射獲取類定義的變量
 public void testField() throws Exception {
  @SuppressWarnings("rawtypes")
  Class clazz = Class.forName("java.lang.String");
  Field[] fields = clazz.getFields();
  for (Field f : fields) {
   System.out.println(f.getName());
  }
 }

 @Test
 // 通過反射獲取類定義的構(gòu)造方法
 public void testConstructor() throws Exception {
  @SuppressWarnings("rawtypes")
  Class clazz = Class.forName("java.lang.String");
  @SuppressWarnings("rawtypes")
  Constructor[] cons = clazz.getConstructors();
  for (@SuppressWarnings("rawtypes")
  Constructor c : cons) {
   System.out.println(c + " " + c.getDeclaringClass());
  }
 }

三:通過反射調(diào)用類定義的方法

@Test
 // 通過反射調(diào)用類定義的方法
 public void testInvokeMethod() throws Exception {
  Class clazz = Class.forName("java.lang.String");
  // 定義參數(shù)類型
  Class[] params = new Class[1];
  params[0] = String.class;
  Method m = clazz.getDeclaredMethod("indexOf", params);
  // 設(shè)置參數(shù)
  Object[] p = new Object[1];
  p[0] = "e";
  Integer s = (Integer) m.invoke("helloworld!", p);
  System.out.println(s);
 }

相關(guān)文章

  • Java redisTemplate阻塞式處理消息隊(duì)列

    Java redisTemplate阻塞式處理消息隊(duì)列

    用redis中的List可以實(shí)現(xiàn)隊(duì)列,這樣可以用來做消息處理和任務(wù)調(diào)度的隊(duì)列。因此,本文將主要為大家介紹如何利用redisTemplate處理消息隊(duì)列,感興趣的小伙伴可以了解一下
    2021-12-12
  • idea打包java程序(包含依賴的所有jar包)

    idea打包java程序(包含依賴的所有jar包)

    這篇文章主要介紹了idea打包java程序(包含依賴的所有jar包),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Spring Boot應(yīng)用關(guān)閉分析詳解

    Spring Boot應(yīng)用關(guān)閉分析詳解

    本文挖掘了Spring Boot的關(guān)閉方式,并列舉了關(guān)閉方式,從原理、源碼的角度闡述了Spring Boot的關(guān)閉代碼及擴(kuò)展點(diǎn),感興趣的朋友一起看看吧
    2024-12-12
  • Java中equals()知識點(diǎn)總結(jié)

    Java中equals()知識點(diǎn)總結(jié)

    在本篇文章里小編給大家分享的是關(guān)于Java中equals()知識點(diǎn)總結(jié)內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。
    2020-03-03
  • SpringSecurity實(shí)現(xiàn)前后端分離的示例詳解

    SpringSecurity實(shí)現(xiàn)前后端分離的示例詳解

    Spring Security默認(rèn)提供賬號密碼認(rèn)證方式,具體實(shí)現(xiàn)是在UsernamePasswordAuthenticationFilter 中,這篇文章主要介紹了SpringSecurity實(shí)現(xiàn)前后端分離的示例詳解,需要的朋友可以參考下
    2023-03-03
  • Java定義隊(duì)列結(jié)構(gòu),并實(shí)現(xiàn)入隊(duì)、出隊(duì)操作完整示例

    Java定義隊(duì)列結(jié)構(gòu),并實(shí)現(xiàn)入隊(duì)、出隊(duì)操作完整示例

    這篇文章主要介紹了Java定義隊(duì)列結(jié)構(gòu),并實(shí)現(xiàn)入隊(duì)、出隊(duì)操作,結(jié)合完整實(shí)例形式分析了java數(shù)據(jù)結(jié)構(gòu)中隊(duì)列的定義、入隊(duì)、出隊(duì)、判斷隊(duì)列是否為空、打印隊(duì)列元素等相關(guān)操作技巧,需要的朋友可以參考下
    2020-02-02
  • Spark SQL的自定義函數(shù)UDF使用

    Spark SQL的自定義函數(shù)UDF使用

    Spark Sql可以通過UDF來對DataFrame的Column進(jìn)行自定義操作。在特定場景下定義UDF可能需要用到Spark Context以外的資源或數(shù)據(jù)。比如從List或Map中取值,或是通過連接池從外部的數(shù)據(jù)源中讀取數(shù)據(jù),然后再參與Column的運(yùn)算
    2023-02-02
  • 基于Java ActiveMQ的實(shí)例講解

    基于Java ActiveMQ的實(shí)例講解

    下面小編就為大家?guī)硪黄贘ava ActiveMQ的實(shí)例講解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • 詳解Spring mvc的web.xml配置說明

    詳解Spring mvc的web.xml配置說明

    本篇文章主要介紹了Spring mvc的web.xml配置說明,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • SpringBoot項(xiàng)目中連接Gauss數(shù)據(jù)庫

    SpringBoot項(xiàng)目中連接Gauss數(shù)據(jù)庫

    本文主要介紹了SpringBoot項(xiàng)目中連接Gauss數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06

最新評論

昆山市| 景泰县| 秭归县| 资溪县| 平湖市| 巴南区| 罗源县| 景泰县| 灵石县| 沈丘县| 德格县| 蓝田县| 武山县| 连山| 通州区| 宿迁市| 沛县| 含山县| 北宁市| 襄垣县| 山丹县| 安顺市| 禹州市| 定南县| 施甸县| 万源市| 常熟市| 大同县| 正宁县| 巫山县| 宁德市| 伊春市| 静海县| 蒙自县| 阜南县| 新竹市| 界首市| 宕昌县| 清流县| 平武县| 高清|