首页 > 编程语言 >JAVA注解(Annotation)

JAVA注解(Annotation)

时间:2022-11-12 23:44:26浏览次数:46  
标签:JAVA value 参数 interface 注解 ElementType 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();
}

标签:JAVA,value,参数,interface,注解,ElementType,Annotation
From: https://www.cnblogs.com/xiluoluo/p/16885149.html

相关文章

  • 【Javaweb】做一个房产信息管理系统二
    由于我还不太熟练用sql语句写数据库,所以直接用navicate了我们需要新建四个数据表:adimin(超级管理员信息)customer(顾客)property(房产信息)realestate(房产经纪人信息)我发现......
  • 02-类与对象 进行试验--Java字段初始化的规律
    1.类的构造方法(1)“构造方法”,也称为“构造函数”,当创建一个对象时,它的构造方法会被自动调用。构造方法与类名相同,没有返回值。(2)如果类没有定义构造函数,Java编译器......
  • Javascript(笔记32) - ES6特性 - let
    Javascript(笔记32)-ES6ECMA EuropeanComputerManufactureresAssociation,中文名:欧洲计算机制造商协会,目标是评估、开发和认可电信和计算机标准。1994年后改名为 ECM......
  • Head First Java 读书笔记
    第13章:Swing什么是Swing组件?组件(Component),也称作元件。它们就是那些放在界面上与用户进行交互的东西,如Button/List等。事实上,这些GUI组件,都来自于java.swing.JC......
  • Head First Java 读书笔记 14章
    第14章:序列化与文件的输入输出对象可以被序列化,也可以展开。对象有状态和行为两种属性,行为存在于类中,而状态存在于个别的对象中。本章将讨论以下两种选项:1.如果只有自己......
  • java——继承与多态——抽象类001
    抽象的概念:          抽象方法和抽象类的格式:                抽象方法和抽象类的使用:       ......
  • java注入配置文件
    `packagecom.xkcoding.properties.controller;importcn.hutool.core.lang.Dict;importcom.xkcoding.properties.property.ApplicationProperty;importcom.xkcoding.......
  • datax同步数据java简单用法
    1.到github下载源码,自己编译。同步数据支持mysql8.0,如果直接用编译好的会遇到各种问题。https://github.com/alibaba/DataX/blob/master/userGuid.mdidea导入项目,需要先......
  • 【Javaweb】做一个房产信息管理系统一
    2019级《JAVA语言程序设计》  上机考试试题                 2020.12.20  考试要求 一、本试卷为2019级《JAVA语言程......
  • 图学习【参考资料2】-知识补充与node2vec代码注解
    本项目参考:https://aistudio.baidu.com/aistudio/projectdetail/5012408?contributionType=1*一、正题篇:DeepWalk、word2vec、node2vec其它相关项目:关于图计算&图学习......