黑马程序员-Java高新技术(二)

来源:互联网 发布:centos 7 syslog 编辑:程序博客网 时间:2024/04/30 09:29
 五,类加载器:
 尽可能的使用绝对路径,不要使用相对路径。使用相对路径在将工程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;
   }


自定义泛型类的应用
 类中多个方法如果需要用到泛型(同一个对象吧,大概这么理解),那么就使用类级别泛型。