最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Method類及invoke方法原理解析

 更新時(shí)間:2020年08月01日 08:36:04   作者:小尾學(xué)長(zhǎng)  
這篇文章主要介紹了Java Method類及invoke方法原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

在說Method和invoke的使用之前我們來看一個(gè)小例子, 如果看懂了那就ok了

public class MethodInvoke {
 
 class Animal {
  public void print() {
   System.out.println("Animal.print()");
  }
 }

 class Cat extends Animal {

  @Override
  public void print() {
   System.out.println("Cat.print()");
  }
 }
 
	public static void main(String[] args) throws Exception {
		Method animalMethod = Animal.class.getDeclaredMethod("print");
		Method catMethod = Cat.class.getDeclaredMethod("print");
		
		Animal animal = new Animal();
		Cat cat = new Cat();
		animalMethod.invoke(cat); //相當(dāng)于 cat調(diào)用父類的print方法
		animalMethod.invoke(animal);//相當(dāng)于 animal.print();
		
		catMethod.invoke(cat); //相當(dāng)于 cat.print();
		catMethod.invoke(animal);
	}
	
}

執(zhí)行結(jié)果如下

Cat.print()
Animal.print()
Cat.print()
Exception in thread "main" java.lang.IllegalArgumentException: object is not an instance of declaring class
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

代碼中,Cat類覆蓋了父類Animal的print()方法, 然后通過反射分別獲取print()的Method對(duì)象。最后分別用Cat和Animal的實(shí)例對(duì)象去執(zhí)行print()方法。其中animalMethod.invoke(animal)和catMethod.invoke(cat),示例對(duì)象的真實(shí)類型和Method的聲明Classs是相同的,按照預(yù)期打印結(jié)果;animalMethod.invoke(cat)中,由于Cat是Animal的子類,按照多態(tài)的特性,子類調(diào)用父類的的方法,方法執(zhí)行時(shí)會(huì)動(dòng)態(tài)鏈接到子類的實(shí)現(xiàn)方法上。

因此,這里會(huì)調(diào)用Cat.print()方法;而catMethod.invoke(animal)中,傳入的參數(shù)類型Animal是父類,卻期望調(diào)用子類Cat的方法,因此這一次會(huì)拋出異常。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決Error:(1,?1)?java:?非法字符:?'\ufeff'問題

    解決Error:(1,?1)?java:?非法字符:?'\ufeff'問題

    這篇文章主要介紹了解決Error:(1,?1)?java:?非法字符:?'\ufeff'問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java語法基礎(chǔ)之for語句練習(xí)

    Java語法基礎(chǔ)之for語句練習(xí)

    以下是對(duì)Java語法基礎(chǔ)中的for語句進(jìn)行了詳細(xì)介紹,需要的朋友可以過來參考下
    2013-07-07
  • Intelli IDEA安裝Scala插件并安裝Scala軟件和配置環(huán)境變量的詳細(xì)教程

    Intelli IDEA安裝Scala插件并安裝Scala軟件和配置環(huán)境變量的詳細(xì)教程

    這篇文章主要介紹了Intelli IDEA安裝Scala插件并安裝Scala軟件和配置環(huán)境變量的詳細(xì)教程,需要的朋友可以參考下
    2020-10-10
  • Java跳躍游戲?qū)嵗骖}解決思路詳解

    Java跳躍游戲?qū)嵗骖}解決思路詳解

    這篇文章主要介紹了Java跳躍游戲,總的來說這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過程。希望通過這道題能給你帶來一種解題優(yōu)化的思路
    2022-10-10
  • 淺聊java8中數(shù)值流的使用

    淺聊java8中數(shù)值流的使用

    java8為我提供的簡(jiǎn)單快捷的數(shù)值流計(jì)算API,本文就基于幾個(gè)常見的場(chǎng)景介紹一下數(shù)值流API的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2023-10-10
  • 解決@Validated注解無效,嵌套對(duì)象屬性的@NotBlank無效問題

    解決@Validated注解無效,嵌套對(duì)象屬性的@NotBlank無效問題

    這篇文章主要介紹了解決@Validated注解無效,嵌套對(duì)象屬性的@NotBlank無效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 一個(gè)通用的Java分頁基類代碼詳解

    一個(gè)通用的Java分頁基類代碼詳解

    這篇文章主要介紹了一個(gè)通用的Java分頁基類代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Spring Boot整合web層實(shí)現(xiàn)過程詳解

    Spring Boot整合web層實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了Spring Boot整合web層實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • java JSONArray 遍歷方式(2種)

    java JSONArray 遍歷方式(2種)

    這篇文章主要介紹了java JSONArray 遍歷方式(2種),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Springboot使用zxing實(shí)現(xiàn)二維碼生成和解析

    Springboot使用zxing實(shí)現(xiàn)二維碼生成和解析

    ZXing支持各種條形碼,二維碼掃描,由多個(gè)模塊組成,?而且支持PC端,移動(dòng)端,本文將利用zxing實(shí)現(xiàn)二維碼生成和解析,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10

最新評(píng)論

景德镇市| 儋州市| 贵溪市| 平和县| 天门市| 锡林浩特市| 天全县| 准格尔旗| 白沙| 龙川县| 新竹市| 金寨县| 文山县| 印江| 九江县| 灵川县| 正宁县| 凤城市| 会同县| 鹤山市| 阜城县| 宁城县| 循化| 渭南市| 友谊县| 星子县| 长白| 尚志市| 和龙市| 山丹县| 永登县| 雷波县| 肃北| 镇沅| 奇台县| 阜平县| 黑龙江省| 芒康县| 揭西县| 濮阳市| 桐城市|