面向使用的java注解简单总结

本篇文章不是从零介绍注解的基础知识,也不会以一种专业名词介绍专业名词的方法去解释注解的含义和作用。只是通过较为简单的例子和一些关于注解的基本使用知识来迅速的达到能够使用注解的情况。供复习使用。

其实,注解的内容并不多,上手很简单,分别为,java中自带的系统注解,自定义注解,元注解三个方向。

1. java中自带的系统注解

相信只要是使用过java的人都看到过这个东西。

这个东西是啥???相信你会立刻回答出,这个东西告诉我们实现Runnable接口,必须实现来自接口中未实现的run方法。

没错,这就是注解。。。他就是一个便利贴,贴在了run方法上,提醒你必须重写实现接口的run方法。

像这样的系统自带的注解有哪些?

@Override,表示当前的方法定义将覆盖超类中的方法。如果你不小心拼写错误,或者方法签名对不上被覆盖的方法,编译器就会发出错误提示。
@Deprecated,如果程序员使用了注解为它的元素,那么编译器会发出警告信息。
@SuppressWarnings,关闭不当的编译器警告信息。在java SE5之前的版本中,也可以使用该注解,不过会被忽略不起作用。

2.自定义注解

很简单,像定义类和接口一样,如上图所示,我们就定义了一个自己的注解。

注解关键字为@interface,自定义注解名为Annotation1,两个属性,id和value。

当我们定义好了这个Annotation1后,我们就可以像系统注解一样,把他贴在需要用它的地方。

这里稍微提一些关于自定义注解的注意事项:

使用@interface自定义注解的时候,自动继承了java.lang.annotation.Annotation接口。在定义注解的时候,不能继承其他的注解或接口。

关于注解内部的参数问题。格式为:修饰符 类型  参数名()  默认数值(可有可无)

①修饰符只能是public或者默认。

②参数类型的使用包括。。。。所有基本数据类型,String,Class,枚举,Annotation类型,以及以上所有类型的数组。

3.元注解

注解就已经是一张标签了,那元注解是干嘛的啊???没错,如图所示,他就是给注解本身再贴上一个标签。

元注解有哪些???什么作用???

四种元注解

①@Target,这个便利贴的作用就是,贴上他,就会限制住这个注解的作用范围。

不懂?没关系,看上面的例子,Annotation1上标明了Target元注解,其原注解的属性为ElementType.Method。

这张便利贴上说明了,Annotation1这个注解只能作用在方法(method)上。

@Target注解限定作用范围取决于后面的属性,该属性是一个枚举类型(ElementType),具体含义如下:


②@Retention,这个便利贴的作用是,贴上他,就会限制注解的生命周期(持续时间)

Annotation1上标明了Retention元注解,其原注解的属性为RetentionPolicy.Runtime。表明其生命周期一致持续到程序运行时

@Retention注解限定作用范围取决于后面的属性,该属性是一个枚举类型(RetentionPolicy),具体含义如下:

③@Documented 将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@see,@param 等。

④@Inherited 允许子类继承父类中的注解。

最后,以一个较为简单的例子,解释注解的使用和作用:

@Retention(RetentionPolicy.RUNTIME) //元注解,规定设置了自定义注解的生命作用周期
public @interface MyAnnotation
{
    int id() default 1;
    String name() default "";
}
@MyAnnotation(id = 1, name = "liu")     //使用我们自定义的注解
public class ClientTest
{
    public static void main(String[] args)
    {
        //我们简单的利用反射机制来理解一下这个注解的内容信息
        if(ClientTest.class.isAnnotationPresent(MyAnnotation.class))
        {
            //这里表示当前类使用到了我们定义的MyAnnotation这个注解
            //获取到这个注解的Class,使用反射机制
            MyAnnotation myAnnotation = ClientTest.class.getAnnotation(MyAnnotation.class);
            //利用获取到的这个注解,去获取它内部的信息
            System.out.println("根据注解获取这个注解下的各种信息:");
            System.out.println(myAnnotation.id());
            System.out.println(myAnnotation.name());
            System.out.println(myAnnotation.annotationType());
        }
    }
}

猜你喜欢

转载自blog.csdn.net/romantic_jie/article/details/107325562
今日推荐