平常我很少用到注解,因为实在没地方用,然后最近不是在自学Spring,然后数据持久层要用到大量的注解,然后我在睡觉之前做一下总结吧,这篇博客算是初期的吧,后面的我慢慢研究一下!
大家都可能对于平常我们看到的比如说@Override @SuppressWarnings等一些常见的注解比较熟悉,,然后我也百度了很多大牛的博客,我们就平常开发过程中遇到的注解做一下总结:
①: @Override,表示当前的方法定义将覆盖超类中的方法。
②:@Deprecated,使用了注解为它的元素编译器将发出警告,因为注解@Deprecated是不赞成使用的代码,被弃用的代码。
③:@SuppressWarnings,关闭不当编译器警告信息。
其实,我们都可以看到,这些东西,就比如第一个,方法的重写,就是提示我们,这个方法在当前类中被重写了,如果有兴趣的童鞋可以去Ctrl+B查看一下源码,看看sun是怎么写这个注解的。
上面这三个我刚刚列举的注解多少我们都会在写代码的时候遇到。Java还提供了4中注解,专门负责新注解的创建。
@Target表示该注解可以用于什么地方,可能的ElementType参数有:
CONSTRUCTOR:构造器的声明
FIELD:域声明(包括enum实例)
LOCAL_VARIABLE:局部变量声明
METHOD:方法声明
PACKAGE:包声明
PARAMETER:参数声明
TYPE:类、接口(包括注解类型)或enum声明
@Retention表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:
SOURCE:注解将被编译器丢弃
CLASS:注解在class文件中可用,但会被VM丢弃
RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。
@Document将注解包含在Javadoc中
@Inherited允许子类继承父类中的注解
OK,基础的东西我也做了介绍,那我们先拿代码为例子:
![](https://img.haomeiwen.com/i6253688/f87b6f9150f4a455.png)
这个是我写的一个注解,你们可以看到,里面包含一个@interface,没错,注解的定义就是@interface,顾名思义,他的用法和接口差不多,注解可以支持很多数据类型,不过开发的过程中,用的最多的是String类型
里面定义了两个方法,一个username(),一个password(),和接口一样,不能在里面写逻辑,这个是规矩
然后你们看到了上面有
![](https://img.haomeiwen.com/i6253688/ec6d5cc1ca7fa243.png)
这个东西,这个东西叫元注解,我现在做一下介绍
1.@Documented—— 指明拥有这个注解的元素可以被javadoc此类的工具文档化。这种类型应该用于注解那些影响客户使用带注释的元素声明的类型。如果一种声明使用Documented进行注解,这种类型的注解被作为被标注的程序成员的公共API。
2.@Target——指明该类型的注解可以注解的程序元素的范围。该元注解的取值可以为TYPE,METHOD,CONSTRUCTOR,FIELD等。如果Target元注解没有出现,那么定义的注解可以应用于程序的任何元素。
3.@Inherited——指明该注解类型被自动继承。如果用户在当前类中查询这个元注解类型并且当前类的声明中不包含这个元注解类型,那么也将自动查询当前类的父类是否存在Inherited元注解,这个动作将被重复执行知道这个标注类型被找到,或者是查询到顶层的父类。
4.@Retention——指明了该Annotation被保留的时间长短。RetentionPolicy取值为SOURCE,CLASS,RUNTIME。
好,那我们继续,我们新建一个类,我的是这样子写的
![](https://img.haomeiwen.com/i6253688/3917a3d0493c4729.png)
一个没有任何东西的类,然后在类名称上面加上注解,然后把参数写上值。然后,这个类怎么用呢?
![](https://img.haomeiwen.com/i6253688/562a4400bd1127e4.png)
通过实体类,然后获取注解,getAnnotation()里面填写注解那个类的的class,然后返回一个原注解Anumes,然后我们输出username();
![](https://img.haomeiwen.com/i6253688/9c7e29a0fe586741.png)
你会看到控制台里面输出122,就是我刚刚赋值的122,是不是很奇怪。这个就是java的一个反射机制,Class这个类,注意哈,是大写的Class
,这个是所有类的基类,我们通过反射,获取里面的注解,然后再获取注解里面的值,这个,就可以理解为Java的反射机制,那我们以后怎么用,如何用,在哪里用,那麻烦大家关注我的博客,我会把我学到的和大家分享!
网友评论