Annotation

1APT

访问和处理Annotation的工具统称,即Annotation Process Tool。

2java.lang下提供的五种基本Annotation

@Override、@Deprecated、@Suppress Warning、@Safe Varargs、@FunctionalInterface

3、限定重写父类方法:@Override

举例:

public class Fruit

{

public void info()

{

System.out.println(“水果的info方法”);

}

}

class Apple extends Fruit

{

@Override

public void info()

{

System.out.println(“苹果的info方法”);

}

}

说明:@Override的作用主要是告诉编译器,检查其下的方法是否有正确重写父类的方法,以避免不必要的低级错误。

4、标记已过时:@Deprecated

class Apple

{

@Deprecated

public void info()

{

System.out.println(“Apple的info方法”);

}

}

public class DeprecatedTest

{

public static vodi main(String[] args)

{

new.Apple.info();

}

}

说明:@Deprecated用于表示某个程序元素(类、方法等)已过时,当其他程序使用这个标记的元素时,编译器将会给出警告。

5、抑制编译器警告:@SuppressWarnings

举例:

//关闭整个类的编译器警告

@SuppressWarning(value=“unchecked”)

public class SuppressWarningsTest

{

public static void main(String[] args)

{

List<String>myList=new ArrayList();

}

}

说明:上述例子中整个类都不会看到没有使用泛型的警告,使用@SuppressWarning时,需要在()里使用name=value的形式为该Annotation的成员变量设置值。

6Java7的“堆污染”警告与@SafeVarargs

7Java8的函数式接口与@FunctionalInterface

举例:

@FunctionalInterface

public Interface FunInterface

{

static void foo()

{

System.out.println(“foo类方法”);

}

default void bar()

{

System.out.println(“bar默认方法”);

}

void test();//只定义一个抽象方法

}

说明:

a、函数式接口:接口中只有一个抽象方法(可以包含多个static方法或者default方法)。

b、@FunctionalInterface的作用是确保其下的接口是函数式接口,避免低级错误。

8JDK的元Annotation

说明:java.lang.annotation包下提供了6个Meta Annotation(元Annotation),其中5个元Annotation用于修饰其他的Annotation定义。

9、使用@Retention

格式1:

//保留到运行时

@Retention(value=RetentionPolicy.RUNTIME)

public @Interface Testable()

格式2:

//直接被编译器丢弃

@Retention(RetentionPolicy.SOURCE)//只为value赋值时,可以省略value=

public @interface Testable()

说明:

A、@Retention用于修饰Annotation,决定其保留时间。

B、@Retention类型里有一个value变量,须为其指定值。

C、value变量的值只能是如下三个:

a、RetentionPolicy.CLASS:Annotation被编译器记录在class文件中,运行时,JVM不能获得Annotation的信息,这是默认值。

b、RetentionPolicy.RUNTIME:Annotation被编译器记录在class文件中,运行时,JVM可以获得Annotation的信息,通过反射获得。

c、RetentionPolicy.SOURCE:Annotation只保留在源代码中,编译器直接丢弃这种Annotation。

10、使用@Target

格式:

//指定如下代码片段只能修饰成员变量

@Target(ElementType.FIELD)//与@Retention一致,value=可以省略

public @Interface ActionListenerFor()

说明:

A、@Target用于修饰Annotation可以修饰哪些程序单元。

B、@Target类型的value成员变量只能是如下几个:

a、ElementType.ANNOTATION_TYPE:指定该Annotation只能修饰Annotation。

b、ElementType.CONSTRUCTOR:指定该Annotation只能修饰构造器。

c、ElementType.FIELD:指定该策略的Annotation只能修饰成员变量。

e、ElementType.LOCAL_VARIABLE:指定该策略的Annotation只能修饰局部变量。

f、ElementType.METHOD:指定该策略的Annotation只能修饰方法定义。

g、ElementType.PACKAGE:指定该策略的Annotation只能修饰包定义。

h、ElementType.PARAMETER:指定该策略的Annotation只能修饰参数。

j、ElementType.TYPE:指定该策略的Annotation只能修饰类、接口(包括注解类)和枚举类。

11、使用@Documented

