Java--反射--注解

  1. 什么是注解:
  2. 内置注解:

    1. package com.model.zhujie;
      
      import java.util.ArrayList;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/6/26 18:13
       *
       * 什么是注解(Annotation):
       *
       */
      @SuppressWarnings("all")
      //@SuppressWarnings("all")  :镇压警告的注释
      public class ZhuJieDemo01 {
          public static void main(String[] args) {
      
          }
      
      //    @Override:重写注解
          @Override
          public String toString() {
              return super.toString();
          }
      //    @Deprecated :已过时的,不推荐使用,存在危险或者存在更好的方式替代
          @Deprecated
          public void test(){
              System.out.println("*****");
          }
      
          public void test02(){
              ArrayList<Object> list = new ArrayList<>();
          }
      
      
      }

       

  3. 元注解:

    1. package com.model.zhujie;
      
      import java.lang.annotation.*;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/6/26 18:34
       *
       * 测试元注解:
       */
      
      //自定义元注解
      public class ZhuJieDemo02 {
      
          @MyAnnotation
          public void test(){
      
      
          }
      
      }
      @Target(value = {ElementType.METHOD,ElementType.TYPE}) //选择自定义注解的使用地方
      //runTime>class>sources
      @Retention(value = RetentionPolicy.RUNTIME) //表示我们的注解在什么地方还有效(运行时还有效)
      
      @Documented  //表示是否将我们的注解生成在JAVAdoc文档中
      @Inherited  //表示子类可以继承父类的注解
      @interface MyAnnotation{
      
      }

       

  4. 自定义注解:

    1.  
    2.  

      package com.model.zhujie;
      
      import java.lang.annotation.ElementType;
      import java.lang.annotation.Retention;
      import java.lang.annotation.RetentionPolicy;
      import java.lang.annotation.Target;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/6/26 18:51
       *
       * 自定义注解
       */
      public class ZhuJieDemo03 {
      
          @MyAnnotation2(name = "张紫韩",age=15)  //若创建的注解有声明默认值则可以不用在这里写,若没有声明默认值则我们必须填写他的之,否则会报错
          public void test(){
      
          }
      
          @MyAnnotation3("张紫韩")
          public void test02(){
      
          }
      
      }
      
      
      @Target(value = {ElementType.METHOD,ElementType.TYPE})  //定义注解的使用地方
      @Retention(RetentionPolicy.RUNTIME)   //定义注解的生效范围,一般是RUNTIME
      @interface MyAnnotation2{
      //    注解的内容:
      //    注解参数: 类型+参数名() :参数
          String name();
          int age() default 1;
          String address() default "";
          String[] school() default {"清华大学","北京大学"};
      
      }
      
      @Target({ElementType.METHOD})
      @Retention(RetentionPolicy.RUNTIME)
      @interface MyAnnotation3{
          String value();
      }

       

       

        

        

       

       

        

        

       

       

       


       

        
posted @ 2021-06-26 21:24  张紫韩  阅读(32)  评论(0编辑  收藏  举报