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