您好,登錄后才能下訂單哦!
Class.getMethods()和Class.getDeclaredMethods()方法在java中有什么區別?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
getMethods():
返回一個包含某些 Method 對象的數組,這些對象反映此 Class 對象所表示的類或接口(包括那些由該類或接口聲明的以及從超類和超接口繼承的那些的類或接口)的公共 member 方法。數組類返回從 Object 類繼承的所有(公共)member 方法。返回數組中的元素沒有排序,也沒有任何特定的順序。如果此 Class 對象表示沒有公共成員方法的類或接口,或者表示一個基本類型或 void,則此方法返回長度為 0 的數組。類初始化方法 <clinit> 不包含在返回的數組中。如果類聲明了帶有相同參數類型的多個公共成員方法,則它們都會包含在返回的數組中。
getDeclaredMethods():
返回 Method 對象的一個數組,這些對象反映此 Class 對象表示的類或接口聲明的所有方法,包括公共、保護、默認(包)訪問和私有方法,但不包括繼承的方法。返回數組中的元素沒有排序,也沒有任何特定的順序。如果該類或接口不聲明任何方法,或者此 Class 對象表示一個基本類型、一個數組類或 void,則此方法返回一個長度為 0 的數組。類初始化方法 <clinit> 不包含在返回數組中。如果該類聲明帶有相同參數類型的多個公共成員方法,則它們都包含在返回的數組中。
大致上來看,兩個方法的區別主要在于: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()
返回了自生聲明的四個方法。兩個方法的主要區別就在這里吧。
另外,返回Method數組為0 的情況也是JDK按照文檔上介紹的一樣。比如”空”接口,基本類型:
public interface TestInterface { } //兩種方法返回的都是空
以及基本類型:兩種方法返回的也都是空
Method[] methods = int.class.getMethods(); Method[] methods2 = int.class.getDeclaredMethods();
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。