首页 > 编程语言 >JAVA注解:注解的作用,注解的语法,注解的使用,注解与反射的综合应用

JAVA注解:注解的作用,注解的语法,注解的使用,注解与反射的综合应用

时间:2024-10-22 08:52:12浏览次数:3  
标签:JAVA String 语法 使用 interface 注解 public 属性

1 什么是注解

  • jdk5提供了一个新的应用 Annotation, 注解, 注释

  • 与之前所学的注释的区别

    • 之前的注释:是给程序员看 ,让程序员知道程序(代码)有什么用,实现了什么功能

    • 今天的注解:是给编辑器或jvm看的。在编译和运行时提供一些信息,按照信息完成后续的工作

      我们在开发中经常使用注解作为配置信息的载体。类似于xml配置文件的作用。

2 注解的分类

  1. 普通注解,在编程中经常用来作为配置的注解,包括jdk自带的注解和自定义注解

    • @Override 告诉编译,当前方法按照重写的规则检查。

    • @Deprecated 告诉编译器,当前说明的内容是过时的,不建议使用的。但可以继续使用

    • @SuppressWarnings 告诉编译,当前说明的内容相关的警告可以忽略

  2. 元注解,用来说明注解的注解 。 未来还有一个概念:元数据

    用户信息:dmy , 18 , 男, 30000

    元数据:姓名,字符串类型,最长10个字符 , 性别,年龄,工资

    元注解有4个

    • @Target 用来说明当前注解都可以作用在哪些内容上

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
public @interface SuppressWarnings {}

2. @Retention 用来说明当前注解存活范围,有3个范围, 只能3选1

RetentionPolicy.SOURCE;  //表示在原码到字节码编译过程中有效。编译后消失
RetentionPolicy.CLASS;	//表示在类加载过程中有效,加载完消失。
RetentionPolicy.RUNTIME;//表示在jvm运行时都有效。

  • @Documented 用来说明当前注解在生成api文档时,会一同出现在文档中。

  • @Inherited 用来说明当前注解在类继承的过程中,可以一同被继承。

3 注解语法结构

  • 注解是一个特殊的类,使用@interface 定义注解

public @interface A{}

 使用元注解,在普通注解头上来说明注解特性。至少要使用@Retention 和 @Target

