反射的应用---实习框架功能

来源:互联网 发布:lasso算法 编辑:程序博客网 时间:2024/05/21 22:44

    学了这几节课的反射,那么反射到底有什么应用呢?

  1. 框架和框架要解决的核心问题

    我去买房子,房子是开发商已经建造好的了,那么我需要做门窗,我还需要买锁,房子就是框架,谁买就是谁的,我在用框架,就是框架在调用我的类(门窗),锁就是工具类,我在调用锁。

    人们不需要自己去建造房子,只需花钱买一个半成品的房子,然后自己去装修,形成一个个不一样的房子,实际上,用框架完成项目也是一样的道理,我们都在用相同的框架,但是却写出出一个个不同的项目,而使用框架我们也大大提高了开发效率。

  2. 写框架的人肯定不能在程序中去new某个类,因为这时候并不知道将来的调用者的行为,所以使用Class.forName()的方式。
  3. 使用配置文件来动态获取类名

    这是config.properties文件的内容,由程序自动读取,获取类名

    className=java.util.HashSet

     

    public class ReflectTest3 {

    public static void main(String[] args) throws Exception {

    InputStream is = new FileInputStream("config.properties");

    //继承了HashTable, 等效HashMap,内存里是KV键值对,但是Properties可以把自己内存

    //的键值对存到硬盘的文件里面去,也可以从文件里把键值对加载进来

    Properties properties = new Properties();

    properties.load(is);

    is.close();//这里不关闭不是说is这个对象不被释放,而是is关联的系统资源没被释放。

    String className = properties.getProperty("className");

    Collection collection = (Collection) Class.forName(className).newInstance();

    ReflectPoint rp1 = new ReflectPoint(3, 3);

    ReflectPoint rp2 = new ReflectPoint(5, 5);

    ReflectPoint rp3 = new ReflectPoint(3, 3);

    //Collection collection = new HashSet();

    collection.add(rp1);

    collection.add(rp2);

    collection.add(rp3);

    collection.add(rp1);

    rp1.y=7;

    //collection.remove(rp1);

    System.out.println(rp1==rp3);

    System.out.println(collection.size());

    }

    }

  4.  管理资源文件路径问题

    //InputStream is = ReflectTest3.class.getClassLoader().getResourceAsStream("com/newTech/day0/config.properties");

    //不经过类加载器,直接由类字节码本身来获得,字节码判断有自己的路径判断出配置文件的路径,相对路径

    //InputStream is = ReflectTest3.class.getResourceAsStream("xx/config.properties");

    //绝对路径,从根目录开始寻找

    InputStream is = ReflectTest3.class.getResourceAsStream("/com/newTech/day0/xx/config.properties");

     

原创粉丝点击