黑马程序员--注解Annotation

---------------------- JavaEE+Android开发JavaEE+Android培训、期待与您交流! ----------------------

                                                                                                    注解Annotation

Jase5.0其中有一个很重要的特性就是对注解。通过注解可以在不改变原有逻辑的情况下,在源文件中补充一些信息。

Annotation可以用来修饰类,属性,方法,而且Annotation不影响程序运行,无论是否使用Annotation代码都可以正常运行,每一个注解都是一个类。

1系统内建的Annotation

@Override 覆盖父类

@Deprecated 过时了

@SuppressWarnings 压制安全警告

注:上述三类均在java.lang包里定义的,该包在使用时自动导入,可直接使用该3个Annotation

1.1@Override

主要是在方法覆写时使用,用于保证方法覆写的正确性,防止用户在覆写方法时将方法定义出错,

注:该Annotation只能用在方法上面,而其他元素如类,属性则不能使用。

1.2@Deprecated

主要功能是用来声明一个不建议使用的方法,如果在程序中使用了此方法,则在编译时出现警告信息。

注:除了可以用在方法上外,还可以用在类上面,

1.3@SuppressWarnings

主要功能是用来压制警告,如在泛型中,若一个类声明时没有指明泛型,在编译的时候会警告,若使用该注释,则会压制这种警告。

压制一个警告@SuppressWarnings(“”);

压制多个警告@SuppressWarnings(“”,””);

其中关键字有:

deprecation   unchecked fallthrough  path  serial finally  all

2,自定义的Annotation

2.1Annotation的定义格式

定义Annotation

Public @interface Annotation 名称{

数据类型  变量名称();    变量定义之后必须要有“()”

}

注:使用@interface就相当于继承了annotation接口

2.2向Annotation中设置内容

可以设置一个属性和多个属性,

若要为一个属性设置多个内容,则将该属性定义成一个数组。

设置默认值:

Public @interface Annotation 名称{

数据类型  变量名称()    default 默认值;

}

@Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.METHOD,ElementType.TYPE})

public @interfaceItcastAnnotation{

    Stringcolor() default"blue";

    Stringvalue();

    int[] arrayAttr()default {3,4,4};

    EnumTest.TrafficLamplamp() defaultEnumTest.TrafficLamp.RED;

    MetaAnnotation annotationAttr()default@MetaAnnotation("lhm");

}

2.3 Retention和RetentionPolicy

Retention定义一个RetentionPolicy变量,该变量用于指定Annotation的保存范围。

RetentionPolicy的三个取值:

  SOURCE   只保留在源文件中,编译之后不会保存在类文件中

  CLASS     会在源文件和类文件中,但不会被加载到java虚拟机中,默认就是此范围

  RUNTIME   在执行的时候也会加载到jvm中

@Override     @Retention(value=RetentionPolicy.SOURCE)

@Deprecated    @Retention(value=RetentionPolicy.RUNTIME)

@SuppressWarnings  @Retention(value=RetentionPolicy.SOURCE)

3 通过反射取得Annotation

与Annotation操作有关的方法、

 Public<A exteds Annotation>A get Annotation

如果一个元素中存在注释,则取全部注释。

Public Annotation[] getAnnotations()

返回此元素上的所有注释

Public Boolean isAnnotation()

判断元素是否是一个注释

Public Boolean isAnnotationPresent()

判断一个元素上是否存在注释

Method mainMethod =AnnotationTest.class.getMethod("main", String[].class);

       ItcastAnnotation annotation2 = (ItcastAnnotation)mainMethod.getAnnotation(ItcastAnnotation.class);

       System.out.println(annotation2.value());

注:只有Retention(value=RetentionPolicy.RUNTIME)才可以取到

4.1@Target注释

明确的指出一个Annotation的使用位置,在Target的注释中存在一个ElementType[]枚举类型的变量,这个变量主要指定Annotation的使用限制,

ANNOTATION_TYPE    只能在注释上声明

CONSTRUCTOR         构造方法上声明

METHOD              方法上声明

PACKAGE             在包上声明

TYPE                在接口 类 枚举类型上

注:若在Target上已经明确声明过,则按要求使用,否则会编译出错。

---------------------- JavaEE+Android开发JavaEE+Android培训、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值