【Java】Annotation_学习笔记
Annotation
1、APT:
访问和处理Annotation的工具统称,即Annotation Process Tool。
2、java.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的成员变量设置值。
6、Java7的“堆污染”警告与@SafeVarargs
7、Java8的函数式接口与@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的作用是确保其下的接口是函数式接口,避免低级错误。
8、JDK的元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_学习笔记的更多相关文章
- 20145213《Java程序设计学习笔记》第六周学习总结
20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- java JDK8 学习笔记——助教学习博客汇总
java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...
- java JDK8 学习笔记——第16章 整合数据库
第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Android(java)学习笔记267:Android线程池形态
1. 线程池简介 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...
- java多线程学习笔记——详细
一.线程类 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...
- Android(java)学习笔记207:开源项目使用之gif view
1. 由于android没有自带的gif动画,我在Android(java)学习笔记198:Android下的帧动画(Drawable Animation) 播客中提到可以使用AnimationVie ...
- Android(java)学习笔记71:生产者和消费者之等待唤醒机制
1. 首先我们根据梳理我们之前Android(java)学习笔记70中关于生产者和消费者程序思路: 2. 下面我们就要重点介绍这个等待唤醒机制: (1)第一步:还是先通过代码体现出等待唤醒机制 pac ...
随机推荐
- (转)如何学习Java技术?谈Java学习之路
51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...
- Android--我的Butterknife黄油刀怎么找不到控件了!!!
1,首先说一下Butterknife这个插件真的挺好用的,不过最近几天在写demo的时候发现总是出现绑定的view是空的,当时着急写代码,也没有深究一下,直接手工findViewbyid了,今天下午写 ...
- ANDROID L——Material Design详解(UI控件)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...
- c# 利用动态库DllImport("kernel32")读写ini文件(提供Dmo下载)
c# 利用动态库DllImport("kernel32")读写ini文件 自从读了设计模式,真的会改变一个程序员的习惯.我觉得嘛,经验也可以从一个人的习惯看得出来,看他的代码编写习 ...
- 在SublimeText上搭建ReactJS开发环境(转载)
本文转载自: http://blog.csdn.net/yczz/article/details/50469388
- 解决AndroidStudio中文乱码问题
File→Settings Appearance.将Theme(皮肤)选为Windows.
- C语言 03 项目团队文件合并
团体项目中 链接把项目中所有相关联的.O目标文件.C语言函数库合并在一起,生成可执行文件. 编写声明文件,用 .h文件封装起来,在其他代码中用include"xxx.h"引用声明 ...
- 使用Python从Markdown文档中自动生成标题导航
概述 知识与思路 代码实现 概述 Markdown 很适合于技术写作,因为技术写作并不需要花哨的排版和内容, 只要内容生动而严谨,文笔朴实而优美. 为了编写对读者更友好的文章,有必要生成文章的标题导航 ...
- Thinkphp更改子集
//规格编辑 public function standard(){ //$id = $_GET['id'];//dump($id);die; $id = 388; //根据$id 到re_goods ...
- angularJS之$watch的一个小介绍
现在最近公司项目使用angularJS进行开发:以前也接触过但是不多,趁着现在熟悉回来. 如题,angular中$watch也是我们在开发的时候需要的各种监听: $watch接收3个参数,第一个是对象 ...