1、反射的概念java
1.反射的概念是有Smith在1982年首次提出,主要是指程序能夠訪問、檢測和修改它自己狀態或者行爲的一種能力,而且根據自身行爲的狀態和結果,調整或者修改應用所描述行爲的狀態和相關的語義。node
2.Java中,反射是一種強大的工具,它使您可以建立靈活的代碼,這些代碼能夠在運行時進行裝配,無需在組件中進行源代碼的連接。git
3.反射容許咱們在編寫與執行的時候,使咱們的代碼可以裝載到JVM中的類的內部信息,而不是源代碼中選定的類協做的代碼,這使得放射成爲構建靈活的應用的主要工具,可是須要主要注意的是,若是使用不當,會形成不可預知的結果。github
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屬性文件來達到修改建立對象的方式 } }
2、獲取某個指定的屬性,而且能夠打破封裝性安全
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」這個值 } }
3、源碼:微信
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.javaui
2.CSDN:https://blog.csdn.net/weixin_44630050
3.博客園:https://www.cnblogs.com/ruigege0000/
4.歡迎關注微信公衆號:傅里葉變換,我的公衆號,僅用於學習交流,後臺回覆」禮包「,獲取大數據學習資料