一、反射的概念 1.反射的概念是有Smith在1982年首次提出,主要是指程式可以訪問、檢測和修改它本身狀態或者行為的一種能力,並且根據自身行為的狀態和結果,調整或者修改應用所描述行為的狀態和相關的語義。 2.Java中,反射是一種強大的工具,它使您能夠創建靈活的代碼,這些代碼可以在運行時進行裝配, ...
一、反射的概念
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.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料