一、反射的概念
1.反射的概念是有Smith在1982年首次提出,主要是指程式可以訪問、檢測和修改它本身狀態或者行為的一種能力,并且根據自身行為的狀態和結果,調整或者修改應用所描述行為的狀態和相關的語意,
2.Java中,反射是一種強大的工具,它使您能夠創建靈活的代碼,這些代碼可以在運行時進行裝配,無需在組件中進行源代碼的鏈接,
3.反射允許我們在撰寫與執行的時候,使我們的代碼能夠裝載到JVM中的類的內部資訊,而不是源代碼中選定的類協作的代碼,這使得放射成為構建靈活的應用的主要工具,但是需要主要注意的是,如果使用不當,會造成不可預知的結果,?
package com.bjpowernode.java_learning; import java.util.Properties; import java.io.*; import java.util.*; import java.io.FileReader; //import com.bjpowernode.java_learning.classInfo.properties; ? public class D116_2_ClassInfo { public static void main(String[] args) throws Exception{ //1.創建屬性物件 Properties p = new Properties(); //2.創建流 String address = "C:\\Users\\lenovo1\\Workspaces\\MyEclipse CI\\Java_learning\\src\\com\\bjpowernode\\java_learning\\classInfo.properties"; FileReader fr = new FileReader(address); //3.加載 p.load(fr); //4.關閉流 fr.close(); //通過key獲取value String className = p.getProperty("className"); System.out.println(className); //通過反射機制創建物件 Class c = Class.forName(className); //創建物件 Object o = c.newInstance(); System.out.println(o); //這種方式與我們直接new一個物件有什么優勢 //這種方式我們可以在外面設定properties屬性檔案來達到修改創建物件的方式 } }

二、獲取某個指定的屬性,并且可以打破封裝性
package com.bjpowernode.java_learning; import java.lang.reflect.*; ? public class D117_2_Reflect { public static void main(String[] args) throws Exception{ //獲取一個類 Class c = Class.forName("com.bjpowernode.java_learning.D117_1_Reflect"); //獲取id屬性 Field idF = c.getDeclaredField("id"); // System.out.println(idF); //獲取到某個特定的屬性?set,get Object o = c.newInstance(); //因為id是private,所以需要打破封裝,下面這個方法可以打破權限 idF.setAccessible(true); //使用反射機制可以打破java程式的封裝性,導致了Java物件的屬性變得不安全了 //set方法,void idF.set(Object obj,Object value); idF.set(o, "004512");//給物件o的idF屬性賦上“004512”這個值 } }
三、原始碼:
D117_1_Reflect.java
D117_2_Reflect.java
https://github.com/ruigege66/Java/blob/master/D117_1_Reflect.java
https://github.com/ruigege66/Java/blob/master/D117_2_Reflect.java
2.CSDN:https://blog.csdn.net/weixin_44630050
3.博客園:https://www.cnblogs.com/ruigege0000/
4.歡迎關注微信公眾號:傅里葉變換,個人公眾號,僅用于學習交流,后臺回復”禮包“,獲取大資料學習資料

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/184518.html
標籤:Java
上一篇:可見性、原子性和有序性
下一篇:《java并發編程藝術》學習筆記
