注解

一、内置注解

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笔记(二十) 注解相关推荐

  1. Java笔记二十二——设计模式

    使用设计模式的目的是为了可重用代码,提高代码的可扩展性和可维护性,降低代码的耦合度. 设计模式基于以下几个原则: 里氏替换原则 --如果调用一个父类的方法可以成功,那么替换成子类调用也应该完全可以运行 ...

  2. Java笔记二十四——Spring开发

    Spring是一个支持快速开发Java EE应用程序的框架.它提供了一系列底层容器和基础设施,并可以和大量常用的开源框架无缝集成,可以说是开发Java EE应用程序的必备. 在Spring Frame ...

  3. Mr.J-- jQuery学习笔记(二十八)--DOM操作方法(添加方法总结)

    Table of Contents appendTo appendTo(source, target) 源代码 append prependTo ​ ​ ​ ​ prependTo源码 prepend ...

  4. 从零开始学java(二十六)--多维数组,多维数组存储表格数据

    从零开始学java(二十六)--多维数组 多维数组 多维数组存储表格数据 多维数组 多维数组可以看成以数组为元素的数组.可以有二维.三维.甚至更多维数组,但是实际开发中用的非常少.最多到二维数组(学习 ...

  5. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  6. python rot13解密_codewars(python)练习笔记二十:ROT13解密

    codewars(python)练习笔记二十:ROT13解密 题目 How can you tell an extrovert from an introvert at NSA? Va gur ryr ...

  7. 嵌入式Linux驱动笔记(二十四)------framebuffer之使用spi-tft屏幕(上)

    你好!这里是风筝的博客, 欢迎和我一起交流. 最近入手了一块spi接口的tft彩屏,想着在我的h3板子上使用framebuffer驱动起来. 我们知道: Linux抽象出FrameBuffer这个设备 ...

  8. uniapp 学习笔记二十二 购物车页面结构搭建

    uniapp 学习笔记二十二 购物车页面结构搭建 cart.vue <template><view><view class="flex padding" ...

  9. Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用

    Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用 大概要写到结尾了,最后几篇就将手册的各常用命令再看一遍,组合一下,并列举出常见的一些有用的操作. DATA_COLOR_MAP数 ...

  10. 关于Java的二十篇技术热文

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 到周末了,小编给大家整理了二十篇评价不错的Java技术文章,方便学习回顾,值得收藏. 题外 ...

最新文章

  1. pytorch dataloader加速
  2. 【PAT乙级】1075 链表元素分类 (25 分)
  3. 项目管理中的需求变更和解决之道
  4. Spring(二)IOC底层实现原理
  5. chmod命令文件权限属性设置
  6. antd select option 设置字体颜色_匹配颜色是照片合成重要关键点
  7. python程序语法元素的描述_Python入门——Python程序语法元素
  8. indesign教程,如何改变内容的顺序?
  9. c++ 之 template函数模板
  10. pages与页面配置
  11. Java案例实现用户登录
  12. python常用模块之time
  13. 如何解决浏览器未安装FLASH控件的提示
  14. 中俄巡护员聚东北虎栖息地切磋巡护技艺
  15. FusionPortable:用于评估不同平台上的定位和建图精度的多传感器校园数据集
  16. TensorFlow 卷积神经网络之猫狗识别
  17. 通过爬虫获取第五人格游戏信息整理并分析(一)
  18. sublime text 软件上手指南
  19. 软件评测师-15.信息安全知识与安全测试
  20. R_Studio(学生成绩)对数据缺失值md.pattern()、异常值分析(箱线图)

热门文章

  1. Swift 导出本地化和导入本地化
  2. 161011、oracle批量插入数据
  3. 基于QQ服务器JavaMail邮箱SSL密码第三方发送邮件
  4. sql 插入多行数据的问题
  5. java 蓝桥杯算法训练 数组查找及替换
  6. 小森林顺序_这篇微推价值过亿!仁恒公园世纪二期选房顺序“摇号”,1:7!
  7. MapReduce之OutputFormat理解
  8. (13)System Verilog typedef创建新数据类型
  9. (25)FPGA面试题5分频器
  10. 我喜欢c语言用英文版,说说我喜欢英语的几个理由