📜  Java中的注解(1)

📅  最后修改于: 2023-12-03 15:16:33.840000             🧑  作者: Mango

Java中的注解

在Java中,注解是一种基本的语法结构,它允许我们向代码中增加元数据(metadata)。注解可以为代码中的各种元素(如类、方法、变量等)提供额外的信息,在编译时和运行时会被读取和使用。通过注解,我们可以实现很多功能,如文档生成、代码检查、工具生成等。本文将介绍Java中的注解的用法和注意事项。

常见的注解

Java中内置了很多注解,常用的注解有:

@Override

用于标注方法覆盖父类或实现接口中的方法。这个注解只有在编译时才有作用,可以避免因方法名或参数个数等差异导致的错误。

示例代码:

@Override
public void run() {
    // ...
}
@Deprecated

标记一个类、方法或字段过时,建议使用者不再使用。这个注解可以使编译器产生一个警告,提醒使用者使用新的方式。

示例代码:

@Deprecated
public void oldMethod() {
    // ...
}
@SuppressWarnings

压制编译器产生的警告信息。可以用在类、方法、变量等上面指定要压制的警告类型。

示例代码:

@SuppressWarnings("unchecked")
List<String> list = new ArrayList();
@FunctionalInterface

标记一个接口是函数式接口。函数式接口只有一个抽象方法,可以被lambda表达式所使用。这个注解可以帮助编译器检查接口是否符合函数式接口的标准。

示例代码:

@FunctionalInterface
interface MyInterface {
    void doSomething();
}
自定义注解

Java中也支持自定义注解,下面介绍如何自定义一个注解。

定义注解

注解的定义和接口的定义很相似,使用@interface关键字定义注解。一个基本的注解如下:

public @interface MyAnnotation {
    String value() default "";
}

以上代码定义了一个名为@MyAnnotation的注解,它有一个名为value的属性,默认值为""。该注解可以在代码中使用,并且可以通过注解属性来设置value的值。

使用注解

使用注解的方式有很多,在这里我们只介绍最简单的一种。以下代码演示了如何使用一个自定义注解:

@MyAnnotation(value = "hello world")
public void myMethod() {
    // ...
}

以上代码使用了@MyAnnotation注解,并设置了value属性的值为"hello world"。在编译时,编译器会检查@MyAnnotation注解的语法和语义,确保它符合注解定义的要求。在运行时,我们可以通过反射查询这个方法中是否使用了@MyAnnotation注解,并获取其属性。

注意事项
注解是元数据

注解是元数据,不会对代码本身产生影响。我们可以添加注解到很多地方,但并不是所有的注解都具有运行时意义。

注解只有声明

注解本身不能执行任何操作,也不会产生任何效果。注解只是用来保存信息的。

注解需要保留策略

Java中的注解有三种保留策略:SOURCE、CLASS、RUNTIME。默认是CLASS级别的保留策略,即在编译后该注解会被保存在类的字节码文件中。只有RUNTIME级别的注解才具有运行时意义。

注解参数类型有限

注解的参数类型有限制,只能是以下几种:

  • 基本数据类型和字符串类型
  • 枚举类型
  • Class类型
  • 注解类型
  • 以上类型的一维数组类型
注解属性命名规范

注解属性的命名规范和Java变量名相同,使用驼峰命名法。

注解是Java语言的重要特性之一,可以为代码提供更多的元数据信息。通过自定义注解,我们可以实现很多有意义的功能。与Java反射一起使用,可以实现强大的元数据处理。