亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java反射的作用

發布時間:2020-06-26 14:43:19 來源:億速云 閱讀:244 作者:Leah 欄目:編程語言

這篇文章運用簡單易懂的例子給大家介紹java反射的作用,代碼非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

java反射

反射是Java的特征之一,是一種間接操作目標對象的機制。

JAVA反射機制是在運行狀態中,對于任意一個實體類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象方法的功能稱為java語言的反射機制。

Java中為什么需要反射?反射要解決什么問題?

一句話概括就是使用反射可以賦予jvm動態編譯的能力,否則類的元數據信息只能用靜態編譯的方式實現,例如熱加載,Tomcat的classloader等等都沒法支持

Java中編譯類型有兩種:

 ● 靜態編譯:在編譯時確定類型,綁定對象即通過。

 ● 動態編譯:運行時確定類型,綁定對象。動態編譯最大限度地發揮了Java的靈活性,體現了多態的應用,可以減低類之間的耦合性。

Java反射是Java被視為動態(或準動態)語言的一個關鍵性質。這個機制允許程序在運行時透過Reflection APIs取得任何一個已知名稱的class的內部信息,包括其modifiers(諸如public、static等)、superclass(例如Object)、實現之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于運行時改變fields內容或喚起methods。

Reflection可以在運行時加載、探知、使用編譯期間完全未知的classes。即Java程序可以加載一個運行時才得知名稱的class,獲取其完整構造,并生成其對象實體、或對其fields設值、或喚起其methods。

反射(reflection)允許靜態語言在運行時(runtime)檢查、修改程序的結構與行為。
在靜態語言中,使用一個變量時,必須知道它的類型。在Java中,變量的類型信息在編譯時都保存到了class文件中,這樣在運行時才能保證準確無誤;換句話說,程序在運行時的行為都是固定的。如果想在運行時改變,就需要反射這東西了。

實現Java反射機制的類都位于java.lang.reflect包中:

1、Class類:代表一個類

2、Field類:代表類的成員變量(類的屬性)

3、Method類:代表類的方法

4、Constructor類:代表類的構造方法

5、Array類:提供了動態創建數組,以及訪問數組的元素的靜態方法

使用

java反射的作用

1、獲取Class對象的三種方式

1.1 Object ——> getClass();
1.2 任何數據類型(包括基本數據類型)都有一個“靜態”的class屬性
1.3 通過Class類的靜態方法:forName(String  className)(常用)

/**
 * 獲取Class對象的三種方式
 * 1 Object ——> getClass();
 * 2 任何數據類型(包括基本數據類型)都有一個“靜態”的class屬性
 * 3 通過Class類的靜態方法:forName(String  className)(常用)
 *
 */
public class Fanshe {
	public static void main(String[] args) {
		//第一種方式獲取Class對象  
		Student stu1 = new Student();//這一new 產生一個Student對象,一個Class對象。
		Class stuClass = stu1.getClass();//獲取Class對象
		System.out.println(stuClass.getName());
		
		//第二種方式獲取Class對象
		Class stuClass2 = Student.class;
		System.out.println(stuClass == stuClass2);
//判斷第一種方式獲取的Class對象和第二種方式獲取的是否是同一個
		
		//第三種方式獲取Class對象
		try {
			Class stuClass3 = Class.forName("fanshe.Student");
//注意此字符串必須是真實路徑,就是帶包名的類路徑,包名.類名
			System.out.println(stuClass3 == stuClass2);
//判斷三種方式是否獲取的是同一個Class對象
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
 
		System.out.println("*****************獲取公有、無參的構造方法*************");
		Constructor con = clazz.getConstructor(null);
		//1>、因為是無參的構造方法所以類型是一個null,不寫也可以:這里需要的是一個參數的類型,切記是類型
		//2>、返回的是描述這個無參構造函數的類對象。
 
 
		System.out.println("*************獲取公有字段**并調用*****************");
		Field f = stuClass.getField("name");
        System.out.println(f);
		
 
		System.out.println("***************獲取私有的show4()方法******************");
		m = stuClass.getDeclaredMethod("show4", int.class);
		System.out.println(m);
		m.setAccessible(true);//解除私有限定
		Object result = m.invoke(obj, 20);//需要兩個參數,一個是要調用的對象(獲取有反射),一個是實參
		System.out.println("返回值:" + result);
 
	}
}

關于java反射的作用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彭山县| 渝中区| 北海市| 云梦县| 高淳县| 柘城县| 五河县| 武川县| 勐海县| 林州市| 富阳市| 射阳县| 固阳县| 灵丘县| 舟山市| 霸州市| 乡宁县| 香格里拉县| 泉州市| 黄山市| 合肥市| 肃北| 涪陵区| 西畴县| 牡丹江市| 平昌县| 墨江| 长子县| 正蓝旗| 肥城市| 朝阳县| 新闻| 广汉市| 黔南| 黄骅市| 龙陵县| 乌兰察布市| 贵德县| 安国市| 全椒县| 沁水县|