Java注解学习笔记

本文为学习Java注解视频(全面解析Java注解)时所写笔记,不足之处,欢迎指正

概念:
Java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法

分类:
按照运行机制
1、源码注解(注解只在源码中存在,编译成.class文件就不存在了)
2、编译时注解(注解在源码和.class文件中都存在)
3、运行时注解(在运行阶段还起作用,甚至会影响运行逻辑的注解)
按照来源分
1、来自JDK的注解
2、来自第三方的注解
3、自定义注解
元注解:注解的注解

自定义注解:
语法要求

@Target({ElementType.METHOD,ElementType.TYPE})
/*原注解的作用域(CONSTRUCTOR:构造方法声明,FIELD:字段声明 ,LOCAL_VARIABLE:局部变量声明,METHOD:方法声明,PACKAGE:包声明,PARAMETER:参数声明,TYPE:类、接口)*/

@Retantion(RetentionPolicy.RUNTIME)
/*元注解的声明周期(SOURCE:只在源码显示,编译时会丢弃  CLASS:编译时会记录到class中,运行时忽略   RUNTIME:运行时存在,可以通过反射读取)*/

@Inherited
/*标识性的元注解(允许子类继承)*/

@Documented
/*生成Javadoc时会包含注解*/

public @interface Description{  //使用@interface关键字定义注解
    String desc();  //成员以无参无异常的方式声明
    int age() default 18;       //可以用default为成员指定一个默认值
    /* 1、成员类型是受限的,合法的类型包括原始类型及String、Class、Annotation、Enumeration
    * 2、如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)
    * 3、注解类可以没有成员,没有成员的注解称为标识注解
    */
}

使用自定义注解:
使用语法:@<注解名>(<成员名1>=<成员值1>,<成员名2>=<成员值2>,…)

实例:
@Description(desc="I am eysColor",author="Mooc boy",age=18)
public String eyeColor(){
    return "red:"
}

解析注解:
概念:通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑

public static void main(String [] args){
    //1、使用类加载器加载类
    try{
        Class c = Class.forName("Com.Child");       //完整类名
        //2、找到类上的注解
        boolean isExist = c.isAnnotationPresent(Description.Class);
        if(isExist){
            //3、拿到注解实例
            Description d = (Description) c.getAnnotation(Description.class);
            System.out.println(d.value());
        }
        //4、找到方法上的注解
        Method[] ms = c.getMethods();
        for(Method m : ms){
            boolean isMExist = m.isAnnotationPresent(Description.class);
            if(isMExist){
                Description d = (Description) m.getAnnotation(Description.class);
                System.out.println(d.value());
            }
        }

        //另外一种解析方法
        for(Method m : ms){
            Annotation[] as = m.getAnnotation();
            for(Annotation a : as){
                if(a instanceof Description){
                    Description d = (Description) a;
                    System.out.println(d.value());
                }
            }
        }
    } catch(ClassNotFoundException e){
        e.printStackTrace();
    }
}

友情链接:
Java中的注解是如何工作的?
java 注解的几大作用及使用方法详解
怎样优雅地使用java注解?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值