Java注解
注解(注释和解释)
- 描述:从JDK5.0引入的技术,不是技术本身,可以对程序做出解释,可以被程序去读取
- 格式:用 @ + 注释名 在代码中呈现,还可以添加一些参数值,例如:@SuppressWarnings(vlaue=“unchecked”)
- 哪里使用:可以附加在package、class、method、field等上,相当于添加了额外的辅助信息,可以通过反射机制编程实现对这些元数据的访问
内置注解
-
@Override:定义在Java.lang.Oberride中,表示一个方法声明打算重写超类中的另一个方法声明
-
@Deprecated:定义在java.lang.Deprecated中,此注解可以用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择
-
@SuppressWarnings:定义在java.lang.SuppressWarnings中,用来一直编译时的存在警告信息,需要添加已经定义好的参数
例如:@SuppressWarnings(“all”)
@SuppressWarnings(“unchecked”)等等
package com.jerry.apiTest;
/**
* Created by JerrySmith on 2022/3/22.
*
* 注解与反射
*
*/
public class ApiDemo05 extends Object{
public static void main(String[] args) {
test1();//使用方法时会在方法名上划线,表示不推荐使用
}
@Override//重写的注解:表示该方法重写了超类的方法
public String toString() {
return super.toString();
}
@Deprecated//表示不推荐程序员使用
public static void test1(){
System.out.println("Deprecated");
}
@SuppressWarnings("all")//抑制警告信息,例如声明的变量未使用
public static void test2(){
int i;
}
}
元注解
作用:负责注解其他注解,Java中定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明
- @Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
- @Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期 (SOURCE<CLASS<RUNTIME)
- @Document:说明该注解将被包含在Javavdoc中
- @Inherited:说明子类可以继承父类中的该注解
package com.jerry.annotateTest;
import java.lang.annotation.*;
import java.lang.reflect.Type;
/**
* Created by JerrySmith on 2022/3/22.
*
* 元注解和自定义注解的使用方法
*
*/
public class AnnotateDemo01 {
public static void main(String[] args) {
}
@MyAnnotate//目前自定义注解只可以作用在方法上
void test(){
System.out.println("测试@Target注解的方法");
}
//使用Target注解表示自定义注解可以作用在哪些地方
@Target(value = ElementType.METHOD)//指可以作用在方法上 @Target(value = {ElementType.METHOD,ElementType.TYPE})可以多参数使用
//使用Retention注解来表示自定义注解可以在哪个时期有效(SOURCE<CLASS<RUNTIME)
@Retention(value = RetentionPolicy.RUNTIME)//使用RUNTIME表示在运行时期也有效,一般自定义注解都是用RUNTIME时期
@Documented//表示是否会将自定义注解生成在JavaDoc文档中
@Inherited//表示子类可以继承父类的注解
//自定义注解
@interface MyAnnotate{}
}
自定义注解
-
方法:使用@interface + 自定义注解名 的方式来定义一个注解
-
参数:自定义注解可以添加一个或多个参数,类型也可不同
-
自定义注解也可以使用元注解来注解,通常使用@Target元注解来定义作用的范围,使用@Retention来定义什么时期有效
package com.jerry.annotateTest; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * Created by JerrySmith on 2022/3/22. * * 自定义注解代码演示 * */ public class AnnotateDemo02 { //测试方法使用注解 //这里没有默认值的参数必须添加,有默认值的参数可加可不加 @MyAnnotate01(name = "Jerry",id = 1,schools = {"哈佛","麻省理工"}) public static void main(String[] args) { } /** * 自定义注解 MyAnnotate01 */ @Target({ElementType.METHOD,ElementType.TYPE})//使用@Target元注解来注解自定义注解的作用范围(实例为方法和类) @Retention(RetentionPolicy.RUNTIME)//使用@Retention元注解来注解自定义注解的作用时期(实例为运行时期) @interface MyAnnotate01{//定义一个名为MyAnnotate01的自定义注解 //可以自定义注解的参数 (参数类型 + 参数名 + ()) //定义一个String类型的注解参数 String name(); //定义一个int类型的注解参数,使用default默认参数为-1,在使用注解时,有默认值的注解参数可以不用写 int id() default -1; //定义一个String类型的数组,默认参数值为清华,北大 String[] schools() default {"清华","北大"}; } }