真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java反射的作用

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

為企業(yè)提供網(wǎng)站制作、成都網(wǎng)站制作、網(wǎng)站優(yōu)化、營銷型網(wǎng)站、競價托管、品牌運營等營銷獲客服務。成都創(chuàng)新互聯(lián)公司擁有網(wǎng)絡營銷運營團隊,以豐富的互聯(lián)網(wǎng)營銷經(jīng)驗助力企業(yè)精準獲客,真正落地解決中小企業(yè)營銷獲客難題,做到“讓獲客更簡單”。自創(chuàng)立至今,成功用技術(shù)實力解決了企業(yè)“網(wǎng)站建設、網(wǎng)絡品牌塑造、網(wǎng)絡營銷”三大難題,同時降低了營銷成本,提高了有效客戶轉(zhuǎn)化率,獲得了眾多企業(yè)客戶的高度認可!

java反射

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

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

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

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

Java中編譯類型有兩種:

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

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

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

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

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

實現(xiàn)Java反射機制的類都位于java.lang.reflect包中:

1、Class類:代表一個類

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

3、Method類:代表類的方法

4、Constructor類:代表類的構(gòu)造方法

5、Array類:提供了動態(tài)創(chuàng)建數(shù)組,以及訪問數(shù)組的元素的靜態(tài)方法

使用

java反射的作用

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

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

/**
 * 獲取Class對象的三種方式
 * 1 Object ——> getClass();
 * 2 任何數(shù)據(jù)類型(包括基本數(shù)據(jù)類型)都有一個“靜態(tài)”的class屬性
 * 3 通過Class類的靜態(tài)方法:forName(String  className)(常用)
 *
 */
public class Fanshe {
	public static void main(String[] args) {
		//第一種方式獲取Class對象  
		Student stu1 = new Student();//這一new 產(chǎn)生一個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("*****************獲取公有、無參的構(gòu)造方法*************");
		Constructor con = clazz.getConstructor(null);
		//1>、因為是無參的構(gòu)造方法所以類型是一個null,不寫也可以:這里需要的是一個參數(shù)的類型,切記是類型
		//2>、返回的是描述這個無參構(gòu)造函數(shù)的類對象。
 
 
		System.out.println("*************獲取公有字段**并調(diào)用*****************");
		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);//需要兩個參數(shù),一個是要調(diào)用的對象(獲取有反射),一個是實參
		System.out.println("返回值:" + result);
 
	}
}

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


新聞標題:java反射的作用
轉(zhuǎn)載源于:http://weahome.cn/article/josgjd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部