2:注解的作用jdk1.5新特性 ,可以在认为位置任意位置敲写
语法: @注解名(实参)
如:@Override
3:注解的分类1.注释,解释的作用
2.标志检查的作用
3.添加注解的时候可以通过配置传递参数,运行期间通过反射获取到配置的数据,程序中进行使用
4.注解可以存在与Class文件中
5.注解大量的代替了配置文件的存在
按照注解中传递参数分类 标记注解 : 没有参数 单值注解 : 一个参数 完整注解 : 多个参数4:原注解 4.1:什么事原注解
4.2:原注解作用原注解用来修饰自己定义的注解【注解”注解“的注解】
原注解 : 注解注解的注解 @Target 用于描述注解的使用范围(即:被描述的注解可以用在什么地方) @Retention 表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有) @documented 表示使用该注解的元素应被javadoc或类似工具文档化 @Inherited 表示一个注解类型会被自动继承,4.3:使用原注解配置自定义注解特点
自定义注解 : 1.通过@interface自定义注解类型 2.自定义的注解类型默认实现java.lang.annotation Annotation接口 3.自定义的注解类型不能显示的继承其他父类,实现其他接口 4.注解类中可以定义注解类型的字段,特殊的定义方法,需要字段名后面添加() --> 修饰符 类型 字段名(); 5.如果注解类型中只有一个字段,建议这个字段名定义为value,赋值的时候可以直接赋值 6.注解类型中的字段的数据类型,只能为以下几种类型 : 基本数据类型,String,Annotation,枚举类型,或者这几种类型的数组 7.字段的修饰符只能为public|default 8.通过default关键字为字段定义默认值
public class Class003_Defined { //默认给value这个字段复制,如果字段不交value,就需要j=1这种格式 @MyAnnotation("zhangsan") String name; } //这个注解可以写在那个位置 @Target(ElementType.FIELD) //这个注解运行时间 @Retention(RetentionPolicy.RUNTIME) @interface MyAnnotation{ //数据后面需要加() String value(); //defaul表示这个值可以不配置,会有默认值 int j() default -1; }4.4使用自定义注解Demo
public class Class004_FruitList { public static void main(String[] args) throws Exception { FruitList list = new FruitList(); list.pair = 15; System.out.println(list); testFruitList(list,FruitList.class); System.out.println(list); } //注解解析器 : 获取当前对象的每一个属性,判断属性是否存在指定的上货数量,如果没有存在,进一步判断是否存在默认的上货数量,存在获取数量进行复制,不存在不上货 public static FruitList testFruitList(FruitList list,Classcls) throws Exception { //判断是否存在水果清单的实例 if(list==null){ throw new NullPointerException("哪有清单!!!!"); } //获取水果清单类型中的所有属性 Field[] fields = cls.getDeclaredFields(); //遍历每一个属性 for(Field field:fields){ //判断list清单中当前属性是否已经赋值,已经赋值就按照当前已经赋予的值上货 if(field.get(list)==null){ //没有赋值,判断当前属性上是否存在Num注解,如果不存在证明没有默认值 if(field.isAnnotationPresent(Num.class)){ //如果存在,获取默认值,赋值给list对象当前属性 Num num = field.getAnnotation(Num.class); field.set(list,num.value()); } } } return list; } } //水果清单 :类型 class FruitList{ @Num(20) Integer apple; @Num Integer pair; Integer banana; public FruitList() { } public FruitList(Integer apple, Integer pair, Integer banana) { this.apple = apple; this.pair = pair; this.banana = banana; } @Override public String toString() { return "FruitList{" + "apple=" + apple + ", pair=" + pair + ", banana=" + banana + '}'; } } //注解 @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @interface Num{ int value() default 10; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)