properties、反射
System.getProperty("user.home" ) user.home是用户的主目录 user.dir就是你运行程序时的目录********************************************** Java ****************************************
配置文件获取 /props/xxxx.properties
java.util.ResourceBundle
public static Map<String,String> map = new HashMap<String,String>();
static{
try{
ResourceBundle resb1 = ResourceBundle.getBundle("props.channels-ystpay-scan-alipay");
Enumeration<String> e = resb1.getKeys();
while (e.hasMoreElements()) {
String key = e.nextElement();
map.put(key, resb1.getString(key).trim());
}
}catch(Exception e){
e.printStackTrace();
}
}
public static String getValue(String key){
return map.get(key);
}
****************************************** Java反射 ******************************************** 当一个类被加载以后,Java虚拟机就会自动产生一个Class对象
Class c = Class.forName(strg);
这样获得Class类对象的方法,其实是利用反射API把指定字符串的类加载到内存中,所以也叫类加载器加载方法。这样的话,它会把该类的静态方法和静态属性,以及静态代码全部加载到内存中。但这时候,对象还没有产生。所以为什么静态方法不能访问非静态属性和方法。因为静态方法和属性产生的时机在非静态属性和方法之前
Class<?> clazz = Class.forName("net.xsoftlab.baike.TestReflect");
// 调用TestReflect类中的reflect1方法
Method method = clazz.getMethod("reflect1");
method.invoke(clazz.newInstance());
// Java 反射机制 - 调用某个类的方法1.
// 调用TestReflect的reflect2方法
method = clazz.getMethod("reflect2", int.class, String.class);
method.invoke(clazz.newInstance(), 20, "张三");
获取构造方法
clazz.getConstructors() 所有公有构造方法
clazz.getDeclaredConstructors() 所有的构造方法(包括:私有、受保护、默认、公有)
Constructor con = clazz.getConstructor(null); 获取公有、无参的构造方法
con = clazz.getDeclaredConstructor(char.class); 获取私有构造方法,并调用
System.out.println(con);
//调用构造方法
con.setAccessible(true);//暴力访问(忽略掉访问修饰符)
obj = con.newInstance('男');
获取字段
.getFields() 获取所有公有的字段
.getDeclaredFields() 获取所有的字段(包括私有、受保护、默认的)
.getDeclaredField("xxx") 获取私有字段****并调用
反射机制重设私有成员变量
public static void main(String[] args) {
Reflactt re = new Reflactt("18");
System.out.println(re.getAge());
setFieldValue(re,"age","19");
System.out.println(re.getAge());
}
public static void setFieldValue(Object obj, String fieldName,
String fieldValue) {
Field field = getField(obj, fieldName);
if (field != null) {
try {
field.setAccessible(true);
field.set(obj, fieldValue);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
private static Field getField(Object obj, String fieldName) {
Field field = null;
for (Class<?> clazz=obj.getClass(); clazz != Object.class; clazz=clazz.getSuperclass()) {
try {
field = clazz.getDeclaredField(fieldName);
break;
} catch (NoSuchFieldException e) {
//这里不用做处理,子类没有该字段可能对应的父类有,都没有就返回null。
}
}
return field;
}

浙公网安备 33010602011771号