欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中Class.getMethods()和Class.getDeclaredMethods()方法的區(qū)別

 更新時間:2018年09月12日 09:16:05   作者:freeTimeWY  
這篇文章主要介紹了java中Class.getMethods()和Class.getDeclaredMethods()方法的區(qū)別 ,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

在java中,可以根據Class類的對象,知道某個類(接口)的一些屬性(成員 ,方法,注釋,注解)等。由于最近的工作中用到了這些,其中需要在代碼中格局反射知道某些類的方法,查看文檔的時候,看到了getMethods()和getDeclaredMethods()的差異。雖然兩者都能實現目的,但個人覺得還是有必要區(qū)分下。

  JDK API(1.6)文檔中是這樣翻譯兩個方法的:

getMethods():

  返回一個包含某些 Method 對象的數組,這些對象反映此 Class 對象所表示的類或接口(包括那些由該類或接口聲明的以及從超類和超接口繼承的那些的類或接口)的公共 member 方法。數組類返回從 Object 類繼承的所有(公共)member 方法。返回數組中的元素沒有排序,也沒有任何特定的順序。如果此 Class 對象表示沒有公共成員方法的類或接口,或者表示一個基本類型或 void,則此方法返回長度為 0 的數組。類初始化方法 <clinit> 不包含在返回的數組中。如果類聲明了帶有相同參數類型的多個公共成員方法,則它們都會包含在返回的數組中。

getDeclaredMethods():

  返回 Method 對象的一個數組,這些對象反映此 Class 對象表示的類或接口聲明的所有方法,包括公共、保護、默認(包)訪問和私有方法,但不包括繼承的方法。返回數組中的元素沒有排序,也沒有任何特定的順序。如果該類或接口不聲明任何方法,或者此 Class 對象表示一個基本類型、一個數組類或 void,則此方法返回一個長度為 0 的數組。類初始化方法 <clinit> 不包含在返回數組中。如果該類聲明帶有相同參數類型的多個公共成員方法,則它們都包含在返回的數組中。

  大致上來看,兩個方法的區(qū)別主要在于:getMethods()返回的是該類以及超類的公共方法。getDeclaredMethods()返回該類本身自己聲明的包括公共、保護、默認(包)訪問和私有方法,但并不包括超類中的方法。比如如下列子:

public class TestObject
{
  private void method1()
  {
  }
  public void method2()
  {
  }
  void method3()
  {
  }
  protected void method4()
  {
  }
}
public class TestClass
{
  public static void main(String[] args)
  {
    Method[] methods = TestObject.class.getMethods();
    System.out.println("getMethods():");
    for (Method method : methods)
    {
      System.out.println(method.getName());
    }
    Method[] methods2 = TestObject.class.getDeclaredMethods();
    System.out.println("===========================");
    System.out.println("getDeclaredMethods():");
    for (Method method : methods2)
    {
      System.out.println(method.getName());
    }
  }
}

運行TestClass結果:

getMethods():
method2
wait
wait
wait
equals
toString
hashCode
getClass
notify
notifyAll
===========================
getDeclaredMethods():
method1
method2
method3
method4

  很明顯getMethods()就返回一個自己聲明的method2()方法,其余的方法全部是來自Object類。getDeclaredMethods()返回了自生聲明的四個方法。兩個方法的主要區(qū)別就在這里吧。

另外,返回Method數組為0 的情況也是JDK按照文檔上介紹的一樣。比如”空”接口,基本類型:

public interface TestInterface
{
}
//兩種方法返回的都是空

以及基本類型:兩種方法返回的也都是空

Method[] methods = int.class.getMethods();
Method[] methods2 = int.class.getDeclaredMethods();

總結:其實Class中有很多相似的方法比如:getAnnotations()getDeclaredAnnotations(),以及getFields()和getDeclaredFields()等等,不同之處和上面基本一樣

總結

以上所述是小編給大家介紹的java中Class.getMethods()和Class.getDeclaredMethods()方法的區(qū)別,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • MyBatis-Plus的apply用法小結

    MyBatis-Plus的apply用法小結

    apply方法是一個非常有用的功能,apply方法允許用戶直接在QueryWrapper或LambdaQueryWrapper中添加原生SQL片段,本文就詳細的介紹一下apply方法,感興趣的可以了解一下
    2024-10-10
  • Spring實例化bean的四種方式詳解

    Spring實例化bean的四種方式詳解

    這篇文章主要給大家介紹了關于Spring中實例化bean的四種方式:構造方法、靜態(tài)工廠、實例工廠和FactoryBean,感興趣的可以了解一下
    2022-06-06
  • Mybatis之@MapKey的實現

    Mybatis之@MapKey的實現

    本文介紹了Mybatis中@MapKey注解的使用場景與效果,包含使用@MapKey和不使用@MapKey注解的區(qū)別,然后通過源碼解析產生各種結果的原因,具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • Java注解簡介和使用詳細講解

    Java注解簡介和使用詳細講解

    Java 語言中的類、構造器、方法、成員變量、參數等都可以被注解進行標注,這篇文章主要介紹了Java注解的介紹和使用詳細講解,需要的朋友可以參考下
    2023-02-02
  • Spring Boot全局異常處理解析

    Spring Boot全局異常處理解析

    這篇文章主要為大家詳細介紹了Spring Boot全局異常處理的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java中system.exit(0) 和 system.exit(1)區(qū)別

    Java中system.exit(0) 和 system.exit(1)區(qū)別

    本文主要介紹了Java中system.exit(0) 和 system.exit(1)區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • SpringMVC中事務是否可以加在Controller層的問題

    SpringMVC中事務是否可以加在Controller層的問題

    這篇文章主要介紹了SpringMVC中事務是否可以加在Controller層的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 基于SpringBoot創(chuàng)建Web頁面并熱更新的操作步驟

    基于SpringBoot創(chuàng)建Web頁面并熱更新的操作步驟

    SpringBoot是一個用于快速開發(fā)單個微服務的框架,它基于 Spring 框架,簡化了Spring應用的初始化過程和開發(fā)流程,本文給大家介紹了如何基于SpringBoot創(chuàng)建Web頁面并熱更新,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • 關于SpringCloud的微服務以及組件詳解

    關于SpringCloud的微服務以及組件詳解

    這篇文章主要介紹了關于SpringCloud的微服務以及組件詳解,是一個更高層次的、 架構視角的綜合性大型項目, 他的目標是構建一套標準化的微服務解決方案,需要的朋友可以參考下
    2023-05-05
  • 使用Java完成Socket文件傳輸方式

    使用Java完成Socket文件傳輸方式

    這篇文章主要介紹了使用Java完成Socket文件傳輸方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評論