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

歡迎訪問 生活随笔!

生活随笔

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

java

Java-反射浅谈

發布時間:2024/9/5 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java-反射浅谈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章就是簡簡單單的介紹反射是什么、怎么用,面向初學者,老鳥勿噴。不涉及深層的原理。因為我不懂。

1.嘛是反射?

我在自己學習反射的時候,看到了一個說法很有意思——

有反就有正。我們先來看看“正射”是什么:

我們先定義一個Apple類,定義構造函數和屬性:

class Apple {private int age;public String name;public void setName(String name){this.name = name;}private Apple(){}public Apple(int age, String name){this.name = name;this.age = age;}public int getAge(){return age;}private void setAge(int age){this.age = age;}}

  然后在main函數中:

public static void main(String[] args) {Apple apple = new Apple(12, "青蘋果"); }

這種我們最常用的建立對象的方式就是“正射”。來看看我們是怎么定義了這個對象的:

1.我們知道有一個類叫做Apple。

2.我們至少知道這個類的一個構造函數——至少要傳入一個int一個String。

我們事先知道了這個類和這個類的信息來創建對象,就是“正”。反射,就是在不知道這個類的具體信息的前提下,來創建對象、獲取類的方法屬性等等。一個是睜著眼一個是閉著眼,這么說你總能聽明白了吧。

2.怎么使用反射?

我們既然想操作一個類,就至少得知道他是誰吧,也就是說我們得獲取一個“類對象”。

類對象,用來創建其他對象的對象。

這里我們有三種方式來創建類對象:

1.Class cls=Class.forName(String string):其中參數是類的全路徑名。我們知道一個類的全路徑名時可以用這種方式。

class ReflectDemo {public static void main(String[] args){try{Class cls = Class.forName("Practice.Apple");} catch (ClassNotFoundException e)//這個方法會拋出ClassNotFoundException,找不到你指定的類就會異常。{e.printStackTrace();}} }

2.xxx.class 適合編譯之前就知道class的情況。

class ReflectDemo {public static void main(String[] args){Class cls = Apple.class;} }

3.使用對象的getClass()方法。

class ReflectDemo {Apple apple = new Apple();Class cls = apple.getClass(); }

三種方式各有各的使用場景。

好了,我們現在已經拿到了這個類的類對象,下一步我們就可以用反射建立這個類的對象了。

建立類對象有兩種方式:

1.使用類對象的.newInstance()方法來獲取一個使用無參的構造函數初始化的對象。

try {Class cls = Class.forName("Practice.Apple");Apple apple = (Apple) cls.newInstance(); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) //newInstance()拋出InstantiationException(如果此 Class 表示一個抽象類、接口、數組 // 類、基本類型或 void; 或者該類沒有 null 構造方法) //與IllegalAccessException(如果該類或其 null 構造方法是不可訪問的) {e.printStackTrace(); }

我裝的是java11,newInstance()似乎是被要廢棄了?

2.通過Constructor對象的newInstance()方法。這個方式我們可以指定構造方法。

public static void main(String[] args) {try{Class cls = Class.forName("Practice.Apple");Constructor constructor = cls.getConstructor(int.class,String.class);Apple apple = (Apple) constructor.newInstance(13, "毒蘋果");} catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e)//getConstructor()會拋出NoSuchMethodException。//newInstance()拋出InstantiationException,IllegalAccessException,//InvocationTargetException(當被調用的方法的內部拋出了異常而沒有被捕獲時,將由此異常接收){e.printStackTrace();} }

