Java高级特性———Java注解
什么是注解(Annotation)?
注解是放在Java源码的类、方法、字段、参数上的一种标签,在Java SE 5.0版本中开始引入。注解同class和interface一样,也属于一种类型。
如何定义注解?
通过关键字@interface去定义,基本的使用方法如下:
@interface +注解名{} //注解定义规则
//例:创建一个名称为testAnnotation的注解
public @interface testAnnotation{
}
通过定义注解,可观察到注解相比于接口类的定义,前面多了一个“@”符号。
以上的代码可以理解为:创建了一个名称为testAnnotation的注解。
如何应用注解?
上边创建完注解以后,如何去使用注解?根据注解的定义,我们可以了解到注解可以放置到类、方法、字段或者是参数上。下面是一个注解的使用案例:
//在方法test上使用testAnnotation注解
@testAnnotation
public static void test() { } //定义名称为testAnnotation的注解
@interface testAnnotation{ }
要想注解能够正常的工作,我们还需要明白Java中的元注解。在讲元注解前,我们需要理解注解中如何定义注解的属性。
何为注解的属性?
注解的属性也叫做成员变量。注解只有成员变量,没有方法。注解的成员变量在注解的定义中以“无形参的方法”形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型。
如何定义注解属性?
属性的定义: 类型+属性名() +[default +"默认值"];(其中[ ]括号内的为可要可不要部分)
下面是定义注解的属性的案例:
//定义名称为testAnnotation的注解
@interface testAnnotation{
/**
* 注解的属性:
*1.定义属性:类型+属性名();
*2.为属性指定默认值:通过default关键字。(例如:int id() default 0)
**/ //定义属性名为id的属性,其默认值为0
int id() default 0; }
Tip:在注解中定义属性时它的类型必须是 8 种基本数据类型外加 类、接口、注解及它们的数组。 思考如何使用带有属性的注解,且如何给属性赋值? 通常我们在使用注解的时候,在后边跟上一个英文括号,在括号里边给每个注解的属性赋值,然后使用逗号分隔各个属性值。赋值的方式我们通过:属性名=值。
例如:
//使用注解,并为id属性赋值
@testAnnotation(id=0)
public static void test() { } //定义名称为testAnnotation的注解
@interface testAnnotation{
/**
* 注解的属性:
*1.定义属性:类型+属性名();
*2.为属性指定默认值:通过default关键字。(例如:int id() default 0)
**/ //定义属性名为id的属性,其默认值为0
int id() default 0; }
另外,还有一种情况。如果一个注解内仅仅只有一个名字为 value 的属性时,应用这个注解时可以直接接属性值填写到括号内。
例如:
//使用注解,并为value属性赋值
@testAnnotation("hgqin")
public static void test() { } //定义名称为testAnnotation的注解
@interface testAnnotation{
/**
* 注解的属性:
*1.定义属性:类型+属性名();
*2.为属性指定默认值:通过default关键字。(例如:int id() default 0)
**/ //定义属性名为id的属性,其默认值为0
int id() default 0;
String value(); }
何为元注解?
元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其它的注解上面。
如果难于理解的话,你可以这样理解。元注解也是一张标签,但是它是一张特殊的标签,它的作用和目的就是给其他普通的标签进行解释说明的。
元注解有 @Target、@Retention、@Documented、@Inherited、@Repeatable 5 种。(需要重点记忆)
逐个分析元注解:
@Target:Target 是目标的意思,@Target 指定了注解运用的范围。你可以简单的理解为@Target标签指定了自定义注解使用的场景(比如类上或者方法上等)。
@Target的取值有:
- ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
- ElementType.CONSTRUCTOR 可以给构造方法进行注解
- ElementType.FIELD 可以给属性进行注解
- ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
- ElementType.METHOD 可以给方法进行注解
- ElementType.PACKAGE 可以给一个包进行注解
- ElementType.PARAMETER 可以给一个方法内的参数进行注解
- ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举
@Retention:Retention 的英文意为保留期的意思。当 @Retention 应用到一个注解上的时候,它解释说明了这个注解的的存活时间。
它的取值如下:
- RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
- RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
- RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
@Document:Document 的英文意为文档的意思。顾名思义,这个元注解肯定是和文档有关。它的作用是能够将注解中的元素包含到 Javadoc 中去。
@Inherit :Inherited 是继承的意思,但是它并不是说注解本身可以继承,而是说如果一个超类被 @Inherited 注解过的注解进行注解的话,那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解。
@Repeatable:Repeatable 自然是可重复的意思。@Repeatable 是 Java 1.8 才加进来的,所以算是一个新的特性。
如何完整的定义一个注解?
例如:
//使用注解,并为id属性赋值
@testAnnotation("hgqin")
public static void test() { } @Target(ElementType.METHOD) //定义使用范围为方法上
@Retention(RetentionPolicy.RUNTIME) //定义存活时间为运行时
@Documented //可文档
@Inherited //继承
//定义名称为testAnnotation的注解
@interface testAnnotation{
/**
* 注解的属性:
*1.定义属性:类型+属性名();
*2.为属性指定默认值:通过default关键字。(例如:int id() default 0)
**/ //定义属性名为id的属性,其默认值为0
int id() default 0;
String value(); }
常见的内置注解有哪些?
1.@Override:定义在java.lang.Override包中,此注解只用于修饰方法,表示一个方法声明打算重写超类中的另一个方法声明。
2.@Deprecated:定义在java.lang.Deprecated包中,此注解可以用来修饰构造器、字段、类、方法、包、属性等。
- 注释@Deprecated的程序元素是程序员不鼓励使用的程序元素,通常是因为它是危险的,或者因为存在更好的替代方法。 编译器在不被弃用的代码中使用或覆盖不推荐使用的程序元素时发出警告。
3.@SupressWarnings:定义在java.lang.SupressWarnings包中, 此注解可以用来修饰类、构造器、方法、字段等。用来抑制编译时的警告信息。
>与前两个不同,需要传入一个参数才能使用,这些参数都是提前定义好的,使用方法有下面几种方式:
(1)@SupressWarnings(“all”)
(2)@SupressWarnings("unchecked")
(3)@SupressWarnings(value="{"unchecked","deprecation"}")
(4)等等...
Java高级特性———Java注解的更多相关文章
- paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型
paip.java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...
- Java高级特性-String、StringBuffer和StringBuilder
Java高级特性-String.StringBuffer和StringBuilder String Java语言中的字符串值都属于String类,虽然有其他方法表示字符串(如字符串数组),但Java一 ...
- java高级特性增强
第4天 java高级特性增强 今天内容安排: 1.掌握多线程 2.掌握并发包下的队列 3.了解JMS 4.掌握JVM技术 5.掌握反射和动态代理 java多线程增强 .1. java多线程基本知识 . ...
- Java高级特性——反射机制(第二篇)
在Java高级特性——反射机制(第一篇)中,写了很多反射的实例,可能对于Class的了解还是有点迷糊,那么我们试着从内存角度去分析一下. Java内存 从上图可以看出,Java将内存分为堆.栈.方法区 ...
- Java高级特性1_流库_初体验
Java高级特性流库_初体验 面对结果编程 在编程里, 有两种编程方式, 一种是面对过程编程, 一种是面对结果编程. 两者区别如下 面向过程编程 面向过程编程需要编程程序让程序依次执行得到自己想要的结 ...
- JAVA高级特性 - 注解
注解是插入到代码中用于某种工具处理的标签.这些标签可以在源码层次上进行操作,或者可以处理编译器将其纳入到注解类文件中. 注解不会改变对程序的编译方式.Java编译器会对包含注解和不包含注解的代码生成相 ...
- 云端卫士实战录 | Java高级特性之多线程
<实战录>导语 一转眼作为一名Java开发者已经四年多时间了,说长不长说短不短,对于java的感情还是比较深的,主要嘛毕竟它给了我饭吃.哈哈,开个玩笑.今天我想借此机会来和大家聊聊Java ...
- Java高级特性之泛型
首先我们先提出两个问题: 什么是泛型? 为什么要使用泛型?我们先来看看第一个问题什么是泛型.如果你对Java三大特性中的多态性理解的比较透彻的话,泛型就比较好理解了.多态性表示一个对象具备多种状态.比 ...
- Java高级特性 第2节 java中常用的实用类(1)
一.Java API Java API即Java应用程序编程接口,他是运行库的集合,预先定义了一些接口和类,程序员可以直接调用:此外也特指API的说明文档,也称帮助文档. Java中常用的包: jav ...
随机推荐
- Hexo 静态博客指南:建站教程(上)
本文最初发布于我的个人博客Bambrow's Blog,采用 BY-NC-SA 许可协议,转载请注明出处.若有后续更新,将更新于原博客.欢迎去我的博客阅读更多文章! 本文详细记录一下站点建立过程,以便 ...
- PHP image2wbmp - 输出WBMP图片
image2wbmp — 以 WBMP 格式将图像输出到浏览器或文件.高佣联盟 www.cgewang.com 语法 int image2wbmp ( resource $image [, strin ...
- Skill 脚本演示 ycAutoSnap.skl
https://www.cnblogs.com/yeungchie/ ycAutoSnap.skl 版图编辑中自动吸附 Path 的 "垂直线头",也可以批量对齐 Bus 走线,也 ...
- IOFFSETOF ICONTAINEROF IQUEUE_ENTRY
#include <iostream> #define IOFFSETOF(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) #de ...
- 探究:编程语言那么多,为什么偏偏是 C 语言成了大学的必修课?
谁叫你不幸生在中国了? ——何祚庥(中国科学院院士) 这是一本给非计算机专业的大学生的C语言的书.“我不是学计算机的,为啥要学C语言?”这个问题每年在中华大地都会被问上几百万次.被问的对象可能是老师, ...
- 剑指 Offer 58 - I. 翻转单词顺序
本题 题目链接 题目描述 我的题解 方法一:库函数split() 要注意str.split()函数: 字符串str前有 n 个空格时,分割出来的字符串列表中会多出 n 个空字符串: 字符串str某两个 ...
- 微信公众号添加word文件
微信公众号添加word文件的教程 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下是公众 ...
- Java进阶知识
01[Object类.常用API] 主要内容 Object类 Date类 DateFormat类 Calendar类 System类 StringBuilder类 包装类 第一章 Object类 1. ...
- 拓展欧几里得求 ax + by = c的通解(a >=0, b >= 0)
#include <iostream> #include <cstdio> #include <algorithm> #include <vector> ...
- Linux快速搭建C/C++开发环境
导读:越来越多的程序员在Linux下进行C/C++的开发.本文以CentOS 7为例,教你快速搭建一个vi + gcc/g++ + Make + valgrind的开发环境. 本文字数:1500,阅读 ...