0
点赞
收藏
分享

微信扫一扫

Java注解(初级待升级)

微言记 2022-03-22 阅读 14
java

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 {"清华","北大"};
        }
    }
    
    

举报

相关推荐

0 条评论