尽可能的使用绝对路径,不要使用相对路径。使用相对路径在将工程bin文件交给用户时,配置文件无法提交。
不管相对还是绝对,方法内部都是调用getClassLoader
配置文件的加载往往使用类加载器(框架使用方式,把配置文件放在ClassPath目录下)
六,JavaBean 的简单内省操作
Bean bean = new Bean(1,3);
//面试出题:获取该属性的值
String propertyName = "x";
//"x"-->"X"-->getX-->MethodGetX
//属性描述符 ,指定类为javaBean
PropertyDescriptor pd = new PropertyDescriptor(propertyName,bean.getClass);
//方法类实例方法对象
Method methodGetX = pd.getReadMethod();
//调用methodGetX方法
Object retVal = methodGetX.invoke(bean);
使用BeanUtils工具包操作JavaBean
Bean bean = new Bean();
//当Bean中的属性为Date时候,属性面逐级赋值
BeanUtils.setProperty(bean,"date.time","111");
BeanUtils.getProperty(bean,"date.time");
java7的新特性:
Map map = {name:"111",age:18};
BeanUtils.setProperty(map, "name", "lhm");
七,注解
注解的生命周期:java源文件阶段-> class文件阶段-->内存中的字节码阶段
对应的注解:RetetionPolicy.SOURCE、RetetionPolicy.CLASS、RetetionPolicy.RUNTIME
//要对一个类进行检查,要对此类进行反射获取信息
//检查ItcastAnnotation是否存在
if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class))
@Target元注解
Target的默认值为任何元素,设置Target等于ElementType.METHOD,意思是只能在方法上添加注解,ElementType.TYPE 可以在类上添加
为注解增加高级属性
数组类型的属性
int[] arrayAttr() default{1,2,3}
@MyAnnotation(arrayAttr={2,3,4})
枚举类型的属性
EnumTest.TrafficLamp lamp()
@MyAnnotation(lamp=EnumTest.TrafficLamp.GREEN)
注解类型的属性
MetaAnnotation annotationAttr() default @MetaAnnotation("lhm");
@MytaAnnotation(annotationAttr=@MetaAnnotation("yyy"))
可以认为@MyAnnotation 是 MyAnnotation 类的一个实例对象,同样的道理,可以认为@MetaAnnotation 是 MetaAnnotation类的一个实例对象,调用代码:
MetaAnnotation ma = MyAnnotation.annotationAttr();
System.out.println(ma.value());
八,泛型
泛型集合类的综合案例
变量名的命名法则,当不知道要取什么名时,看可以使用要调用的方法名来当变量名
迭代的条件:实现Iterable<E>接口
对Map进行迭代只能得到Set<Map.Entry<k,v>> 集合。小例子:
Set<Map.Entry<K,V>> entrySet = maps.entrySet();
for(Map.Entry<k,v> entry : entrySet){
System.out.println(entry.getKey()+":"+entry.getValue());
}
自定义泛型
方法添加尖括号<T>即可返回该类型的数据,小例子:
private static <T> T autoConvert(Object obj){
return (T)obj;
}
自定义泛型类的应用
类中多个方法如果需要用到泛型(同一个对象吧,大概这么理解),那么就使用类级别泛型。