国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - java中Class.getMethods()和Class.getDeclaredMethods()方法的區(qū)別

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

2021-05-31 11:43freeTimeWY Java教程

這篇文章主要介紹了java中Class.getMethods()和Class.getDeclaredMethods()方法的區(qū)別 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下

在java中,可以根據(jù)class類的對象,知道某個類(接口)的一些屬性(成員 ,方法,注釋,注解)等。由于最近的工作中用到了這些,其中需要在代碼中格局反射知道某些類的方法,查看文檔的時候,看到了getmethods()和getdeclaredmethods()的差異。雖然兩者都能實(shí)現(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 對象表示的類或接口聲明的所有方法,包括公共、保護(hù)、默認(rèn)(包)訪問和私有方法,但不包括繼承的方法。返回數(shù)組中的元素沒有排序,也沒有任何特定的順序。如果該類或接口不聲明任何方法,或者此 class 對象表示一個基本類型、一個數(shù)組類或 void,則此方法返回一個長度為 0 的數(shù)組。類初始化方法 <clinit> 不包含在返回數(shù)組中。如果該類聲明帶有相同參數(shù)類型的多個公共成員方法,則它們都包含在返回的數(shù)組中。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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()就返回一個自己聲明的method2()方法,其余的方法全部是來自object類。getdeclaredmethods()返回了自生聲明的四個方法。兩個方法的主要區(qū)別就在這里吧。

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

?
1
2
3
4
public interface testinterface
{
}
//兩種方法返回的都是空

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

?
1
2
method[] methods = int.class.getmethods();
method[] methods2 = int.class.getdeclaredmethods();

總結(jié):其實(shí)class中有很多相似的方法比如:getannotations()getdeclaredannotations(),以及getfields()和getdeclaredfields()等等,不同之處和上面基本一樣

總結(jié)

以上所述是小編給大家介紹的java中class.getmethods()和class.getdeclaredmethods()方法的區(qū)別,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對服務(wù)器之家網(wǎng)站的支持!

原文鏈接:https://www.cnblogs.com/wy697495/archive/2018/09/12/9631909.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91丁香婷婷综合久久欧美 | 国产一区二区三区久久久 | 久久久久黑人 | 韩国成人精品a∨在线观看 欧美精品综合 | 亚洲一区二区在线 | 欧美日韩免费一区二区三区 | 久久久国产一区二区三区 | 久久国产午夜 | 在线亚洲精品 | 最新国产精品精品视频 | 亚洲综合无码一区二区 | 国产福利视频在线观看 | 亚洲精品视频在线 | 亚洲精品久久久 | 精品无码三级在线观看视频 | 久久精品综合 | 性色网址 | 亚洲国产aⅴ成人精品无吗 成人午夜视频在线观看 | 亚洲精品视频国产 | 特级黄一级播放 | 日本免费中文字幕 | 玖玖久久| 亚洲国产成人精品女 | 欧美日韩在线免费 | 日本中文字幕在线观看 | 日韩不卡一区二区三区 | 冥王星之恋泰剧在线观看 | 色九九| 亚洲精品久久一区二区三区 | 日韩有码在线播放 | 在线观看亚洲一区二区三区 | 一区二区av在线 | 日韩高清不卡一区二区三区 | 亚洲精品视频在线免费 | 中文字幕国产视频 | 国产精品久久嫩一区二区免费 | 香蕉成人啪国产精品视频综合网 | 成人黄网在线观看 | 野狼在线社区2017入口 | 日韩午夜影院 | 人人射|