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

------<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一个个手工填入值呈对比。 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值