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 {}@Teststatic 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()
返回一个二维数组,每个参数对应一个一维数组。
转载于:https://www.cnblogs.com/Shadowplay/p/9988550.html
Java笔记(二十) 注解相关推荐
- Java笔记二十二——设计模式
使用设计模式的目的是为了可重用代码,提高代码的可扩展性和可维护性,降低代码的耦合度. 设计模式基于以下几个原则: 里氏替换原则 --如果调用一个父类的方法可以成功,那么替换成子类调用也应该完全可以运行 ...
- Java笔记二十四——Spring开发
Spring是一个支持快速开发Java EE应用程序的框架.它提供了一系列底层容器和基础设施,并可以和大量常用的开源框架无缝集成,可以说是开发Java EE应用程序的必备. 在Spring Frame ...
- Mr.J-- jQuery学习笔记(二十八)--DOM操作方法(添加方法总结)
Table of Contents appendTo appendTo(source, target) 源代码 append prependTo prependTo源码 prepend ...
- 从零开始学java(二十六)--多维数组,多维数组存储表格数据
从零开始学java(二十六)--多维数组 多维数组 多维数组存储表格数据 多维数组 多维数组可以看成以数组为元素的数组.可以有二维.三维.甚至更多维数组,但是实际开发中用的非常少.最多到二维数组(学习 ...
- 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言
嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...
- python rot13解密_codewars(python)练习笔记二十:ROT13解密
codewars(python)练习笔记二十:ROT13解密 题目 How can you tell an extrovert from an introvert at NSA? Va gur ryr ...
- 嵌入式Linux驱动笔记(二十四)------framebuffer之使用spi-tft屏幕(上)
你好!这里是风筝的博客, 欢迎和我一起交流. 最近入手了一块spi接口的tft彩屏,想着在我的h3板子上使用framebuffer驱动起来. 我们知道: Linux抽象出FrameBuffer这个设备 ...
- uniapp 学习笔记二十二 购物车页面结构搭建
uniapp 学习笔记二十二 购物车页面结构搭建 cart.vue <template><view><view class="flex padding" ...
- Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用
Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用 大概要写到结尾了,最后几篇就将手册的各常用命令再看一遍,组合一下,并列举出常见的一些有用的操作. DATA_COLOR_MAP数 ...
- 关于Java的二十篇技术热文
点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 到周末了,小编给大家整理了二十篇评价不错的Java技术文章,方便学习回顾,值得收藏. 题外 ...
最新文章
- pytorch dataloader加速
- 【PAT乙级】1075 链表元素分类 (25 分)
- 项目管理中的需求变更和解决之道
- Spring(二)IOC底层实现原理
- chmod命令文件权限属性设置
- antd select option 设置字体颜色_匹配颜色是照片合成重要关键点
- python程序语法元素的描述_Python入门——Python程序语法元素
- indesign教程,如何改变内容的顺序?
- c++ 之 template函数模板
- pages与页面配置
- Java案例实现用户登录
- python常用模块之time
- 如何解决浏览器未安装FLASH控件的提示
- 中俄巡护员聚东北虎栖息地切磋巡护技艺
- FusionPortable:用于评估不同平台上的定位和建图精度的多传感器校园数据集
- TensorFlow 卷积神经网络之猫狗识别
- 通过爬虫获取第五人格游戏信息整理并分析(一)
- sublime text 软件上手指南
- 软件评测师-15.信息安全知识与安全测试
- R_Studio(学生成绩)对数据缺失值md.pattern()、异常值分析(箱线图)