Java笔记(二十) 注解
注解
一、内置注解
Java内置了一些常用注解:
1.@Override
该注解修饰一个方法,表示当前类重写了父类的该方法。
2.@Deprecated
该注解可以修饰类、方法、字段、参数等。表示对应的代码已经过时,不应该被使用。
它是一种警告,不是强制性的。当一个元素被注解为Deprecated时,应该在Java文档中说明替代方案。
3.@SuppressWarnings
该注解表示,压制Java编译器警告,它有一个必填参数表示压制那种类型的警告。
可以修饰大部分代码元素。
二、创建注解
注解的定义,如@SuppressWarnings的定义
- @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
- @Retention(RetentionPolicy.SOURCE)
- public @interface SuppressWarnings {
- String[] value();
- }
元注解:用于定义注解本身
1)@Target:表示注解的目标,其中的ElementType是个枚举,主要可选值有:
TYPE:表示类、接口(包括注解),或者枚举声明;
FIELD:字段、包括枚举常量;
METHOD:方法;
PARAMETER:表示方法参数;
CONSTRUCTOR:构造方法;
LOCAL_VARIABLE:本地变量。
如果没有声明@Target,默认适用于所有类型。
2)@Retention:表示注解信息保留到什么时候,取值只能有一个,类型为RetentionPolicy,
它是一个枚举,取值有:
SOURCE:只保留在源代码中,编译器将代码编译为字节码后文件就会丢掉。
CLASS:保留到字节码文件中,但Java虚拟机将文件加载到内存时不一定会在内存中保留。
RUNTIME:一直保留到运行时。
3)@Document:表示注解信息包含到生成的文档中。
4)@Inherited:例子:
- public class InheritDemo {
- @Inherited
- @Retention(RetentionPolicy.RUNTIME)
- static @interface Test {
- }
- @Test
- static class Base {
- }
- static class Child extends Base {
- }
- public static void main(String[] args) {
- System.out.println(Child.class.isAnnotationPresent(Test.class)); //true
- }
- }
注意:与接口和类不同,注解不能被继承。
三、查看注解信息
利用反射机制,我们可以查看和利用注解信息。
Class、Field、Method、Constructor都有如下方法:
- //获取所有注解
- public Annotation[] getAnnotations()
- //获取本元素上直接声明的注解,忽略@Inherited来的
- public Annotation[] getDeclaredAnnotations()
- //获取指定类型的注解,没有返回null
- public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
- //判断是否有指定类型的注解
- public boolean isAnnotationPresent(
- Class<? extends Annotation> annotationClass)
其中Annotation是一个注解,表示接口:
- public interface Annotation {
- boolean equals(Object obj);
- int hashCode();
- String toString();
- //返回真正的注解类型
- Class<? extends Annotation> annotationType();
- }
实际上内部实现时,所有的注解类型都是扩展的Annotation。
对于Method和Contructor,它们都有方法参数,而参数也可以有注解,所有它们都有如下方法:
- public Annotation[][] getParameterAnnotations()
返回一个二维数组,每个参数对应一个一维数组。
Java笔记(二十) 注解的更多相关文章
- Java笔记(二十九)……网络编程
概述 网络模型 网络通讯的要素 ip地址:网络中设备的标识符 端口:用于标识同一台设备上不同的进程,有效端口:0~65535,其中0~1024是系统使用端口或者保留端口 TCP与UDP UDP特点: ...
- Java笔记(二十八)……IO流下 IO包中其他常用类以及编码表问题
PrintWriter打印流 Writer的子类,既可以接收字符流,也可以接收字节流,还可以接收文件名或者文件对象,非常方便 同时,还可以设置自动刷新以及保持原有格式写入各种文本类型的print方法 ...
- Java笔记(二十六)……IO流上 字节流与字符流
概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...
- Java笔记(二十五)……其他常用API
System类 工具类全部都是静态方法 常用方法 获取系统属性信息 static PropertiesgetProperties() static StringgetProperty(String k ...
- Java笔记(二十四)……集合工具类Collections&Arrays
Collections 集合框架的工具类,方法全部为静态 Collections与Collection的区别 Collection是集合框架的一个顶层接口,里面定义了单列集合的共性方法 Collect ...
- Java笔记(二十二)……Collection集合
概述 为什么会出现集合类 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式 数组和集合类同是容器,有何不同 数组虽然也可以存储 ...
- Java笔记(二十)……线程间通信
概述 当需要多线程配合完成一项任务时,往往需要用到线程间通信,以确保任务的稳步快速运行 相关语句 wait():挂起线程,释放锁,相当于自动放弃了执行权限 notify():唤醒wait等待队列里的第 ...
- Java进阶(二十五)Java连接mysql数据库(底层实现)
Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...
- python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...
- python3.4学习笔记(二十五) Python 调用mysql redis实例代码
python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...
随机推荐
- LVM备份(1)-创建LVM逻辑卷
LV(Logical Volume) - 逻辑卷 VG(Volume Group) - 卷组 PV(Physical Volume) - 物理卷 1.查看分区信息:fdisk -l 可看到磁盘大小为1 ...
- jq常用操作
1. 将滚动条置于底部 var srcH = $(".msg-IOC").prop("scrollHeight");$('.msg-IOC').scrollTo ...
- C++回顾day03---<输入输出流>
一:C++输入输出包含下面3个方面 (一)标准I/O 对系统指定的标准设备的输入和输出.即从键盘输入数据,输出到显示器屏幕.这种输入输出称为标准的输入输出. (二)文件I/O 以外存磁盘文件为对象进行 ...
- Entity Framework入门教程(11)---EF6中的异步查询和异步保存
EF6中的异步查询和异步保存 在.NET4.5中介绍了异步操作,异步操作在EF中也很有用,在EF6中我们可以使用DbContext的实例进行异步查询和异步保存. 1.异步查询 下边是一个通过L2E语法 ...
- JDBC事务管理
JDBC事务管理 概念回顾: 事务:一个包含多个步骤的业务操作,如果这个业务操作被事务管理,那么这个业务操作的多个步骤要么同时失败,要么同时成功 事务操作: 开启事务 提交事务 回滚事务 使用Conn ...
- SpringBoot系列: Spring支持的异常处理方式
===================================视图函数返回 status code 的方式===================================Spring 有 ...
- 【codeforces 765F】Souvenirs
Description Artsem is on vacation and wants to buy souvenirs for his two teammates. There are n souv ...
- 第30月第3天 iOS图标icon自动生成和自定义尺寸
1. http://icon.wuruihong.com/ https://www.jianshu.com/p/684751c14735 2.status bar UIViewControllerBa ...
- 逻辑运算符、位运算符、三元运算符、判断语句(if,switch)
逻辑运算符 逻辑与 &:由false则false 逻辑或 |:有true则true 逻辑异或 ^:相同为false,不同为true 逻辑非 !:非false则true,非true则false ...
- lsof/netstat命令的一个重要作用: 根据进程查端口, 根据端口查进程
我们知道, 根据ps -aux | grep xxx就是很快实现进程名和进程号的互查, 所以我们只说进程号pid就行. 如下示例中, 进程pid常驻. 1. 根据进程pid查端口: lsof -i ...