举例:

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

@Documented

public @interface Testable

{

}

public class MyTest

{

@Testable

public void info()

{

System.out.println(“info method”)

}

}

使用javadoc工具生成API文档如下:

方法详细资料

info

@Testable

public void info()

说明:@Document的作用就是生成API文档是多出如上红色标记的语句。

12、使用@Inherited

说明:使用@Inherited修饰的将具有继承性。

13、自定义Annotation

格式:

public @Interface Test

{

//成员变量以无形参的方法形式来声明

String name();

}

【Java】Annotation_学习笔记的更多相关文章

  1. 20145213《Java程序设计学习笔记》第六周学习总结

    20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...

  2. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. java JDK8 学习笔记——助教学习博客汇总

    java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...

  4. java JDK8 学习笔记——第16章 整合数据库

    第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...

  5. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Android(java)学习笔记267:Android线程池形态

    1. 线程池简介  多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.     假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...

  8. java多线程学习笔记——详细

    一.线程类  1.新建状态(New):新创建了一个线程对象.        2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...

  9. Android(java)学习笔记207:开源项目使用之gif view

    1. 由于android没有自带的gif动画,我在Android(java)学习笔记198:Android下的帧动画(Drawable Animation) 播客中提到可以使用AnimationVie ...

  10. Android(java)学习笔记71:生产者和消费者之等待唤醒机制

    1. 首先我们根据梳理我们之前Android(java)学习笔记70中关于生产者和消费者程序思路: 2. 下面我们就要重点介绍这个等待唤醒机制: (1)第一步:还是先通过代码体现出等待唤醒机制 pac ...

随机推荐

  1. nodejs的安装与配置

    最近做了一个项目,想基于NodeJS来完成,但是由于对NodeJS不熟悉,所以在网上查资料进行安装,以下做对关键信息做一下笔记本,具体如何安装,就不做说明了,如果需要查看的,请自行Goolge或bai ...

  2. 基于ssh框架的在线考试系统开发的质量属性

    我做的系统是基于ssh框架的在线考试系统.在线考试系统有以下几点特性:(1)系统响应时间需要非常快,可以迅速的出题,答题.(2)系统的负载量也需要非常大,可以支持多人在线考试(3)还有系统的安全性也需 ...

  3. CentOS下搭建LAMP环境详解

    前言:在这里将介绍如何在CentOS下搭建LAMP环境(全部使用源码编译安装),用于web服务器开发. •LAMP: Linux + Apache + PHP + Mysql. •系统: CentOS ...

  4. UWP toast

    Windows10的自适应和交互式toast通知是一个新特性.它可以让你: 创建灵活的toast通知,包括内嵌图片及更多的内容,不在局限于之前Windows 8.1和Windows Phone 8.1 ...

  5. 【转】安装mysql 出现:Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

    来源:http://blog.csdn.net/dapeng0112/article/details/37053407 本来初始化配置是这样的: scripts/mysql_install_db -- ...

  6. 解决AndroidStudio中文乱码问题

    File→Settings Appearance.将Theme(皮肤)选为Windows.

  7. 如何运用TurboDemo创建视频示例

    TurboDemo不仅可以速抓取屏幕截图,而且可高效制作出时尚美观的介绍.演示动画.软件模拟以及使用说明.下面的例子将会告诉使用者们如何分步创建一个视频示例,帮助使用者们快速的上手: 1.开启Turb ...

  8. netty 解决TCP粘包与拆包问题(二)

    TCP以流的方式进行数据传输,上层应用协议为了对消息的区分,采用了以下几种方法. 1.消息固定长度 2.第一篇讲的回车换行符形式 3.以特殊字符作为消息结束符的形式 4.通过消息头中定义长度字段来标识 ...

  9. gitlab多人协作开发

    gitlab多人协同工作 本文为亨利向<Git权威指南>的作者蒋鑫老师的答疑邮件写成. 这里特别感谢蒋鑫老师对我询问gitlab的协同工作流程问题的详细解答. 蒋鑫老师的细致专业的解答让我 ...

  10. 浅析Java.lang.Runtime类

    一.概述      Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接.      一般不能实例化一个Runtime对象, ...