2020-08-10注解

作者: 智障猿 | 来源:发表于2020-08-16 21:29 被阅读0次

概念

  • 概述:
    ①JDK1.5之后的新特性
    ②说明程序的
    ③使用注解:@注解名称
  • 作用:
    ①编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【override】
    ②文档编写:通过代码里标识的注解生成文档【生成文档doc文档】命令:javadoc xxxx.java
    ③代码分析:通过代码里标识的注解对代码进行分析【使用反射】

JDK中预定义的注解

注解 说明
@Override 检测被该注解标注的方法是否继承自父类(接口)的
@Deprecated 该注解标注的内容,标识已过时
@Suppreswarnings("all") 压制警告

自定义注解

  • 格式:
    ①元注解
    ②public @interface 注解名称{
    属性列表;
    }
  • 本质:注解本质就是一个接口
    public interface 注解名称 extends java.lang.annotation.Annotation{}
  • 属性:接口中的抽象方法
    ①属性的返回值类型(基本数据类型,String,枚举,注解,以上类型的数组)
    ②定义了属性,在使用注解时需要给属性赋值(如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值;如果只定义一个属性需要赋值,并且属性的名称为value,则value可以省略,直接定义值;数组赋值时,值用{}包裹,数组只有一个值,{}可以省略)
  • 元注解:用于描述注解的注解
    @Target:描述注解能够作用的位置(@Target(value={ElementType.值,ElementType.METHOD}))
    @Retention:描述注解被保留的阶段(@Retention(value={RetentionPolicy.值,RetentionPolicy.值}))
    @Decument:描述是否被抽取到api文档中
    @Inherited:描述注解是否被子类继承

ElementType的取值

取值 说明
Type 可以作用于类上
METHOD 可以作用于方法上
FIELD 可以作用于变量上

RetentionPolicy的取值

取值 说明
SOURCE 注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃
CLASS 当前被描述的注解,会保留到class字节码文件中,但jvm加载class文件时候被遗弃
RUNTIME 当前被描述的注解,会保留到class字节码文件中,并被JVM读取到

使用(解析)注解

  1. 获取注解定义的位置的对象(反射Class,Method,Field)
  2. 获取指定的注解(对象.getAnnotation(注解名.class))
  3. 调用注解中的抽象方法获取配置的属性值
  • 范例
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Pro {
    String className();
    String method();
}


import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

@Pro(className = "cn.it.Student",method = "study")
public class Test {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
//        1.解析注解
//        1.1获取该类的字节码文件对象
        Class<?> aClass = Class.forName("cn.it.Test");
//        2.获取注解对象
        //其实就是在内存中生成了一个该注解接口的子类实现对象
        /*
        public class ProImpl implement Pro{
            public String className(){
                return “cn.it.Student”;
            }
            public String method(){
                return "study";
            }
        }
         */
        Pro annotation = aClass.getAnnotation(Pro.class);
//        3.调用注解对象中定义的抽象方法,获取返回值
        String className = annotation.className();
        String method = annotation.method();
//        4.加载指定的类到内存
        Class<?> aClass1 = Class.forName(className);
        Constructor<?> constructor = aClass1.getConstructor();
//        5.创建对象
        Object o = constructor.newInstance();
//        6.获得指定方法对象
        Method method1 = aClass1.getMethod(method);
//        7.执行方法
        method1.invoke(o);
    }
}

相关文章

  • 2020-08-10注解

    概念 概述:①JDK1.5之后的新特性②说明程序的③使用注解:@注解名称 作用:①编译检查:通过代码里标识的注解让...

  • 如果可以请改变现状

    如果可以请试着改变现状 伸手触云 关注 7.746 · 字数 254 · 阅读 763 2020-08-10 16...

  • 2020-08-16 思考成长周复盘

    一 时间 2020-08-10 ~ 2020-08-16 二 围绕思考成长所做的事情 1.每日早起,每日利用精力最...

  • 文件批量替换修改及格式转换助手我的ABC软件工具箱—XCLWin

    最新版 v3.7(2020-08-10) 添加根据模板文件和 Excel 数据批量生成文件的功能(类似于 Word...

  • 注解学习笔记

    什么是注解注解分类注解作用分类 元注解 Java内置注解 自定义注解自定义注解实现及使用编译时注解注解处理器注解处...

  • 注解与反射

    注解 声明一个注解类型 元注解 在定义注解时,注解类也能够使用其他的注解声明。对注解类型进行注解的注解类,我们称之...

  • 1.8 Java 注解annotation

    1.1 注解声明 Java注解Annotation,有声明注解和元注解 元注解:Java提供的元注解,所谓元注解就...

  • 注解的使用

    元注解 注解 注解本质就是接口: 元注解:修饰注解的注解 自定义注解 Text.java FruitName.ja...

  • 注解

    Java注解 注解 元注解 自定义注解 元注解:负责注解其他注解 共有4个标准的meta-annotation类型...

  • Spring高级应用之组合注解和元注解

    1.核心概念: 元注解:可以注解在其他注解上的注解;被注解的注解成为组合注解; 2.组合注解的定义步骤 定义组合注...

网友评论

    本文标题:2020-08-10注解

    本文链接:https://www.haomeiwen.com/subject/qidjdktx.html