java反射机制基础

来源:互联网 发布:家用动感单车推荐知乎 编辑:程序博客网 时间:2024/05/11 20:10
//LearnReflect.javapackage cn.itcast.reflect;import java.io.File;import java.io.FileInputStream;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.Properties;public class LearnReflect {/*** @param args* @throws Exception * @throws InstantiationException */public static void main(String[] args) throws InstantiationException, Exception {MainCard man=new MainCard();/** 原来旧的方法*/man.harddisk();man.memory();/** 扩展后加入的类和方法*///读取配置文件File file=new File("pci.properties");FileInputStream fis=new FileInputStream(file);Properties properties=new Properties();/** 加载流*/properties.load(fis);String pciname=null;/** 循环读取配置文件的信息*/for(int i=1;i<=properties.size();i++){pciname=properties.getProperty("pci"+i);OutRun(man, pciname);}fis.close();}/** 扩展类方法的使用*/private static void OutRun(MainCard man, String pciname) throws Exception {Class clazz=Class.forName(pciname);PCI pci=(PCI)clazz.newInstance();/** 使用实现了PCI借口的类的方法*/man.runPCI(pci);/** 有参函数的的调用*/Method method=clazz.getMethod("hello", String.class);/** 创建一个默认的构造函数对象*/Object obj=clazz.newInstance();/** 函数的调用和参数的注入*/method.invoke(obj, "Hello World!");//设置字段的值Field field=clazz.getDeclaredField("name");field.set(obj, "张三");/*还有很多* 1、获取字段*指定字段(无论是public,protect或private)的获取和赋值*get.getDeclaredField("name")*get.getDeclaredFields();*还有get.getFiled("name");获取指定public的字段*还有get.getFileds();获取所有public的字段*2、获取方法*指定方法(无论是public,protect或private)的获取和赋值*get.getDeclaredMethod("name");*获取所有的方法(无论是public,protect或private)*get.getDeclaredMethods();*还有get.getMethod("name");获取指定public的字段*还有get.getMethods();获取所有public的字段*3、获取构造函数**getDeclaredConstructor(Class<?>... parameterTypes)*/}}//MainCard.javapackage cn.itcast.reflect;public class MainCard {public void harddisk(){System.out.println("harddisk  running ....");}public void memory(){System.out.println("memery  running.....");}public void runPCI(PCI pci){pci.sound();pci.look();}}//SoundCard.javapackage cn.itcast.reflect;public class SoundCard implements PCI{private String name;public String heheString;@Overridepublic void look() {System.out.println("look  running....");}@Overridepublic void sound() {System.out.println("sound  running....");}public void  hello(String string){System.out.println("Say" +string+ "to you !");}}//pci.properties配置文件pci1=cn.itcast.reflect.SoundCard


0 0
原创粉丝点击