黑马程序员技术交流社区
标题:
2个问题!
[打印本页]
作者:
NNERO
时间:
2014-4-16 17:30
标题:
2个问题!
本帖最后由 NNERO 于 2014-4-16 19:22 编辑
//InputStream ips = new FileInputStream("config.properties");//父类创建子类对象
InputStream ips = ReflectDemo2.class.getResourceAsStream("reflectpratice/config.proerties");
Properties props = new Properties();//使用properties提取键值对
props.load(ips);
ips.close();
String className = props.getProperty("className");
Collection collections = (Collection)Class.forName(className).newInstance();//使用反射创建对象
ReflectPoint r1 = new ReflectPoint(5,5);//创建对象
ReflectPoint r2 = new ReflectPoint(6,4);
ReflectPoint r3 = new ReflectPoint(5,5);
collections.add(r1);//添加对象到集合中
collections.add(r2);
collections.add(r3);
System.out.println(collections.size());//打印集合中对象的数量
复制代码
2个问题:
第一个问题:
//InputStream ips = new FileInputStream("config.properties");//父类创建子类对象 这里为何要用父类创建子类,有什么好处?
第二个问题:这个程序运行出错:
Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:434)
at java.util.Properties.load0(Properties.java:353)
at java.util.Properties.load(Properties.java:341)
at reflectpractice.ReflectDemo2.main(ReflectDemo2.java:15)
不知道 怎么的。可能是路径问题,但是我解决不了。Eclipse的classpath路径是在哪儿。。?
作者:
⒈心只霸占沵
时间:
2014-4-16 17:57
1.体现了java中的多态,就像你做的这道题
Collection collections = (Collection)Class.forName(className).newInstance();//使用反射创建对象
这句代码是将properties文件中的字符串反射成子类 假如你properties文件中写的是className=java.util.ArrayList
则相当于 Collection collection=new ArrayList(); //当然可以
如果你写的是 ArrayList collections=(ArrayList)Class.forName(className).newInstance();//也可以
但是如果你以后 配置文件里要改成 className=java.util.LinkedList
那 ArrayList collections=(ArrayList)Class.forName(className).newInstance();//就无法通过了
意思就是说:用多态的方式可以增强程序的扩展 性能,你以后就不用改代码了
2.路径问题的话
如果你写的是相对路径,默认应该是从src下找,如果文件是在src写那你应该写的是
InputStream ips = ReflectDemo2.class.getResourceAsStream("config.proerties");
如果你写的是
InputStream ips = ReflectDemo2.class.getResourceAsStream("reflectpratice/config.proerties");
那src写应该有一个名字叫reflectpratice的包,properties文件应该是放在这个包中
如果reflectpratice 是工程的名字的话
那properties文件就应该在 放在src下
作者:
NNERO
时间:
2014-4-16 19:21
原来如此,多态体现拓展性, 而classpath是在src下。了解
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2