标签:
Class.forName(classNameStr).getMethod(methodName).invoke(obj,Class)
比较两个集合的运行结果差异。
package com.itcast.day1; import java.io.FileInputStream; import java.io.InputStream; import java.util.Collection; import java.util.HashSet; import java.util.Properties; import java.util.ArrayList; public class ReflectTest3 { public static void main(String[] args)throws Exception { InputStream ips = new FileInputStream("config.properties"); Properties props=new Properties(); props.load(ips);//1 硬盘加载到内存 ,2从内存中加载到props对象中 ips.close();//关闭是指释放ips加载的资源,ips对象不会随着close方法的执行而被JVM回收如果不关闭,则有小小的内存泄露 。 String className= props.getProperty("className"); System.out.println(className); Collection collections=(Collection)Class.forName(className).newInstance(); ReflectPoint pt1=new ReflectPoint(3,3); collections.add(pt1);//放入 } }
config.properties文件放在哪里呢?
相对当前工作路径,在实际项目中,几乎没有这么干的!
实际项目一定要用绝对路径,但绝对路径不是硬编码!
实际项目中应当:
config.properties文件在硬盘上的存放位置由用户指定,用户可配置“主目录”/config.properties。
getRealPath();// 主目录/config.properties
类加载器通常用来加载 *.class文件,既然 .class文件都可以加载进来(强大!),那么加载其他配置文件,岂不是小菜一碟!就看愿不愿意加载了。
RefectTest3.class.geteClassLoader().getResourceAsStream()//适用于只读配置文件时
框架的配置文件都放在类路径下,原因是框架内部读取配置文件都是在采用类加载器加载方式,而类加载器加载文件时会从类路径下查找。
package com.itcast.day1; import java.io.File; import java.io.InputStream; import java.net.URL; import java.util.Collection; import java.util.Properties; public class ReflectTest3 { public static void main(String[] args)throws Exception { //在类路径下找文件,转换成输入流 InputStream ips=null; // ips=ReflectTest3.class.getClassLoader().getResourceAsStream // ("com"+File.separator+"itcast"+File.separator+"day1"+File.separator+"config.properties"); // ips=ReflectTest3.class.getResourceAsStream("config.properties");//在本包下找 //Class提供了一种更简洁的方式来加载配置文件(和class.newInstance方法省略了得到构造器类似),在类路径的根目录下开始找 ips=ReflectTest3.class.getResourceAsStream ("/"+"com"+File.separator+"itcast"+File.separator+"day1"+File.separator+"config.properties"); Properties props=new Properties(); props.load(ips);//1 硬盘加载到内存 ,2从内存中加载到props对象中 ips.close();//关闭是指释放ips加载的资源,ips对象不会随着close方法的执行而被JVM回收如果不关闭,则有小小的内存泄露 。 String className= props.getProperty("className"); System.out.println(className); Collection collections=(Collection)Class.forName(className).newInstance(); ReflectPoint pt1=new ReflectPoint(3,3); collections.add(pt1);//放入 System.out.println(collections.size()); } }
标签:
原文地址:http://www.cnblogs.com/qq-757617012/p/4255452.html