日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java方法的反射(对反射的进一步认识)

發布時間:2025/3/15 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java方法的反射(对反射的进一步认识) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

?

理論

實例


?

理論

這是學Java反射的第三天了,今天對Java反射有了新的認識,個人覺得,Java的反射,實際上是存在一個對象的副本。這個對象的副本實際上是一個Class指針(Java里面沒有指針的概念,這里為了理解,特意搬出來的),然而這個Class指針估計是保存在Java虛擬機里面的,都會存在對象的類類型的指針到Java虛擬機里面,因為在Java中,處處都是對象,連函數也是對象。所以可以直接調用函數方法。

?

方法的反射

如何獲取某個方法:方法的名稱和方法的參數列表才能唯一決定某個方法。

【注意,Java不是C++,函數的返回值不同的話,也是相同的函數】

方法反射的操作:method.invoke(對象, 參數列表)

?

?

實例

程序結構如下:

運行截圖如下:

源碼如下!

MethodDemo.java

package my;import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;public class MethodDemo {public static void main(String[] args) {/*** 獲取類的方法,首先要獲取類的類型*/Test a1 = new Test();Class c = a1.getClass();/*** 獲取方法 名稱和參數列表來決定* getMethod獲取的是public方法* getDelcaredMethod是自己聲明的方法*/try {Method m = c.getMethod("print", new Class[] {int.class, int.class});//Method m = c.getMethod("print", int.class, int.class);/*** 使用invoke進行反射的調用*/try {Object o = m.invoke(a1, new Object[] {10, 20});//方式二o = m.invoke(a1, 20, 30);System.out.println("----------華麗的分割線----------");Method mStr = c.getMethod("print", new Class[] {String.class, String.class});o = mStr.invoke(a1, new String[]{"how", "are"});System.out.println("----------華麗的分割線----------");Method mNull = c.getMethod("print");mNull.invoke(a1);}catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch block e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} } }class Test{public void print() {System.out.println("helloWorld");}public void print(int a, int b) {System.out.println(a + b);}public void print(String a, String b) {System.out.println(a.toUpperCase() + "," + b.toUpperCase());}}

?

總結

以上是生活随笔為你收集整理的Java方法的反射(对反射的进一步认识)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。