语法要求、元注解

  • 元注解:

    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. SOA相关资料

    http://www.cnblogs.com/mushroom/p/4369032.html

  2. 002-tomcat目录简介、应用部署【自动部署 ② 控制台部署 ③ 自定义部署】

    一.目录及功能 主目录下有bin,conf,lib,logs,temp,webapps,work 7个文件夹 1.1.bin目录[重要] bin目录主要是用来存放tomcat的命令,主要有两大类,一类 ...

  3. 关于java面试题

    java的优点: Java是一种跨平台,适合于分布式计算环境的面向对象编程语言. 具体来说,它具有如下特性: 简单性.面向对象.分布式.解释型.可靠.安全.平台无关.可移植.高性能.多线程.动态性等.

  4. PO BAPI "BAPI_PO_CREATE1"

    DATA: poheader LIKE  bapimepoheader,         poheaderx LIKE  bapimepoheaderx,         poitem  LIKE   ...

  5. Cloudera Manager 常见异常

    1. Cloudera Management Service服务全部无法启动 观察到的现象: (1)cm service 组件无法启动,启动时服务请求超时终止:(2)主机信息也无法获取到,一直提示“无 ...

  6. mysql大量locked的一个案例

    转自 http://cyxu2004.blog.163.com/blog/static/45768718201222133440986/

  7. Apriori算法--Python实现

    # -*- coding: utf-8 -*- """ Created on Mon Nov 05 22:50:13 2018 @author: ZhuChaochao ...

  8. VS Code中内置终端运行C中文乱码问题

    环境:Win10 + VS Code + Code Runner插件 原因:VS Code默认文件编码为 UTF-8,生成的可执行文件也是UTF-8编码的,但是系统编码为 GB2312,所以程序中的中 ...

  9. python-Web-数据库-mysql

    概念: 服务器->数据库管理系统(软件)->数据库(文件夹)->表(文件) 关系型 安装与配置: >>>下载-安装-环境变量 >>>启动 mysq ...

  10. 英特尔®oneAPI简介及动手实验研讨会召集令

    Intel Developer Zone 2019年超级计算大会英特尔正式发布了oneAPI软件行业计划及其beta产品,在上篇文章中我们已为您介绍了oneAPI的基本含义,本文将继续为您介绍oneA ...