 在getConstructor時我們要指定參數類型。注意是class類型

對象有了,我們現在需要調用對象的屬性or方法時怎么調用呢?

1.獲取對象的屬性

Field[] fields = cls.getFields();//cls是我們的類對象 for (Field field : fields) {System.out.println(field); }

getFields可以獲取到所有除private的屬性。若獲取指定屬性可以使用getField(String name)。

獲取所有包括private的屬性我們可以使用getDeclaredFields()。

2.獲取對象的方法

Method[] methods = cls.getMethods(); for (Method method : methods) {System.out.println(method); }

道理同上,getDeclaredMethods()可以獲取所有方法。

有了這些,我們就可以對對象進行操作了。

3.執行對象的方法

Method method = cls.getMethod("setAge", int.class); method.invoke(apple,10); System.out.println(apple.getAge());

分析代碼:

首先我們指定了方法名來獲取指定的方法(第一個參數是方法名,第二個是方法的參數的所屬類。這里注意,若參數為int型的,要么寫int.class,要么寫Integer。Integer.class是不行的。)

接著我們調用方法的invoke(invoke,執行之意)。第一個參數是我們想在哪個對象上調用方法,第二個是參數值。(若方法為私有方法,我們雖然可以獲取到但是不能執行。若想執行,則需要在執行前調用method.setAccessible(true))

?

?有了以上的知識,你就已經了解了最基本的反射知識并且能靈活使用反射了。其他的我以后補充。希望能幫助到初學者理解。

?

轉載于:https://www.cnblogs.com/KangYh/p/10633226.html

總結

以上是生活随笔為你收集整理的Java-反射浅谈的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 成年人网站黄色 | 欧洲视频在线观看 | 日韩av综合网站 | av成人在线免费观看 | 超碰免费在线播放 | 在线亚洲观看 | 国产视频久久久久久 | 成人激情在线视频 | 91丨porny丨国产入口 | 中文写幕一区二区三区免费观成熟 | 色哟哟国产精品 | 国产97色在线 | 国产 | 黑丝一区二区三区 | 初音未来打屁股 | 摸大乳喷奶水www视频 | 中文字幕无码乱人伦 | 日韩亚洲视频 | 一区二区福利 | 欧美国产视频一区 | 91亚洲国产精品 | 你懂的网址在线观看 | 牛牛影视免费观看 | 亚洲在线视频网站 | 91久久在线 | 欧美国产日韩在线视频 | 亚洲精品一区二区三区四区乱码 | 欧美成人tv | 不卡的在线视频 | av激情小说 | 亚洲精品在线视频 | 国产三级国产精品国产国在线观看 | 国产精品永久免费视频 | 色爱视频| 99久久久无码国产精品衣服 | 欧美在线三区 | 亚洲欧美一二三区 | 中文字幕视频一区二区 | 欧洲久久久久 | 久色精品| 韩国精品一区二区 | 欧美一级黄色片子 | 日韩在线第一区 | 香蕉视频免费网站 | 一区二区三区四区在线 | 日本人xxxxxxxxx泡妞 | 免费啪视频在线观看 | 久久久精品人妻av一区二区三区 | 污污动态图| 国产一区二区高清视频 | 青青草成人在线观看 | 岛国免费视频 | 9191国产精品 | 色先锋av资源 | 亚洲欧美综合一区二区 | 成人黄色在线网站 | 少妇免费毛片久久久久久久久 | 久草免费在线观看 | 日本在线视频不卡 | 亚洲a色 | 中文字幕+乱码+中文 | 蕾丝视频污 | www.婷婷 | 黄色高清网站 | 综合精品国产 | 污污视频免费观看 | 中文字幕在线播放视频 | 寂寞人妻瑜伽被教练日 | 亚洲伦理自拍 | 成人激情文学 | 91网站观看 | 中文字幕在线观看视频一区二区 | 嫩草视频在线播放 | 亚洲一二区视频 | 99精品视频国产 | 日韩一区二区精品 | 最近免费中文字幕大全免费版视频 | 欧美日b视频| 中文字幕一区二区三区乱码不卡 | 亚洲精品网站在线播放gif | 国产精品久久久久久av | 日韩在线视频第一页 | 91麻豆精品国产91久久久久久 | 精品国产999久久久免费 | 欧美性猛交xxxⅹ富婆 | 男人操女人的免费视频 | 成人在线免费观看网站 | 亚洲乱码国产乱码精品天美传媒 | 欧美午夜三级 | 毛片视频免费 | 久久久伦理片 | 中出 在线| 日日拍拍| 国产精品一区一区三区 | 秘密基地免费观看完整版中文 | 亚洲精品三级 | 中文字幕在线播 | 国产福利一区二区三区视频 | 日日麻批 | 饥渴少妇色诱水电工 |