Java语言注解是一种元数据机制,可以对Java代码进行标记和说明。注解是在Java 5中引入的一种新特性,它提供了在代码中添加元数据信息的简单方式。本文将介绍Java语言注解的基本概念。
Java注解的定义和基本语法
Java注解定义了一种语法格式,用来标记Java代码。Java注解的定义格式如下所示:
@注解名(参数列表)
public class ClassName {...}
其中@注解名
表示注解名称,参数列表
表示注解参数。注解可以应用于多种情况,例如:类、接口、枚举常量、方法等。
Java注解的分类
Java注解可分为三类:
- 标准注解:定义在Java语言规范中的注解,例如
@Override
、@Deprecated
、@SuppressWarnings
等; - 元注解:用于创建其他注解的注解,如
@Target
、@Retention
、@Documented
、@Inherited
等; - 自定义注解:用户根据自己的需求自定义注解。
自定义注解
自定义注解是Java注解的重要应用。在自定义注解时,需要使用关键字@interface
,自定义注解看起来就像一个接口,在关键字interface前添加'@符号即可:
@interface MyAnnotation {
//方法定义
//常量定义
}
Java元注解
元注解是Java中定义其他注解的注解。Java的元注解包括@Target
、@Retention
、@Documented
、@Inherited
等,下文将详细介绍这些注解。
@Target
注解
@Target
注解用于指定注解的使用范围。在@Target
注解中,可以使用枚举类型ElementType
指定注解在哪些元素上有效,例如:类、接口、字段、方法等。
@Target(ElementType.TYPE)
public @interface MyAnnotation {
//方法定义
//常量定义
}
上述代码表示@MyAnnotation
注解只能应用于类及接口相关的声明。
@Retention
注解
@Retention
用于指定注解的生命周期,java内置支持三个生命周期枚举类型:
- SOURCE:只在源代码中保留,编译时将被忽略。
- CLASS:编译时将被保留,在运行时期间将被忽略。
- RUNTIME:在运行时期间保留。
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
//方法定义
//常量定义
}
上述代码表示@MyAnnotation
注解在运行时期间保留,可以反射获取该注解信息。
@Documented
注解
@Documented
注解是一个标记注解,用于指定被注解的元素将被包含在javadoc生成的文档中。
@Documented
public @interface MyAnnotation {
//方法定义
//常量定义
}
上述代码表示@MyAnnotation
注解将被包含在javadoc生成的文档中。
@Inherited
注解
@Inherited
注解是一个标记注解,用于指定注解是否继承。如果一个类被@Inherited
注解的注解标记,则其子类也自动继承该注解。
@Inherited
public @interface MyAnnotation {
//方法定义
//常量定义
}
上述代码表示子类将会继承@MyAnnotation
注解。
示例说明
示例1:自定义注解
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String name();
String description() default "";
}
上述代码定义了一个自定义注解@MyAnnotation
,用来标记类和方法信息。该注解拥有两个参数,分别是name
和description
。
以下是该注解的使用示例:
@MyAnnotation(name = "MyClass", description = "This is a test class")
public class MyClass {
@MyAnnotation(name = "myMethod", description = "This is a test method")
public void myMethod() {
System.out.println("Hello World!");
}
}
上述代码中,@MyAnnotation
用来注解类和方法。在类上的注解中,设置了参数name
和description
,在方法上的注解中只设置了参数name
。通过反射,可以获取到该类和该方法上的注解信息。
示例2:标准注解 - @Override
@Override
是Java内置的一个标准注解,用来指定被标注的方法是一个覆盖了父类方法的方法。
public class A {
public void myMethod() {
System.out.println("MyMethod is called.");
}
}
public class B extends A {
@Override
public void myMethod() {
System.out.println("MyMethod in B class is called.");
}
}
在上述代码中,B
类覆盖了A
类中的myMethod()
方法,并使用了@Override
注解标记。在子类中使用@Override
注解后,如果该方法与父类方法签名不一致,编译器将会报错。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java语言注解基础概念详解 - Python技术站