------- android培训、java培训、期待与您交流! ----------
一.javabean
内省(IntroSpector)-->JavaBean-->特殊的java类
JavaBean这种类中方法的名字要按特定的规则来起名字。
Class Person
{
}
{
}
}
可以把一个javabean当做一个普通的类进行操作。
一个普通的类不一定可以当做javabean来操作(如果由get set方法就可以当做javabean来操作)。
如果把这个类当做javabean来看,那javabean的属性是根据get和set方法的名称推断出来的。而不是根据内部成员变量的名称推断出来的。
去掉set和get之后剩下的就是javabean属性名
Age-->如果第二个字母是小的,则把第一个字母变成小的-->age
gettime-->time
setTime-->time
getCPU-->CPU
把类按照javabean的方式来处理的方便之处。
JavaBean是一种特殊的类,主要用于传递数据信息,这种Java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
在两个模块中传递多个信息,可以将这些信息封装到一个Javabean中,这种JavaBean的实例对象通常称之为值对象(Value_Object,VO)。这些信息在类中用私有字段来存储。如果读取或者设置这些字段的值,则需要通过一些相应的方法来访问。
ReflectPoint pt1 = new ReflectPoint(3,5);
String propertyName = "x";要获取的javabean的属性的名字
PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
Method methodGetX = pd.getReadMethod();
Object retVal = methodGetX.invoke(pt1);//get方法没有参数。不知道返回值类型,定义成Object
Method methodSetX = pd.getWriteMethod();
methodSetX.invoke(pt1,7);//set方法接收参数
pt1.getX();
将对JavaBean的属性的Set和Get抽取成方法
private static void setProperty(Object pt1, String propertyName,
BeanUtils工具包。
该工具包提供了设置和读取javabean属性的方法。
BeanUtils.getProperty(pt1,"x");//返回类型是字符串。
BeanUtils.setProperty(pt1,"x","9");//参数是字符串
好处1:把set和get方法的成员的类型都当做字符串来操作,完成了自动转换。
BeanUtils.setProperty(pt1,"birtyday.time","111")//Date能看成一个javabean,birtyday.time是一个复核属性。
好处2:支持属性的级联操作。
好处3:copyProperties方法把一个对象身上的属性拷贝到另一个对象身上。
可以把一个javabean的属性转换成map集合。
populate 把map集合中键值填充到javabean属性中。
Map map = {name:"zxx",age,age:18};
BeanUtils.setProperty(map,"name","lhm");//把map集合的name属性的值改为"lhx";
PropertyUtils.setProperty(pt1,"x",9);//这里的9要写x属性的本来类型。不想进行类型转换就用这个
—————————————————————————————————————————————————
2.了解注解及java提供的几个基本注解
注解相当于一种标记,在程序中加了注解就等同于为程序打上了某种标记,没加,则等于没有某种标记,以后,java编译器,开发工具和其他程序可以用反射了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事,标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
注解是个类,用这个注解就是创建这个类的实例对象。
@sSuppressWarning("deprecation")不要提示过时了。
@Deprecated 提示这个方法过时了
@override 判断是覆盖父类。在编译器判断。不是就报错
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import cn.itcast.day1.EnumTest;
import cn.itcast.day1.EnumTest.TrafficLamp;
@Retention(RetentionPolicy.RUNTIME)//注解的注解,称之为元注解。Retention这个注解指示注释类型要保留多久,如果不存在Retention注解,则保留策略默认为RetentionPolicy.CLASS。
注解可能存在的阶段java源文件,class文件,内存中的字节码。
@override在java源文件阶段。RetentionPolicy.SOURCE
@SuppressWarning在java源文件阶段RetentionPolicy.SOURCE
@Deprecated在内存中的字节码 RetentionPolicy.RUNTIME
@Target({ElementType.METHOD,ElementType.TYPE})//
指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在 Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。 例如,此元注释指示该声明类型是其自身,即元注释类型。它只能用在注释类型声明上:
ANNOTATION_TYPE |
CONSTRUCTOR |
FIELD |
LOCAL_VARIABLE |
METHOD |
PACKAGE |
PARAMETER |
TYPE |
public @interface ItcastAnnotation {
}
if(AnnotationTest.class.isAnnotatioPresent(ItcastAnnotation.class))
@ItcastAnnotation(annotationAttr = @MetaAnnotation("flx"),color = "red",value="abc",arrayAttr= 1)
public class AnnotationTest {
}
————————————————————————————————————————————————
3.泛型
数组中的元素不能使用参数化类型。
jdk1.5的集合类希望你在定义集合时,明确表示你要向集合中装哪种类型的数据,无法加入指定类型以外的数据
泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会除掉类型。
当从集合中获取一个对象时,编译器也可以知道这个对象的类型,不需要对对象进行强制类型转换。
Constructor constructor1 = String.class.getConstructor(StringBuffer.class);//指定是String类型的构造器。
跳过编译器用反射可以向带类型参数的集合中添加其他类型的元素,因为编译完的结果已经去类型化了。
Collectioncollection3 = new ArrayList();
Method methodAdd = collection3.getClass().getMethod("add",Object.class);
methodAdd.invoke(collection3,1);
泛型是给编译器看的,运行的时候没有泛型的痕迹了。
定义一个方法打印任何类型参数集合中的数据
public static void printCollection(Collection
------- android培训、java培训、期待与您交流! ----------详细请查看:http://edu.csdn.net