java反射实例_关于java反射的一个案例
案例:
*需求:“寫一個框架”,可以幫我們創(chuàng)建任意類的對象,并且執(zhí)行其中任意的方法。
*實現(xiàn):
1.配置文件
2.反射
*步驟:
1.將需要創(chuàng)建的對象的全類名和需要執(zhí)行的方法定義在配置文件中
2.在程序中加載讀取配置文件
3.使用反射技術(shù)來加載類文件進內(nèi)存
4.創(chuàng)建對象
5.執(zhí)行方法
具體實現(xiàn)部分:
新建一個Java項目,項目結(jié)構(gòu)如下:
Person實體類代碼:
package com.shao.li;
public class Person {
public void eat(){
System.out.println("eat..........");
}
}
Student實體類代碼:
package com.shao.li;
public class Student {
public void sleep(){
System.out.print("sleep......");
}
}
pro.propertiesp配置文件內(nèi)容:
className=com.shao.li.Person
methodName=eat
ReflectTest代碼:
package com.shao.li;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;
/**
* 框架類
*/
public class ReflectTest {
public static void main(String[] args) throws Exception {
//可以創(chuàng)建任意類的對象,可以執(zhí)行任意方法
/*
前提,不能改變該類的任何代碼,可以創(chuàng)建任意類的對象,可以執(zhí)行任意方法
*/
/*Person p =new Person()
p.eat();
*/
/*Student stu = new Student();
stu.sleep();
*/
//1.加載配置文件
//1.1創(chuàng)建Properties對象
Properties pro= new Properties();
//1.2加載配置文件,轉(zhuǎn)換為一個集合
//1.2.1獲取class目錄下的配置文件
ClassLoader classLoader=ReflectTest.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("pro.properties");
pro.load(is);
//2.獲取配置文件中定義的數(shù)據(jù)
String className=pro.getProperty("className");
String methodName = pro.getProperty("methodName");
// 3.加載該類進內(nèi)存
Class cls=Class.forName(className);
//4.創(chuàng)建對象
Object obj = cls.newInstance();
//5.獲取方法對象
Method method = cls.getMethod(methodName);
//6.執(zhí)行方法
method.invoke(obj);
}
}
執(zhí)行ReflectTeste'類的main方法,輸出結(jié)果為:
eat..........
Process finished with exit code 0
改變配置文件pro.properties的內(nèi)容為:
className=com.shao.li.Student
methodName=sleep
再次執(zhí)行'程序,結(jié)果為:
sleep......
Process finished with exit code 0
總結(jié)
以上是生活随笔為你收集整理的java反射实例_关于java反射的一个案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql拆分字符串后行转列_mysql
- 下一篇: eclipse java 注释_Ecli