
正文
java反射机制_读取properties
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
代码:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; /**
* 反射特点:
* 可以在运行期间,动态加载一个类进来,动态new一个对象
* 动态了解对象内部的结构,动态调用这个对象的某一些方法
* 反射好处:
* 在配置文件里只写类的名字,可以动态把类加载进来
* @author Administrator
*
*/
public class TestReflection {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ //String str = "T";
String str = ReadProperties.getClassName(); //把类load到内存,返回Class类型。
Class cls = Class.forName(str);
Object o = cls.newInstance(); //new 一个对象 //得到cls类所有的public方法
Method[] methods = cls.getMethods();
/*//读取所有方法名
for(Method m :methods){
System.out.println(m.getName());
}*/ //调用方法 m2
for(Method m :methods){
if(m.getName().equals("m2")){
//可变参数的方法,o是new的对象
m.invoke(o); } if(m.getName().equals("m1")){
//可变参数的方法
m.invoke(o,1,9);
//得到m1方法的参数类型
for(Class paramType : m.getParameterTypes()){
System.out.println(paramType.getName());
}
}
if(m.getName().equals("getS")){
//得到getS方法的返回值类型
Class returnType = m.getReturnType();
System.out.println("getS returnType is :"+returnType); }
} }
} class T {
static{
//测试是否类是否load到内存
System.out.println("T loaded...");
} public T(){
//测试T是否被调用
System.out.println("T constructed...");
}
int i;
String s; public void m1(int i,int j) {
this.i = i+j;
System.out.println("i ="+this.i);
}
public void m2(){
System.out.println("m2 invoked...");
} public String getS() {
return s;
}
}
读取properties配置的代码:
配置文件内容:
Class=T
import java.io.InputStream;
import java.util.Properties;
public class ReadProperties { static private String className = null;
static{
loads();
}
synchronized static public void loads(){
if(className == null)
{
InputStream is = ReadProperties.class.getResourceAsStream("/test.properties");
Properties dbProps = new Properties();
try {
dbProps.load(is);
className = dbProps.getProperty("Class"); }
catch (Exception e) {
System.err.println("不能读取属性文件. " +
"请确保配置文件在CLASSPATH指定的路径中");
}
}
}
public static String getClassName() {
if(className==null)
loads();
return className;
} }
运行结果:
T loaded...
T constructed...
m2 invoked...
i =10
int
int
getS returnType is :class java.lang.String







