黑马程序员_Java基础11
2013-04-02 00:17
323 查看
------- android培训、java培训、期待与您交流!
----------
Introspector类
内省操作:对类的内部属性进行读写操作
使用反射的方式,根据字段的名称,调用对应的setter、getter方法对字段值进行读写操作
IntroSector类的常用方法:
getBeanInfo() 获取BeanInfo对象,此对象拥有Bean的信息
对Javabean操作的扩展工具包:BeanUtils
对JavaBean的操作(setter、getter)
方法的参数可以以字符串的形式传递,方便使用。
而PropertyUtils则以参数原有的类型进行传递和操作JavaBean。
Annotation 注解 - 标记
包、类、成员属性、方法、局部变量
@SupressWarnnings("类名") 告诉编译器抑制警告信息
@Deprecated 将被标识的方法标注为已过时
@Override 标识为覆盖的方法
重写equals方法:equals(Object obj)参数类型应为Object,否则,不能覆盖Object的equals方法,为了保证成功覆盖,可在覆盖的方法上标识此注解@Override
深入注解:注解的定义与反射调用
//定义一个注解类
@interface A {}
//注解类的应用
@A
class B {}
//通过反射操作注解类
class C {
B.class.isAnnotationPresent(A.class);
A a = B.class.getAnnotation(A.class);
}
@Retendtion(RetentionPolicy.RUNTIME)
为注解增加属性
属性的赋值:
名为value的属性,在使用时可省略名称
有两个属性以上,则不可省略
数组类型的属性:如果数组只有一个值,可省略大括号。
枚举类型的属性:
Enum RetentionPolicy
Enum Constant Summary
@Target(ElementType.XXx)
Generic - 泛型
不使用泛型的集合时,存取元素的不变之处:
1.从集合中取元素,要进行转换
2.当对集合中的元素类型不确定时,取出转换时,可能会引起转换错误
【去类型化】 当源码中的集合对象定义了泛型,在代码被编译之后,集合对象的类型信息会被去掉,使程序运行效率不受影响。
通俗理解:泛型是给编译器看的。
所以,在运行期,可以使用反射,对集合进行添加其他类型数据的操作。
ArrayList<E>中的E称为类型变量或类型参数
参数化类型与原始类型的兼容性
参数化类型不考虑类型参数的继承关系,也就是说,定义了什么泛型,就只能装什么类型的参数,父类类型不也不能装 子类类型的参数。
<?>通配符表示任意类型
泛型中 ? 通配符的扩展
限定通配符的下边界:
Vector<? extends Number> :指定的泛型类型可以是Number类及其子类
限定通配符的上边界:
Vector<? super String> :指定的泛型类型可以是String类及其父类
Map.Entry<K,V>类 K-V组合体
此类是Map的子类,因获取Map中的元素时,只能直接转换成Set的元素,原有的K-V无法保存;
而Map.Entry正是解决此问题的中间者,他可以以K-V组合的形式存于Set中,保持Map元素的特性。
HashMap<String, Integer> maps = new HashMap<String, Integer>();
maps.put("zxy", 134);
maps.put("abc", 344);
maps.put("fdb", 555);
Set<Map.Entry<String, Integer>> entrySet = maps.entrySet();
for(Map.Entry<String, Integer> entry : entrySet ) {
System.out.println(entry.getKey() + "::" + entry.getValue());
}
自定义泛型
在方法中使用泛型,返回值之前用<T>表示任意新的类型
public <T> void add(T t){...}
在类上使用泛型:
class SomeClass<E> { ...}
定义泛型类型:在定义类的时候,在类名后加上<T>,表示定义了一个任意类型T
* 静态方法不能使用类定义的泛型类型,如果需要使用,则自己定义在返回类型前。
public static <T> void add(T t){...}
扩展应用:通过反射获得泛型的实际参数类型
通过集合变量无法直接获取集合变量的泛型类型,但是可以通过以此集合变量为参数的方法来获取变量的泛型类型。
比如:已知以变量为参数的某方法名称“applyVector(Vector v)"
Method applyMethod = GenericTest.class.getMethod("applyVector",Vector.class);
Type[] types = applyMethd.getGenericParameterTypes();
ParameterizedType pType = (ParameterizedType)types[0];
System.out.println(pType.getRawType());
System.out.println(pType.getActualTypeArguments()[0]);
------- android培训、java培训、期待与您交流!
----------
详情请查看:http://edu.csdn.net/heima
----------
Introspector类
内省操作:对类的内部属性进行读写操作
使用反射的方式,根据字段的名称,调用对应的setter、getter方法对字段值进行读写操作
IntroSector类的常用方法:
getBeanInfo() 获取BeanInfo对象,此对象拥有Bean的信息
对Javabean操作的扩展工具包:BeanUtils
对JavaBean的操作(setter、getter)
方法的参数可以以字符串的形式传递,方便使用。
而PropertyUtils则以参数原有的类型进行传递和操作JavaBean。
Annotation 注解 - 标记
包、类、成员属性、方法、局部变量
@SupressWarnnings("类名") 告诉编译器抑制警告信息
@Deprecated 将被标识的方法标注为已过时
@Override 标识为覆盖的方法
重写equals方法:equals(Object obj)参数类型应为Object,否则,不能覆盖Object的equals方法,为了保证成功覆盖,可在覆盖的方法上标识此注解@Override
深入注解:注解的定义与反射调用
//定义一个注解类
@interface A {}
//注解类的应用
@A
class B {}
//通过反射操作注解类
class C {
B.class.isAnnotationPresent(A.class);
A a = B.class.getAnnotation(A.class);
}
@Retendtion(RetentionPolicy.RUNTIME)
为注解增加属性
属性的赋值:
名为value的属性,在使用时可省略名称
有两个属性以上,则不可省略
数组类型的属性:如果数组只有一个值,可省略大括号。
枚举类型的属性:
Enum RetentionPolicy
Enum Constant Summary
@Target(ElementType.XXx)
Generic - 泛型
不使用泛型的集合时,存取元素的不变之处:
1.从集合中取元素,要进行转换
2.当对集合中的元素类型不确定时,取出转换时,可能会引起转换错误
【去类型化】 当源码中的集合对象定义了泛型,在代码被编译之后,集合对象的类型信息会被去掉,使程序运行效率不受影响。
通俗理解:泛型是给编译器看的。
所以,在运行期,可以使用反射,对集合进行添加其他类型数据的操作。
ArrayList<E>中的E称为类型变量或类型参数
参数化类型与原始类型的兼容性
参数化类型不考虑类型参数的继承关系,也就是说,定义了什么泛型,就只能装什么类型的参数,父类类型不也不能装 子类类型的参数。
<?>通配符表示任意类型
泛型中 ? 通配符的扩展
限定通配符的下边界:
Vector<? extends Number> :指定的泛型类型可以是Number类及其子类
限定通配符的上边界:
Vector<? super String> :指定的泛型类型可以是String类及其父类
Map.Entry<K,V>类 K-V组合体
此类是Map的子类,因获取Map中的元素时,只能直接转换成Set的元素,原有的K-V无法保存;
而Map.Entry正是解决此问题的中间者,他可以以K-V组合的形式存于Set中,保持Map元素的特性。
HashMap<String, Integer> maps = new HashMap<String, Integer>();
maps.put("zxy", 134);
maps.put("abc", 344);
maps.put("fdb", 555);
Set<Map.Entry<String, Integer>> entrySet = maps.entrySet();
for(Map.Entry<String, Integer> entry : entrySet ) {
System.out.println(entry.getKey() + "::" + entry.getValue());
}
自定义泛型
在方法中使用泛型,返回值之前用<T>表示任意新的类型
public <T> void add(T t){...}
在类上使用泛型:
class SomeClass<E> { ...}
定义泛型类型:在定义类的时候,在类名后加上<T>,表示定义了一个任意类型T
* 静态方法不能使用类定义的泛型类型,如果需要使用,则自己定义在返回类型前。
public static <T> void add(T t){...}
扩展应用:通过反射获得泛型的实际参数类型
通过集合变量无法直接获取集合变量的泛型类型,但是可以通过以此集合变量为参数的方法来获取变量的泛型类型。
比如:已知以变量为参数的某方法名称“applyVector(Vector v)"
Method applyMethod = GenericTest.class.getMethod("applyVector",Vector.class);
Type[] types = applyMethd.getGenericParameterTypes();
ParameterizedType pType = (ParameterizedType)types[0];
System.out.println(pType.getRawType());
System.out.println(pType.getActualTypeArguments()[0]);
------- android培训、java培训、期待与您交流!
----------
详情请查看:http://edu.csdn.net/heima
相关文章推荐
- 黑马程序员—11—java基础:有关线程通信的学习笔记和学习心得体会
- 黑马程序员--Java基础加强--11.【MyEclipse使用快捷键提取方法的要点】【个人总结】
- 【黑马程序员】Java基础11:菜单体系
- 黑马程序员-Java基础总结11——IO流(二)
- 黑马程序员_Java基础_多线程_11
- 黑马程序员--Java基础--11网络编程
- 黑马程序员_java基础笔记(11)...反射
- 黑马程序员_java基础自学11
- 黑马程序员_java基础11-GUI
- 黑马程序员 Java基础学习笔记11 异常
- 黑马程序员_java基础加强11_空中网题解_自己做的答案
- 黑马程序员—11、JAVA基础&网络编程
- 黑马程序员_java基础笔记(11)...反射
- 黑马程序员---java基础之day10-11
- 黑马程序员_java基础学习笔记11_反射
- 黑马程序员-(11)Java基础之面向对象(六)异常
- 黑马程序员-Java基础11交通灯调度系统
- 黑马程序员_Java基础[11]_单列设计模式
- 黑马程序员 11 Java基础教学 - 11 - 集合框架总结
- 黑马程序员__11java基础字符串