黑马程序员-小框架的实现

来源:互联网 发布:大数据修炼系统醉寒123 编辑:程序博客网 时间:2024/06/04 18:16

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

采用配置文件加反射的方式创建HashSet和ArrayList并运行出结果。

1、className=java.util.HashSet

import java.io.FileInputStream;import java.io.InputStream;import java.util.Collection;import java.util.Properties;class FrameWorkArray{    private int x;    private int y;    public FrameWorkArray(int x,int y){        this.x=x;        this.y=y;    }}public class Bb{    public static void main(String[] args)throws Exception {        //创建3个构造方法        FrameWorkArray fwa1=new FrameWorkArray(5, 5);        FrameWorkArray fwa2=new FrameWorkArray(6, 6);        FrameWorkArray fwa3=new FrameWorkArray(5, 5);        //加载config.properties文件,内容为className=java.util.ArrayList,可更改        InputStream input=new FileInputStream("config.properties");        //创建配置文件        Properties pro=new Properties();        //从输入流倒入配置文件        pro.load(input);        //关闭输入流,否则导致内存泄漏        input.close();        //根据key得到value值        String className=pro.getProperty("className");        //根据className得到Collection的对象        Collection coll=(Collection)Class.forName(className).newInstance();        //填入对象        coll.add(fwa1);        coll.add(fwa2);        coll.add(fwa3);        coll.add(fwa1);        System.out.println(coll.size());    }}输出结果为 3
下面将className改为java.util.ArrayList

<pre name="code" class="java">import java.io.FileInputStream;import java.io.InputStream;import java.util.Collection;import java.util.Properties;class FrameWorkArray{    private int x;    private int y;    public FrameWorkArray(int x,int y){        this.x=x;        this.y=y;    }}public class Bb{    public static void main(String[] args)throws Exception {        //创建3个构造方法        FrameWorkArray fwa1=new FrameWorkArray(5, 5);        FrameWorkArray fwa2=new FrameWorkArray(6, 6);        FrameWorkArray fwa3=new FrameWorkArray(5, 5);        //加载config.properties文件,内容为className=java.util.ArrayList,可更改        InputStream input=new FileInputStream("config.properties");        //创建配置文件        Properties pro=new Properties();        //从输入流倒入配置文件        pro.load(input);        //关闭输入流,否则导致内存泄漏        input.close();        //根据key得到value值        String className=pro.getProperty("className");        //根据className得到Collection的对象        Collection coll=(Collection)Class.forName(className).newInstance();        //填入对象        coll.add(fwa1);        coll.add(fwa2);        coll.add(fwa3);        coll.add(fwa1);        System.out.println(coll.size());    }}
输出结果为 4

以上两个程序的代码并没有改变,但结果不同。这是因为程序通过反射得到配置文件的内容,并创建不同的子类对象。

        在程序中从输入流读进配置文件的内容后,一定要关闭输入流。close()如果没有的话与对象关联的系统资源没被释放。例如java有一个与操作系统的某一个窗口相对应的对象,当那个窗口使用完毕后不掉用close()关掉那个窗口的话,等于窗口对应的对象被java当成垃圾回收的话就无法再关掉那个窗口了(因为和窗口对应的对象不存在了,就无法再关掉窗口了),这就造成了内存泄漏。

       properties相当于HashMap,key--value,key--value......但与HashMap相比扩展了一些功能,他可以将自己内存里的键值对存到硬盘里去文件里边去,他也可以在初始化的时候从一个文件里把自己的键值对加载进来,这与HashMap一个个手工填入值呈对比。 






0 0