28day

day28

注解(Annotation)和反射

注释:给人看

注解:既给人看,又给程序看,可以被其他程序读取

内置注解

@Override:定义在java.lang.Override中,此注释只是用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明。

@Deprecated:定义在java.lang.Deprecated中,此注释方法可以用于修辞方法,属性,类,表示不鼓励程序员这样做,因为它很危险或存在更好的选择。

@SuppressWarnings:定义在java.lang.SuppressWarnings中用来抑制编译时的警告信息,需要至少一个参数才可以正确使用,这戏参数都是定义好的

package com.wang.annotation;

import java.awt.*;
import java.sql.Array;
import java.util.ArrayList;
import java.util.List;

//什么是注解
public class Test01 extends Object{

   //@Override重写的注解
   @Override
   public String toString() {
       return super.toString();
  }

   //@Deprecated不推荐使用
   @Deprecated
   public void Test(){
       System.out.println("222");
  }

   @SuppressWarnings("all")
   public void test(){
       List list = new ArrayList();
  }

   public static void main(String[] args) {
       new Test01().Test();

  }
}

元注解

元注解的作用就是负责注解其他注解

  • @Target:用于描述注解的使用范围

  • @Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期

    源码 代码 运行

    (SOURCE<CLASS<RUNTIME)

  • @Document:说明该注解将被包含在javadoc中

  • @Inherited:说明子类可以继承父类中的该注解

package com.wang.annotation;

import java.lang.annotation.*;

//测试元注解
@MyAnnotation
public class Test02 {

   @MyAnnotation
   public void test(){

  }
}

//定义一个元注解@Target表示可以用在哪些地方
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Inherited
@interface MyAnnotation{

}

自定义注解

package com.wang.annotation;

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

//自定义注解
public class Test03 {
   //注解可以显示赋值 如果没有默认值我们就必须给注解赋值
   @MyAnnotation2(name = "wangyan" , schools = "dlkj")
   public void test(){ }
   @MyAnnotation3("王岩")
   public void test2(){ }
}

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyAnnotation2{

   //注解的参数:参数类型+参数名()
   String name() default "";
   int age() default 0;
   int id() default -1;//如果默认值为-1,代表不存在

   String[] schools() default {"清华大学"};
}

//如果只有一个值,建议用value命名
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyAnnotation3{
   String value();
}

 

posted @ 2021-05-10 15:18  卧剑之鱼  阅读(526)  评论(0)    收藏  举报