@Target({ElementType.FIELD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface A {}
  • 注解里只能写一种内容 (可以称为属性 也 可以称为方法)

public @interface A{
    String i();
}

 

  • 该内容类型只能是以下几种

    • String

    • 8种基本类型

    • Class

    • 其他注解类型 , 当注解作为类型时,不需要加前面的@

    • 枚举类型

    • 上述所有类型的数组类型

  • 可以使用default关键字,为注解中的属性设置默认值

public @interface A{
    String name() default "dmy"  ;
    String[] names() default {"dmy","zs","ls"};
}

 

4 注解的使用

  • 使用注解,提供配置信息

    • 根据Target元注解的指定,可以在对应的类的内容上使用注解

    • 如果注解中有属性,可以在使用注解时,类似于传参的方式为属性赋值

    • 属性赋值时,需要指定属性名和其对应的属性值

    • 如果属性是数组类型,多个属性值要使用{}包含

@A(name="zhangsan",names={"zs","ls","ww"})
class B{}

 

特殊情况说明

  • 如果注解不需要传递属性值 (没有属性,都有默认值),后面的括号可有可无

@A()
@A
class B{}

 如果注解中只有一个属性需要赋值,且这个属性名叫value。赋值时可以只写值,不写名

@interface A{
    String value();
}
@A(value="zs")
@A("zs")
class B{}

如果注解属性是数组类型,且传参赋值时只赋予一个值,可以省略{}

@A(name="zs",names={"dmy"})
@A(name="zs",names="dmy")
class B{}

使用注解,获得配置信息

  • 注解在使用时,也是类的一部分

  • 可以通过反射获得注解,进而获得注解中配置的信息

  • 反射中常用的对象(Class,Field , Method , Constructor)都提供了获得注解对象的方法

@Target({ElementType.FIELD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface A {
    String value() ;
}

 补充:所有的注解,都默认继承Annotation父注解类型

5 特殊情况的注解使用

  • 注解的重复使用

    • 默认情况下,无法使用两个相同的注解,修饰同一个类信息

    • 以前解决方案是定义一个新注解,新注解中有一个数组属性,可以包含多个所需要注解

  • 函数式接口

    • 这是lambda表达式相关的一个概念

    • lambda表达式针对的必须是接口,而且只能有一个抽象方法。这样的接口就称为函数式接口

    • 函数式接口,可以使用@FunctionalInterface声明。 在编译就会按照函数式接口的特点进行检测

@FunctionalInterface
interface A{
    void t1();
}

 

  • 使用注解声明,必须是函数式接口

  • 函数式接口,不一定使用注解声明

标签:JAVA,String,语法,使用,interface,注解,public,属性
From: https://blog.csdn.net/weixin_53755148/article/details/143103449

相关文章

  • JAVA中的JDBC学习总结 我的学习笔记
    JDBC学习总结我的学习笔记一、JDBC简介一、JDBC快速入门一、JDBCAPI详解1.DriverManager2.Connection3.Statement4.ResultSet5.PreparedStatement一、数据库连接池1.数据库连接池简介2.数据库连接池实现3.Druid数据库连接池一、JDBC简介1.JDBC概念JDBC就......
  • 初识Java GUI 编程
    文章目录前言一、什么是GUI编程?二、JavaGUI编程的基础组件1.JFrame2.JButton3.JLabel提示三、布局管理器结语前言在当今的软件开发领域,图形用户界面(GUI)的重要性不言而喻。它为用户提供了直观、友好的交互方式,使得软件更加易于使用和操作。在Java中,我们可以......
  • Java数据结构---顺序表
    目录一、线性表二、顺序表2.1、顺序表的定义 2.2、顺序表的接口实现三、ArrayList3.1、 ArrayList简介3.2、ArrayList的实现 3.3、ArrayList实现的完整代码一、线性表线性表(linearlist)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用......
  • 聊一聊Spring中的@Value注解
    [!NOTE]**Spring版本:**5.3.27**JDK版本:**1.81、MyConfig.properties何时被加载解析?2、MyService中的两个@Value何时解析?3、MyService中的两个@Value何时注入属性文件中的值?一、样例服务类packagecom.lazy.snail.service;importorg.springframework.beans.fact......
  • 【Javaee】网络编程-TCP Socket
    前言前文中我们介绍了UDPSocket相关的构造方法和方法,并实现了UDP的回显服务器和客户端。本篇将介绍TCPSocket,并使用TCPSocketapi实现服务器和客户端的通信一.TCPSocket的常见方法1.ServerSocketServerSocket是创建TCP服务端Socket的API1)ServerSocket构造方法方......
  • Java中super关键词的用法和注意事项
    在Java中,super关键字用于引用当前对象的父类。它主要有以下几种用途:1.访问父类的属性和方法:当子类中定义了与父类同名的属性或方法时,可以使用super关键字来明确指出要访问的是父类中的属性或方法。2.调用父类的构造器:在子类的构造方法中,可以使用super()来显式调用父类的构造器,以......
  • Java
    JavaHelloworld!psvm解释语句,main方法,main(参数),以上无参数,sout输出注:注意大小写文件名和类名需要保持一致命名规则,首字母小写驼峰式命名标识符能字母,$,_,开头不能以关键字作为变量名或方法名注意大小写(大写的跟小写的不是同一个变量)不能以特殊符号,数字来命名下划......
  • 【Coroutines】Implement JavaScript Promise by Kotlin Coroutine
    Expecteduseasynctolaunchaasynctaskuseawaittowaitresultfromotherworkasync{valuser=await<String>{loadUserInfo()}println(user)println("asyncreturned")}println("asyncnotreturn")Implementat......
  • dfs题目:平衡二叉树(java)
    平衡二叉树题目思路开始的error代码(最后一行return的地方有误)修正的代码题目链接:平衡二叉树题目题目思路用分治的思想,要想看看以root为根节点的二叉树是不是平衡二叉树,得看他的左子树和右子树是不是平衡二叉树,如果左子树和右子树都是平衡的,且root自己是平衡的......
  • 基于Java+Jsp+Ssm+Mysql实现的在线乡村风景美食景点旅游平台功能设计与实现十五
    一、前言介绍:1.1项目摘要乡村风景美食旅游平台的课题背景主要基于我国旅游产业的现状与发展需求。当前,我国旅游产业虽然发展迅速,但仍然存在基础薄弱、管理手段滞后、信息化程度低等问题。旅游行政管理部门的管理方式相对落后,缺乏有效的信息化管理手段,信息沟通渠道不畅,这......