注解

1、注解

1.1、Annotation 基本概念

作用:

不是程序本身,而是对程序作出解释 可以被其他程序(如编译器等)读取

格式:

@注释名(参数值) ps:不一定有参数

使用情景:

可以附加在 包、类、方法、属性 等上面 可以通过反射机制编程实现对这些元数据的访问

1.2、内置注解

@Override   //重写注解
@Deprecated //不推荐使用注解,表示危险或有更好的选择
@SuppressWarnings //抑制警告信息。需要加参数

1.3、元注解

作用

注解其他注解。

主要有4个

@Target:用于描述注解的使用范围(用在哪) @Retention:用于表示需要在什么级别保存注解信息,用于描述注解的声明周期,(SOURCE < CLASS < RUNTIME) @Document:说明该注解将被包含在 javadoc 中 @Inherited:说明子类可以继承父类中的该注解

测试元注解

package com.kuang.annotation;

import java.lang.annotation.*;

//测试元注解
public class Test01 {
   @MyAnnotation
   public void test(){

  }
}

//定义一个注解
//Target 表示我们的注解可以用在哪些地方
//ElementType.TYPE表示能在类级别的生效
@Target(value = {ElementType.METHOD, ElementType.TYPE})

//Retention 表示我们的注解在什么地方还有效
// runtime > class > sources
@Retention(value = RetentionPolicy.RUNTIME)

//Documented 表示是否将我们的注解生成在 Javadoc中
@Documented

//Inherited 子类可以继承父类的注解
@Inherited
@interface MyAnnotation{

}

测试自定义注解

package com.kuang.annotation;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//自定义注解
public class Test02 {
   //注解可以显示赋值,如果没有默认值,我们就必须给注解赋值
   @MyAnnotation2(name = "帅哥")
   public void test(){}
   

   @MyAnnotation3("帅哥")
   public void test2(){
       
  }

}

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation2{
   //注解的参数格式:参数类型 + 参数名();
   String name() default "";
   int age() default 0;
   int id() default -1;    //如果默认值为-1,代表不存在。同indexof,如果找不到就返回-1
   

   String[] schools() default {"哔哩哔哩", "家里蹲大学"};

}

@interface MyAnnotation3{
//若只有一个参数,就可以设置为value
//这样就可以只用写("帅哥"),而不用写(name = "帅哥")
   String value();
}
posted @ 2022-04-11 19:55  lenao  阅读(212)  评论(0)    收藏  举报