麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > Java > 正文

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

2024-07-14 08:42:20
字體:
來源:轉載
供稿:網(wǎng)友

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

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

getMethods():

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

getDeclaredMethods():

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

  大致上來看,兩個方法的區(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數(shù)組為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ū)別,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 一区国产精品 | 成年人视频免费看 | sesee99| 日本高清一级片 | 欧美黄色大片免费观看 | 国产成人精品一区二区仙踪林 | 毛片在哪里看 | 中文字幕免费在线观看视频 | 国产一区精品视频 | 中文字幕国产日韩 | 中文字幕一区二区三区久久 | 黄色一级毛片免费看 | 麻豆视频在线观看免费网站 | 欧美一级黄色免费 | 精品999久久久 | 日本高清com | 成年免费视频黄网站在线观看 | 久久精品亚洲一区二区三区观看模式 | 日韩中文字幕三区 | 96视频在线免费观看 | 欧美成人激情在线 | 精品国产视频一区二区三区 | www.9191.com| 深夜福利视频绿巨人视频在线观看 | 九七在线视频 | 毛片在线视频免费观看 | 精品中文字幕在线观看 | 操操操操网| 美女在线观看视频一区二区 | 羞羞视频一区 | 成人免费福利网站 | 欧美黄色大片免费观看 | 午夜视频在线看 | 国产呦在线观看视频 | 92自拍视频 | 久久国产精品久久精品国产演员表 | 精品一区二区三区免费看 | 国产一区二区三区视频免费 | 加勒比色综合 | 午夜视频在线在免费 | 亚洲精品xxx |