【Java】注解
2023-12-20 13:19:09
注解(Annotation)
1、什么是注解
注解的作用:
- 不是程序本身,但是可以对程序作出解释(这一点跟注释没有什么区别),但是注释没有功能,注解是有功能的
- 可以被其他程序(编译器等)读取
注解的格式:
- 以“@注释名”在代码中存在,还可以添加一些参数值,比如:
@SuppressWarnings(values="unchecked")
注解的使用位置:
- 可以在package、class、method、field等上面使用注解,相当于给这些东西添加了额外的辅助信息,可以通过反射机制实现对注解的访问
2、内置注解
内置注解是默认存在于Java中的注解,不是由用户自己开发的注解。内置注解其实非常常见……
- @Override:定义在java.lang.Override中,此注释只适用于方法,表示一个方法打算重写父类中的另一个方法
- @Deprecated:定义在 java.lang.Deprecated 中,此注释可以用于方法,属性,类,表示不鼓励程序员使用这样的元素。通常是因为它很危险或者存在更好的选择。
- @SuppressWarnings:定义在 java.lang.SuppressWarnings 中,用来抑制编译时的警告信息。与前两个注解不同,需要在该注解中添加一个参数(all镇压全部警告、unchecked)才能正确使用,这些参数都是已经定义好的了。(镇压警告?哈哈哈)
3、元注解
元注解的作用就是解释其他注解。Java定义了4个标准meta-annotation类型。这四个类型可以在java.lang.annotation包中找到。(@Target、@Retention、@Documented、@Inherited)。
-
@Target:描述注解的使用范围,即被描述的注解可以使用在哪些地方,声明被注解的注解的作用域
-
@Retention:表示需要在什么级别保存该注解信息,用于描述注解的生命周期。比如参数中传入一个Runtime,就表示被@Retention注解过的注解在运行时仍然是有效的。
-
@Documented:表示被该注解作用的注解要生成到JavaDoc中。
-
@Inherited:表示被该注解作用的注解B,子类可以继承父类中的注解B。
这些注解的作用、参数都可以点到源码之中查看。
元注解重点需要掌握@Target和@Retention。
4、自定义注解
使用 @Interface 可以自定义注解。它会自动继承java.lang.Annotation接口。
@Target(value = {ElementType.METHOD,ElementType.CONSTRUCTOR})
public @interface TestMetaAnnotation{
}
注解中,每一个方法实际上是声明了一个配置参数,方法的名称就是参数的名称,返回值类型就是参数的类型(返回值只能是基本类型:String、enum等)。
可以通过default来声明参数的默认值。
如果只有一个参数成员,一般将该参数命名为”value“。
package main.test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//我们的自定义注解当然可以传入值给参数
@TestMetaAnnotation(name = "xcy")
public class Test {
//我们的自定义注解参数当然也可以为空,因为有默认值
//如果没有默认值的话,就一定要给没有默认值的参数传入一个值了
@TestMetaAnnotation
public void test(){
}
}
/**
* @author xcy
* 自定义注解,作用域是方法和类,生命周期是运行时
*/
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface TestMetaAnnotation{
//注解的参数,并不是一个方法,默认值是空
String name() default "123";
int id() default -1;
}
文章来源:https://blog.csdn.net/weixin_52808620/article/details/135103042
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!