Java基础加强总结(2)
2011-10-02 11:32
323 查看
一、用类加载器管理资源和配置文件
两种类加载器加载配置文件的方式
InputStream ips1 = ReflectTest2.class.getClassLoader().getResourceAsStream("config.properties");
InputStream ips2 = ReflectTest2.class.getResourceAsStream("config.properties");
二、内省IntroSpector
内省相关的两个类
PropertyDescriptor
BeanInfo
设置和读取一个JavaBean的属性值
三、使用BeanUtils工具包操作JavaBean
支持JavaBean和Map的互转。
可以把一个Bean的属性值拷贝给另一个Bean的属性。
其他方法参见api
Map map = {name:"zhangsan",age:23}//Java7的新特性
四、注解-------(Java5的新特性)
注解相当于一种标记,加了注解就等于打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
JDK提供的三个注解
Deprecated 标记过时
Orerride 重写
SuppressWarnings 消除提醒
注解的应用结构图
元注解
@Target
@Retention其有三种取值:RetetionPolicy.SOURCE(Java源文件)-->RetetionPolicy.CLASS(class文件)-->RetetionPolicy.RUNTIME(内存中的字节码)。默认为RetetionPolicy.CLASS
注解的属性
注解的属性可以是:基本类型、数组、枚举、注解、Class
两种类加载器加载配置文件的方式
InputStream ips1 = ReflectTest2.class.getClassLoader().getResourceAsStream("config.properties");
InputStream ips2 = ReflectTest2.class.getResourceAsStream("config.properties");
二、内省IntroSpector
内省相关的两个类
PropertyDescriptor
BeanInfo
设置和读取一个JavaBean的属性值
private static void setGetX(ReflectPoint pt1)throws Exception { PropertyDescriptor pd = new PropertyDescriptor("x",ReflectPoint.class) ; Method methodSetX = pd.getWriteMethod(); methodSetX.invoke(pt1, 8);//设置X的值 Method methodGetX = pd.getReadMethod(); Object valueX = methodGetX.invoke(pt1);//取得X的值 System.out.println(valueX); }
private static void getBeanPropertys() throws IntrospectionException { BeanInfo beanInfo = Introspector.getBeanInfo(ReflectPoint.class); PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); for(PropertyDescriptor e : pds){ System.out.println(e.getName()); } }
三、使用BeanUtils工具包操作JavaBean
private static void beanUtils(ReflectPoint pt) throws Exception { String val = BeanUtils.getProperty(pt, "x"); System.out.println(val); BeanUtils.setProperty(pt, "x", 9); System.out.println(BeanUtils.getProperty(pt, "x")); //支持属性的级联操作 BeanUtils.setProperty(pt, "birthday.time",111); System.out.println(pt.getBirthday()); System.out.println(BeanUtils.getProperty(pt, "birthday.time")); PropertyUtils.setProperty(pt, "birthday.time",111); Object value = PropertyUtils.getProperty(pt, "birthday.time"); System.out.println(value); }
支持JavaBean和Map的互转。
可以把一个Bean的属性值拷贝给另一个Bean的属性。
其他方法参见api
Map map = {name:"zhangsan",age:23}//Java7的新特性
四、注解-------(Java5的新特性)
注解相当于一种标记,加了注解就等于打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
JDK提供的三个注解
Deprecated 标记过时
Orerride 重写
SuppressWarnings 消除提醒
注解的应用结构图
package day2; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface ItcastAnnotation { }
package day2; @ItcastAnnotation public class AnnotationTest { public static void main(String[] args){ boolean flag = AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class); if(flag){ ItcastAnnotation annotation = (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class); System.out.println(annotation); } } }
元注解
@Target
@Retention其有三种取值:RetetionPolicy.SOURCE(Java源文件)-->RetetionPolicy.CLASS(class文件)-->RetetionPolicy.RUNTIME(内存中的字节码)。默认为RetetionPolicy.CLASS
注解的属性
package day1; public class EnumTest { public enum TrafficLamp{ RED(30){ public TrafficLamp nextLamp(){ return GREEN; } }, GREEN(45){ public TrafficLamp nextLamp(){ return YELLOW; } }, YELLOW(5){ public TrafficLamp nextLamp(){ return RED; } }; public abstract TrafficLamp nextLamp(); private int time; private TrafficLamp(int time){ this.time = time; } } }
package day2; public @interface MetaAnnotation { String value(); }
package day2; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import day1.*; @Retention(RetentionPolicy.RUNTIME) public @interface ItcastAnnotation { String color() default "blue"; String value(); int[] intArray = {2,9,7,0}; EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.GREEN; MetaAnnotation annotationAttr(); }
package day2; @ItcastAnnotation(annotationAttr=@MetaAnnotation("flx"), value = "xx",color="read") public class AnnotationTest { public static void main(String[] args){ boolean flag = AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class); if(flag){ ItcastAnnotation annotation = (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class); System.out.println(annotation); System.out.println(annotation.color()); System.out.println(annotation.intArray.length); System.out.println(annotation.value()); System.out.println(annotation.annotationAttr()); } } }
注解的属性可以是:基本类型、数组、枚举、注解、Class
相关文章推荐
- 黑马程序员--Java基础加强--11.【MyEclipse使用快捷键提取方法的要点】【个人总结】
- Java基础加强总结(一)——注解(Annotation)
- 黑马程序员--Java基础加强--13.利用反射操作泛型II【TypeVariable】【GenericArrayType】【WildcardType】【Type及其子接口的来历】【个人总结】
- 黑马程序员----【java基础加强】张孝祥视频总结1
- Java基础加强总结(一)——注解(Annotation)
- 黑马程序员----【java基础加强】张孝祥视频总结2
- java基础加强--要点总结3
- Java基础加强总结(4)(类加载器)
- 这是我在四天内听完陈老师讲的java基础加强后的总结
- 黑马程序员----【java基础加强】张孝祥视频总结3
- 黑马程序员----------java基础加强之hashSet总结
- 这是我在四天内听完陈老师讲的java基础加强后的总结(1)
- 黑马程序员__关于学习Java基础加强的总结_2
- Java基础加强总结(二)——泛型
- Java基础加强总结——代理(Proxy)
- 黑马程序员__JAVA基础加强--类加载器和代理总结
- 黑马程序员--Java基础加强--16.利用反射操作泛型V【通过Constructor反射解析泛型构造方法】【通过Field反射解析泛型成员变量】【个人总结】
- Java基础加强总结之动态代理(Proxy)
- Java基础加强总结(3)(泛型)
- 黑马程序员--Java基础加强--03.代码简化 书写规律II_参数化数据类型【重载】【多态】【泛型】【泛型限定】【个人总结】