---------------------- android培训、java培训、期待与您交流! ----------------------
内省的概念理解:
IntroSpector--》主要用于对JavaBean进行操作--》JavaBean是特殊的Java类,符合特殊规则的类。
JavaBean:为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。即有getXXX(),setXXX()方法。
JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自身机制发现和操作这些JavaBean 属性。
jaavabean属性介绍:
去掉get、set名称后为Age--》如果第二个字幕是小写,则吧第一个字幕变成小写--》age
例子:
gettime-->time
getTime-->time
getCPU-->CPU
如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。这些信息在类中用私有字段来储存,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问,JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。
好处:
JDK中提供了对JAVABEAN进行操作的一些API,这套API称为内省。如果自己去通过getX方法访问私有的x,有一定难度。用内省这套API操作JavaBean比用普通类的方式更方便。
eclipse技巧: 重构---抽取方法
对JavaBean的简单内省操作:
JavaBean对象为值对象,即传递值的对象,成为VO(Value Object)
PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass())
Method methodGetX = pd.getReadMethod();
object retval = methodGetX.invoke(pt1);
对JavaBean的复杂内省操作:
BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass());//把java类当成javabean来看
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
使用BeanUtils工具包操作JavaBean:
导入beanutil jar包,放入对应工程的lib下,然后右键添加进去。
BeanUtil.setProperty(对象,"属性","值");
BeanUtil.getProperty(对象,"属性");
BeanUtil方法,在"值"得位置,以字符串对其属性进行操作。
java7的新特性——定义map的方法
Map map= (name:"zxx",age:18)
BeanUtils.setProperty(map,"name","18");
PropertyUtils.setProperty(对象,"属性",值);
PropertyUtils.getProperty(对象,"属性");
PropertyUtils方法在"值"得位置,以该对象属性本身类型进行操作。
33.(jdk1.5新特性)了解和入门注解的应用:
@Deprecated——标注对应方法已经过时。
直接在刚才的类中增加一个方法,并加上@deprecated标注,在另外一个类中调用这个方法。
@Override--判断是否是重写
public boolean equals(Reflect other)方法与HashSet结合讲解。
@SuppressWarnings
如果方法体中有过时的方法,那么可以在方法上面一行加@SuppressWarnings("deprecation")
注解可以加到类上面、成员变量上面、局部变量上面、方法上面
总结:注解相当于一种标记,加了注释就等于打上了某种标记,没加,则等于没有某种标记。
在java.lang包,可以看到JDK中提供最基本的annotation。
34.注解的定义和反射调用
良好的变成习惯:
类名、属性名:名词、形容词+名词
方法名:动词、动词+名词
注解的定义与反射调用:
注解的应用结构
注解类《--应用了"注解类"的类《--对"应用了注解类的类"进行反射操作的类
@Target在注解类中加注解,则这个注解为元注解。
注解的生命周期啊的三个阶段:
java源文件-->class文件-->内存中的字节码。
RetetionPolicy.SOURCE、RetetionPolicy.CLASS、RetetionPolicy.RUNTIME;
分别对应其字节码。
为注解增加各种属性:
数组类型的属性:
int [] arrayAttr() default{1,2,3};
@MyAnnotation(arrayAttr={2,3,4});
如果数组属性中有一个元素,这时候属性值部分可以省略大括号。
枚举类型的属性:
EnumTest TrafficLamp lamp();
@MyAnnotation(lame=EnumTest.TrafficLame.GREEN);
注解类型的属性:
使用的时候:
@注解名(方法1="属性值",方法2="属性值")
如果只有一个属性或其中有一个属性为缺省属性,则使用的时候
@注解名("属性值")
注解的返回值还是注解,返回的注解上面还有属性。
注释可以返回:8个基本类型、Class类型、枚举类型、注解类型、刚才这些前面类型的数组,除此之外其他不可以返回。
---------------------- android培训、 java培训、期待与您交流! ---------------------- 详细请查看: http://edu.csdn.net/heima