语法要求、元注解

  • 元注解:

    Target-适用范围;

    Retention-类型:源码注解、编译时注解、运行时注解

    Inherited-可继承(只能继承类上的注解,接口、类中的方法都不行)

    Documented-可生成文档

  • 关键字-@interface

    成员要求:

    成员类型须为基8类型,及String,Class,Annotation,Enumeration

    若注解只有一个成员,则该成员名称须为value()

    注解类也可以没有成员,即为标识注解

Demo:

public class DefAnnoDemo {
//上面4行为元注解
//Target可选,CONSTRUCTOR,FIELD,LOCAL_VARIABLE,METHOD,PACKAGE,PARAMETER,TYPE
@Target({ElementType.METHOD,ElementType.TYPE})//注解试用范围,方法、类
//Retention可选,SOURCE,CLASS,RUNTIME
@Retention(RetentionPolicy.RUNTIME)//属性,源码、编译时、运行时
@Inherited //可以被继承
@Documented //生成文档时会包含注解
//注解关键字-@interface
public @interface AnnoDemo{
//成员类型须为基8类型,及String,Class,Annotation,Enumeration
String Anno(); //成员须为无参无异常
int age() default 1; //可以用default定义默认
//若注解只有一个成员,则该成员名称须为value()
//int Value();
//注解类也可以没有成员,即为标识注解
}
}

自定义注解的使用

@<注解名>(<成员名1>=<成员值1>,...)

Demo:

@AnnoDemo(Anno = "abcd", age = 18)
class Test { @AnnoDemo(Anno = "abc")
public void test1(String[] p) {
}
}

解析注解

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

Demo:

    public class AnnoUseDemo {
public static void main(String[] args) {
// 类加载
Test t = new Test(); //将这里改为TestSon,查看@Inherited继承效果
Class<? extends Test> c = t.getClass();
// 判断该类是否包含AnnoDemo注解
if (c.isAnnotationPresent(AnnoDemo.class)) {
// 获得注解
AnnoDemo a = (AnnoDemo) c.getAnnotation(AnnoDemo.class);
System.out.println(a.age());
} // 获取方法上的注解
try {
Method m = c.getMethod("test1", String[].class);
if (m.isAnnotationPresent(AnnoDemo.class)) {
AnnoDemo a = (AnnoDemo) m.getAnnotation(AnnoDemo.class);
System.out.println(a.Anno());
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} // 获取所有方法注解
Method[] ms = c.getMethods();
for (Method method : ms) {
if (method.isAnnotationPresent(AnnoDemo.class)) {
AnnoDemo a = method.getAnnotation(AnnoDemo.class);
System.out.println(a.Anno() + a.age());
}
}
}
}
class TestSon extends Test{
@Override
public void test1(String[] p){ }
}

Java注解【四、自定义注解】的更多相关文章

  1. Java注解-元数据、注解分类、内置注解和自定义注解|乐字节

    大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解. Java注解有以下几个知识点: 元数据 注解的分类 内置注解 自定义注解 注解处理器 Ser ...

  2. Java中的注解及自定义注解你用的怎么样,能不能像我这样应用自如?

    Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...

  3. Springboot--元注解及自定义注解(表单验证)

    本文简单说明一下元注解,然后对元注解中的@Retention做深入的讨论,在文章最后使用元注解写一个自定义注解来结尾. 一.结论: @Target:注解的作用目标 @Target(ElementTyp ...

  4. java注解和自定义注解的简单使用

    前言 在使用Spring Boot的时候,大量使用注解的语法去替代XML配置文件,十分好用. 然而,在使用注解的时候只知道使用,却不知道原理.直到需要用到自定义注解的时候,才发现对注解原理一无所知,所 ...

  5. Java反射与自定义注解

    反射,在Java常用框架中屡见不鲜.它存在于java.lang.reflact包中,就我的认识,它可以拿到类的字段和方法,及构造方法,还可以生成对象实例等.对深入的机制我暂时还不了解,本篇文章着重在使 ...

  6. java内置注解、元注解和自定义注解

    注解的作用: 1.生成文档 2.跟踪代码依赖性 3.编译时进行格式检查 ---------------------------------------------------------------- ...

  7. Java:深入自定义注解(Annotation)

    在网上找了很多资料也有写的比较好的,但是总有有一点半点的细节没有写出来,在这里自己总结下使用. 使用Java的自定义注解,首先个人需要了解下Java为我们提供的元注解和相关定义注解的语法.(这个我在网 ...

  8. Java注解(自定义注解、view注入)

    注解这东西虽然在jdk1.5就加进来了,但他的存在还是因为使用Afinal框架的view注入才知道的.一直觉得注入特神奇,加了一句就可以把对应view生成了. 下面我们来认识一下注解这个东西 一.注解 ...

  9. Java中的自定义注解

    ## 元注解 要声明一个注解, 我们需要元注解, 元注解是指注解的注解,包括@Retention, @Target, @Document, @Inherited. @Retention 注解的保留位置 ...

  10. Spring注解之-自定义注解

    1.自定义注解,先自定义三个水果属性的注解 元注解: java.lang.annotation提供了四种元注解,专门注解其他的注解(在自定义注解的时候,需要使用到元注解):   @Documented ...

随机推荐

  1. 创建使用Spring Boot

    Spring Boot 创建项目 Spring Initializr 创建完成会自动下载 解压后 Idea导入 修改国内镜像 网络不够强的话停掉自动更新 build.gradle 加上 reposit ...

  2. MATLAB学习(九)系统聚类

        >> X=rand(100,2); >> Y=pdist(X,'euclidean'); >> Z = linkage(Y,'average'); > ...

  3. 阿里云Centos7挂载数据盘

    查看磁盘情况 fdisk -l fdisk /dev/vdb 根据提示,分别输入 n. p. . enter.enter.wq fdisk -l mkfs.ext3 /dev/vdb1 挂载磁盘,写入 ...

  4. memcached源码分析-----item过期失效处理以及LRU爬虫

    memcached源码分析-----item过期失效处理以及LRU爬虫,memcached-----item 转载请注明出处:http://blog.csdn.net/luotuo44/article ...

  5. k8s中ipvs和iptables选择

    k8s 1.11.0在 centos7上不行 1.11.1之后就可以了

  6. 增强for循环的简单总结

    整体来说:增强型for循环使用起来比较方便,代码也比较简单,如果只是操作集合中元素的而不使用索引的话,建议用此方法.对于普通for循环,如果需要使用索引进行其它操作的话,建议用这个. 详细来说:1,区 ...

  7. dozer转化对象

    依赖: commons-beanutils-1.9.3.jar.commons-lang-2.6.jar.dozer-5.3.2.jar.jcl-over-slf4j-1.7.25.jar.slf4j ...

  8. Spark读取HDFS中的Zip文件

    1. 任务背景 近日有个项目任务,要求读取压缩在Zip中的百科HTML文件,经分析发现,提供的Zip文件有如下特点(=>指代对应解决方案): (1) 压缩为分卷文件 => 只需将解压缩在同 ...

  9. 论UT阶段重要性

    测试与开发这对立的命运啊 如果是对测试从业者心存鄙视的朋友啊,请关掉此页,带着偏见不好看的~ 人生就像一个旅途,每个人看到风景不一样,世界观.人生观.价值观也就不同.不要试着去改变别人,因为你的观点在 ...

  10. 关于mac配置vs code的C++环境问题

    在配置完成后,编译通过了但是在终端输出一直不出现很奇怪,求问大家这是啥问题 以下是我的配置