java中的反射机制

来源:互联网 发布:php 数组按某一值排序 编辑:程序博客网 时间:2024/06/12 19:54


java反射机制:

java反射机制是在运行状态中,对于任意一个类(class文件),都能知道这个类的方法和属性。对于任何一个对象,都能调用它的任意一个属性和方法。

这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

(动态获取类的信息,就是反射,也可以理解为对类的解剖)



练习:

电脑类

package com.reflect;public class Mainboard {public static void run(){System.out.println("Mainboard run...");}public static void userPCI(PCI p){if(p!=null){p.open();p.close();}}}


声卡类

package com.reflect;public class SoundCard implements PCI{public void open(){System.out.println("sound open");}public void close(){System.out.println("sound close");}}


对外实现的接口

package com.reflect;public class NetCard implements PCI{@Overridepublic void open() {System.out.println("NetCat open");}@Overridepublic void close() {System.out.println("NetCard close");}}



配置文件


内容:

pci1=com.reflect.SoundCard


测试类

package com.reflect;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.Properties;public class ReflectTest {public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException {Mainboard mb = new Mainboard();mb.run();//获取class文件。在内部实现创建对象的动作File file = new File("pci.properties");Properties p = new Properties();FileInputStream fis = new FileInputStream(file);//把流加载到集合中p.load(fis);for(int i =0;i<p.size();i++){//获取这个类名String pciname=p.getProperty("pci"+(i+1));//加载这个类Class clazz = Class.forName(pciname);//实例化PCI pci =(PCI)clazz.newInstance();mb.userPCI(pci);}fis.close();}}


执行结果:



如果往电脑里加入网卡的话,就创建一个网卡  ,在配置文件中加入网卡的名字就可以

网卡类

package com.reflect;public class NetCard implements PCI{@Overridepublic void open() {System.out.println("NetCat open");}@Overridepublic void close() {System.out.println("NetCard close");}}

配置文件加入类名


再次运行结果: