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();
}
posted @   奚罗罗  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示