亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

在java中,可以根據(jù)Class類(lèi)的對(duì)象,知道某個(gè)類(lèi)(接口)的一些屬性(成員 ,方法,注釋?zhuān)⒔猓┑?。由于最近的工作中用到了這些,其中需要在代碼中格局反射知道某些類(lèi)的方法,查看文檔的時(shí)候,看到了getMethods()和getDeclaredMethods()的差異。雖然兩者都能實(shí)現(xiàn)目的,但個(gè)人覺(jué)得還是有必要區(qū)分下。

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

getMethods():

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

getDeclaredMethods():

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

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

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

運(yùn)行TestClass結(jié)果:

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

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

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

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

以及基本類(lèi)型:兩種方法返回的也都是空

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

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

總結(jié)

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

相關(guān)文章

  • MyBatis-Plus的apply用法小結(jié)

    MyBatis-Plus的apply用法小結(jié)

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

    Spring實(shí)例化bean的四種方式詳解

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

    Mybatis之@MapKey的實(shí)現(xiàn)

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

    Java注解簡(jiǎn)介和使用詳細(xì)講解

    Java 語(yǔ)言中的類(lèi)、構(gòu)造器、方法、成員變量、參數(shù)等都可以被注解進(jìn)行標(biāo)注,這篇文章主要介紹了Java注解的介紹和使用詳細(xì)講解,需要的朋友可以參考下
    2023-02-02
  • Spring Boot全局異常處理解析

    Spring Boot全局異常處理解析

    這篇文章主要為大家詳細(xì)介紹了Spring Boot全局異常處理的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    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ū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • SpringMVC中事務(wù)是否可以加在Controller層的問(wèn)題

    SpringMVC中事務(wù)是否可以加在Controller層的問(wèn)題

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

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

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

    關(guān)于SpringCloud的微服務(wù)以及組件詳解

    這篇文章主要介紹了關(guān)于SpringCloud的微服務(wù)以及組件詳解,是一個(gè)更高層次的、 架構(gòu)視角的綜合性大型項(xiàng)目, 他的目標(biāo)是構(gòu)建一套標(biāo)準(zhǔn)化的微服務(wù)解決方案,需要的朋友可以參考下
    2023-05-05
  • 使用Java完成Socket文件傳輸方式

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

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

最新評(píng)論