网站首页 > 精选教程 正文
在Java中,注解和class、interface一样,也是一种类型。Java 注解是从 Java5 开始添加到 Java 语言的。SpringBoot框架就广泛地应用了注解,而取代了XML配置文件。对于Java开发人员来说,Java注解也是非常常用的Java语法特性之一。
Java语言有多少个注解呢?
Java最开始的内置注解有7个,其中3个是用来修饰代码的。
- @Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
- @Deprecated - 标记过时方法。如果使用该方法,会报编译警告。
- @SuppressWarnings - 指示编译器去忽略注解中声明的警告。
另外还有4个注解是作用在自定义注解上的,是注解的注解,因此也被称为“元注解”。
- @Retention - 标识这个注解存在的阶段,比如只是存在于代码中(编译器),还是会编入字节码文件中(类加载),或者是在运行时可以通过反射访问(运行时)。
- @Documented - 能够将注解中的元素包含在用户文档中。
- @Target - 标记注解应该作用在什么元素上,比如Java类,类方法,或者类属性等。
- @Inherited - 标记这个注解是继承于哪个注解类。一个被@Inherited作用的注解修饰了一个父类,如果他的子类没有被其他注解修饰,则它的子类也继承了父类的注解。
从 Java 7 开始,又陆续添加了一些新的注解:
- @SafeVarargs - Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
- @FunctionalInterface - Java 8 开始支持,标识一个匿名函数或函数式接口。
- @Repeatable - Java 8 开始支持的元注解,标识某注解可以在同一个声明上使用多次,而且每次使用注解可以代表不同的含义。
- @Native - Java 8 开始支持的元注解,使用 @Native 注解修饰成员变量,则表示这个变量可以被本地代码引用。
注解的本质
从上面的图中可以看出,上面提到的所有注解都是接口 Annotation的实现。
package java.lang.annotation;
public interface Annotation {
boolean equals(Object obj);
int hashCode();
String toString();
Class<? extends Annotation> annotationType();
}
每1个注解都和 1 个 RetentionPolicy 关联。RetentionPolicy 是 Enum 枚举类型,它用来指定 Annotation 的保留策略;每1个注解还和1个或多个 ElementType 关联,ElementType 也是个枚举类型,它用来指定 Annotation 的类型。
如何自定义注解
Java自定义注解用的修饰符是 @interface。
以下代码就定义了一个注解 MyAnnotation。
public @interface MyAnnotation {
//blabla
}
接着我们就可以在类或者方法上使用刚刚定义好的注解。
@MyAnnotation
public class test {
@MyAnnotation
public static void main(String[] args){
//blabla
}
}
但是刚刚定义的注解是没有任何意义的,要使我们自己的注解工作,就要用到元注解,需要用元注解来修饰我们的注解。前面介绍的元注解最常用的就是:@Retention、 @Target、 @Document、 @Inherited和@Repeatable(JDK1.8加入)。
Retention的英文含义就是保留、保持的意思,使用@Retention 就是来决定注解会存在到哪个阶段,是保留在源码,字节码,或者运行期。自定义注解通常都是使用 @Retention(RetentionPolicy.RUNTIME),即保留到运行期。
使用@Target元注解表示注解的类型,若一个 Annotation 对象是 METHOD 类型,则该 Annotation 只能用来修饰方法。
@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
//blabla
}
这样我们就定义了一个运行时注解MyAnnotation,可以用来作用在类、接口或枚举类型上(ElementType.TYPE)。
注解的作用
最后我们来总结下注解的作用:
- 提供信息给编译器: 编译器可以利用注解来检测出错误或者警告信息,打印出日志。
- 编译阶段时的处理: 软件工具可以用来利用注解信息来自动生成代码、文档或者做其它相应的自动处理。
- 运行时处理: 某些注解可以在程序运行的时候接受代码的提取,自动做相应的操作。
我会持续更新关于物联网、云原生以及数字科技方面的文章,用简单的语言描述复杂的技术,也会偶尔发表一下对IT产业的看法,请大家多多关注,欢迎留言和转发,希望与大家互动交流,谢谢。
猜你喜欢
- 2025-01-17 第十四章:Java注解和反射
- 2025-01-17 java代码助理之注释
- 2025-01-17 Java 注解基础知识,掌握的人不足10%
- 2025-01-17 Java注解详解以及如何实现自定义注解
- 2025-01-17 Java注释的三种方式:单行、多行和文档
- 2025-01-17 [直呼内行] 注解开发才是简洁之道,让同行直呼内行的Java注解技术
- 2025-01-17 Java注解的工作原理及如何自定义注解
- 2025-01-17 深入理解Java:注解(Annotation)基本概念(3-1)
- 2025-01-17 Java注解原理详解(4大原理步骤)
- 2025-01-17 java注解的使用
你 发表评论:
欢迎- 07-10动漫人物像|插画 壁纸 头像 签名 素材
- 07-10运动人物|插画 壁纸 头像 签名 素材
- 07-10动漫人物|插画 壁纸 头像 签名 素材
- 07-10神话人物|插画 壁纸 头像 签名 素材
- 07-10日漫人物像|插画 壁纸 头像 签名 素材
- 07-10 日漫人物|插画 壁纸 头像 签名 素材
- 07-10日漫人物风|插画 壁纸 头像 签名 素材
- 07-10日漫人物|插画 壁纸 头像 签名 素材
- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)