JavaSE---Annotation
1、概述
1.1 JDK1.5开始,java提供了对Annotation的支持;
1.2 Annotation其实就是 代码中的特殊标记,这些标记 可以在编译、类加载、运行时被读取,并执行相应的处理;
1.3 提供使用Annotation,开发人员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息;
1.4 Annotation本质上就是一个接口;
从某些方面看,Annotation就像修饰符一样被使用在类、构造器、方法、属性等;
1.5 Annotation作用:为 程序元素(类、成员变量、方法等)设置元数据;
1.6 Annotation本身并不能影响程序的执行,无论新增、删除Annotation,代码都始终一样执行;
如果希望Annotation在程序运行时起到一定作用,需要使用 (访问和处理Annotation的工具) APT 对Annotation中的信息进行访问、处理;
1.7 Annotation必须使用工具处理,工具负责提取Annotation中的元数据,工具还会根据这些元数据提供额外的功能;
1.8 Annotation的使用:
在Annotation名称前使用@,并将其当做修饰符使用,用于修饰指定的程序元素;
2、JDK提供的3个Annotation(java.lang包下):
2.1 @Override
子类中的方法被@Override修饰时,编译器会去父类找对应的方法,如果没有则编译出错;
2.2 @Deprecated
当程序元素被@Deprecated修饰,当使用到此元素时,编译器会给出警告;
2.3 @SuppressWarnings
被@SuppressWarnings标识的程序元素 取消显示 编译器的警告;
package com.an.annotation; public class Test { //++++++++++++++@Override
public void say(){ } class A extends Test{
//编译器 去父类中是否有say方法,没有编译报错
@Override
public void say(){ }
} //++++++++++++++@Deprecated
@Deprecated
public void jump(){ }
@SuppressWarnings(value = "unchecked")
public static void main(String[] args){
new Test().jump();
} }
3、JDK提供的4个Annotation(java.lang.annotation包下):
3.1 用于修饰 其他的Annotation;
3.2 @Retention
作用:指定该Annotation可以保留多长时间;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention { RetentionPolicy value();
}
包含一个成员变量value,使用时必须为value赋值;
value值的种类:
3.3 @Target
作用:指定 被修饰的Annotation 可以用于程序的哪些元素;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target { ElementType[] value();
}
有一个成员变量value,使用时必须对value赋值;
value值的类型:
3.4 @Documented
作用:被@Documented修饰的Annotation 在使用时,将被javadoc工具提取成文档;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}
3.5 @Inherited
作用:被@Inherited修饰的Annotation 使用时,使用此Annotation的类的子类将均有该注解;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Inherited {
}
4、自定义Annotation类型
4.1 Annotation定义:
在Annotation名称前加@interface eg:public @interface Test{}
4.2 自定义、使用
package com.an.annotation; import java.lang.annotation.*; @Inherited
@Documented
@Retention(value = RetentionPolicy.RUNTIME)
public @interface TestOne {
}
package com.an.annotation; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; @Retention(value = RetentionPolicy.RUNTIME)
public @interface TestTwo {
}
package com.an.annotation; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; @Retention(value = RetentionPolicy.RUNTIME)
public @interface MyTest {
//使用default定义初始值
String name() default "jack";
int age() default 12;
String sex(); class Test{
//如果指定默认值,则无需赋值
@MyTest(sex = "female")
@TestOne
@TestTwo
public void hi(){ }
}
}
package com.an.annotation; import java.lang.annotation.Annotation;
import java.lang.reflect.Method; public class GetAnnotationTest {
@MyTest(sex = "female")
@TestOne
@TestTwo
public void say(){ } public static void main(String[] args)throws Exception{
Class testClass=Class.forName("com.an.annotation.GetAnnotationTest");
Method method =testClass.getMethod("say");
Annotation[] annotations =method.getAnnotations();
for (Annotation annotation:annotations){
System.out.println(annotation);
}
}
} 结果: @com.an.annotation.MyTest(name=jack, age=12, sex=female)
@com.an.annotation.TestOne()
@com.an.annotation.TestTwo()
JavaSE---Annotation的更多相关文章
- Java 注解机制
一.注解中的信息已经在Class中了,我们应该如何读取出来 java.lang.reflect.AnnotatedElement接口: public Annotation[] getAnnotatio ...
- Spring——原理解析-利用反射和注解模拟IoC的自动装配
解析Spring的IoC容器基于注解实现的自动装配(自动注入依赖)的原理 1.本文案例 使用注解和反射机制来模拟Spring中IoC的自动装配功能 定义两个注解:@Component,用来标注组件:@ ...
- JavaSE学习笔记--Item1 注解Annotation
从 JDK 5.0 開始, Java 添加了对元数据(MetaData) 的支持, 也就是 Annotation(注解). 什么是Annotation,以及注解的作用? 三个主要的 Annotatio ...
- Java Annotation概述
@(Java)[Annotation|Java] Java Annotation概述 用途 编译器的相关信息,如用于检测错误和一些警告 编译时和部署时的处理,如一些软件用于自动生成代码之类的 运行时处 ...
- 用大白话聊聊JavaSE -- 自定义注解入门
注解在JavaSE中算是比较高级的一种用法了,为什么要学习注解,我想大概有以下几个原因: 1. 可以更深层次地学习Java,理解Java的思想. 2. 有了注解的基础,能够方便阅读各种框架的源码,比如 ...
- javaSE学习路线
Java SE大致可分为以下几块内容: n 对象导论:如何用面向对象的思路来开发 n 深入JVM:Java运行机制以及JVM原理 n 面向对象的特征:封装.继承.抽象.多态 n 数组和容器:容 ...
- 深入理解Java:注解(Annotation)基本概念
转自:http://www.cnblogs.com/peida/archive/2013/04/23/3036035.html 竹子-博客(.NET/Java/Linux/架构/管理/敏捷) 什么是注 ...
- Annotation实战【自定义AbstractProcessor】
前言 在使用Java的过程中,每个开发人员都接触过@Override, @Deprecated等等各式各样的注解,这些东西是java最基础的一些原生定义好的annotation.本文通过一个实例演示如 ...
- Java Annotation 机制源码分析与使用
1 Annotation 1.1 Annotation 概念及作用 1. 概念 An annotation is a form of metadata, that can be added ...
- JAVA提高五:注解Annotation
今天我们学习JDK5.0中一个非常重要的特性,叫做注解.是现在非常流行的一种方式,可以说因为配置XML 比较麻烦或者比容易查找出错误,现在越来越多的框架开始支持注解方式,比如注明的Spring 框架, ...
随机推荐
- sql中强制使用索引
如果在sql中使用的索引不生效,可以使用FORCE INDEX(索引),来强制使用索引: 例: SELECT COUNT(DEAL_STAT) FROM c_pac FORCE INDEX (IDX ...
- This MySqlConnection is already in use
项目中类似于以下的代码,实际的代码要更复杂,DbContext是依赖注入的: 报错如下: This MySqlConnection is already in use. See https://fl. ...
- [原创] Delphi 修改新建窗体时候的默认字体格式
Delphi 修改新建窗体时候的默认字体格式 操作步骤: 1.运行输入“regedit” 2.找到目录(这里默认以Delphi 7为例) HKEY_CURRENT_USER\Software\Borl ...
- centos在线安装mysql报错:file /etc/my.cnf conflicts between attempted installs of mysql-community-server-8.0.16-2.el7.x86_64 and MariaDB-common-10.4.6-1.el7.centos.x86_64
错误提示:file /etc/my.cnf conflicts between attempted installs of mysql-community-server-8.0.16-2.el7.x8 ...
- 【HDOJ6598】Harmonious Army(最小割)
题意:有n个人,每个人可以从A,B两种职业中选择一种 有m对两人组,如果两个人都是A能获得p的收益,一个A一个B能获得q的收益,都是B能获得r的收益,其中q=p/4+r/3,保证p%4=0,r%3=0 ...
- [CSP-S模拟测试]:密州盛宴(贪心)
江城子·密州出猎老夫聊发少年狂,左牵黄,右擎苍,锦帽貂裘,千骑卷平冈.为报倾城随太守,亲射虎,看孙郎.酒酣胸胆尚开张,鬓微霜,又何妨!持节云中,何日遣冯唐?会挽雕弓如满月,西北望,射天狼.(这首词通过 ...
- Asp.Net Core 第07局:路由
总目录 前言 本文介绍Asp.Net Core 路由. 环境 1.Visual Studio 2017 2.Asp.Net Core 2.2 开局 第一手:路由概述 1.路由主要用于处理特定的请求. ...
- git设置忽略文件.gitignore
在仓库目录下新建一个名为.gitignore的文件(因为是点开头,没有文件名,没办法直接在windows目录下直接创建,必须通过右键Git Bash,按照linux的方式来新建.gitignore文件 ...
- 记录之前工作用到费劲sql
表为单独表,树结构 layer共有4层, 此sql为通过id list 查询出 layer = 2 的 id 个数 id , parent_id, layer SELECT COUNT(DISTINC ...
- USACO 5.5 章节
Picture 题目大意 IOI 1998 求n (<=5000)个矩形 覆盖的图形 的周长(包括洞), 坐标范围[-10000,10000] 题解 一眼离散化+2维线段树,但仔细一想 空间不太 ...