JAVA注解(Annotation)
注解(Annotation)
什么是注解
Annotation的作用:
-
不是程序本身,可以对程序做出解释,这一点和注释(comment)没什么区别。
-
可以被其他程序(比如编译器)读取
Annotation的格式:注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如@SuppressWarnings(value = "unchecked")
Annotatin在哪里使用:可以附加在package,class,method,field等上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问
内置注解
@Override:只用于修饰方法,表示重写声明
@Deprecated:可以修饰方法、属性、类,表示废弃
@SuppressWarnings:用来抑制编译时的警告信息。与前两个注释有所不同,需要添加一个参数才能正确使用,这些参数都是已经定义好了的。比如:
- @SuppressWarnings("all")
- @SuppressWarnings("unchecked")
- @SuppressWarnings(value = {"unchecked","deprecation"})
元注解
元注解的作用就是负责注解其他注解,Java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明。包括:
@Target:用来描述注解的使用范围
@Retention:表示需要在什么级别保存该注释信息,用于描述注解的声明周期(SOURCE < CLASS < RUNTIME)
@Inherited:说明子类可以继承父类中的该注解
@Documented:说明该注解将被包含在javadoc中
import java.lang.annotation.*;
@MyAnnotation
public class TestAnnotation {
public static void main(String[] args) {
}
}
//@Target 表示注解可以用在哪些地方,比如这里表示可以用在类上
@Target(value = ElementType.TYPE)
//@Retention 表示注解生命周期,这里表示直到运行时都有效
@Retention(value = RetentionPolicy.RUNTIME)
//@Inherited 表示可以被子类继承
@Inherited
//@Documented 表示会被写入javadoc中
@Documented
//自定义注解
@interface MyAnnotation{
}
自定义注解
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotatioon接口
-
@interface用来定义一个注解,格式:public @interface 注解名
-
其中的每一个方法实际上是声明了一个配置参数
-
方法的名称就是参数的名称
-
返回值类型就是参数的类型(返回值只能是基本类型,Class,String,enum)
-
可以通过default来声明参数的默认值
-
如果只有一个参数成员,一般参数名为value
-
注解元素必须要有值,我们定义注解元素时,经常使用空字符串,0作为默认值
import java.lang.annotation.*;
public class TestAnnotation {
@MyAnnotation(age = 18)//age没有默认值,在使用注解时就需要显式赋值
@MyAnnotation2("val")//可以省略value
public void Test(){
}
}
@Target(value = {ElementType.TYPE,ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
//自定义注解
@interface MyAnnotation{
//注意这不是方法,而是注解的参数
//注解参数:类型名 参数名()
String name() default "";
int age();
String[] schools() default {"清华","北大"};
}
@Target(value = {ElementType.TYPE,ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyAnnotation2{
//如果只有一个参数,建议命令为value,这样赋值时可以省略value
String value();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~