Java 反射案例
阿新 • • 發佈:2020-12-26
1案例
需求:需要寫一個“框架”,不能改變該類的任何程式碼的前提下,可以幫我們建立任意類的物件,並且執行其中的任意方法
1.1實現
1.1.1配置檔案
1.將需要建立的物件的全類名和需要執行的方法定義在配置檔案中
在src的目錄下建立pro.properties檔案,具體配置檔案程式碼如下
className = com.levizhao.demo01.reflection.Student //類的路徑
methodName = sleep //類中的函式
2.反射
1.在程式中載入讀取配置檔案
2.使用反射技術來載入類檔案進記憶體
3.建立物件
4.執行方法
ReflectTest.java程式碼如下
package com.levizhao.demo01.reflection; /* 框架類 */ import java.io.InputStream; import java.lang.reflect.Method; import java.util.Properties; public class ReflectTest { public static void main(String[] args) throws Exception { //可以建立任意類物件,可以建立任意類物件,執行任意方法 //1.載入配置檔案 //1.1建立Properties物件 Properties pro = new Properties(); //1.2載入配置檔案,轉換為一個集合 //1.2.1獲取class目錄下的配置檔案 ClassLoader classLoader = ReflectTest.class.getClassLoader(); InputStream is = classLoader.getResourceAsStream("pro.properties"); pro.load(is); //2.獲取配置檔案中的定義的資料 String className = pro.getProperty("className"); String methodName = pro.getProperty("methodName"); //3.載入該類進記憶體 Class aClass = Class.forName(className); //4.建立物件 Object o = aClass.newInstance(); //5.獲取方法物件 Method method = aClass.getMethod(methodName); //6.執行方法 method.invoke(o); } }
3.總結
這樣的好處是僅更改配置檔案就可以增加程式的擴充套件性,不用再修改程式碼就可以實現程式碼的靈活變動。這就是反射的魅力!