文档章节

Java之注解初探

来来来过来挨到我坐
 来来来过来挨到我坐
发布于 2016/01/28 11:30
字数 862
阅读 10
收藏 0

1. 什么是注解(Annotation)

    JDK1.5开始,Java增加了对元数据(即类的组成单元数据)的支持,也就是注解(Annotation),他是代码里做的特殊标记,这些标记可以在编译、类加载、运行时在不改变原有逻辑的情况下被读取,并执行相应的处理,通过使用Annotation,程序员可以在原文件中嵌入一些补充的信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。Annotation类似于修饰符一样被使用,可以用于包、类、构造方法、方法、成员变量、参数、局部变量的声明。

注意:Annotation是个接口,程序可以通过反射来获取指定的程序元素的Anotation对象,然后通过Annotation对象来获得注解里面的元数据。Annotation有时是指java.lang.Annotation,有时指注解本身。

2. 系统定义的三个Annotation

在JDK1.5之后,在系统中提供了三个Annotation,分别是:@Override、@Deprecated、@SuppressWarnings

@Override

它的作用是对覆盖超类中方法的方法进行标记,如果被标记的方法并没有实际覆盖超类中的方法,则编译器会发出错误警告。

@Deprecated

表示这一个类或方法已过时,不再建议继续使用了。

@SuppressWarnings

表示关闭不当的编译器警告信息。

其参数有:

deprecation,使用了过时的类或方法时的警告

unchecked,执行了未检查的转换时的警告

fallthrough,当Switch程序块直接通往下一种情况而没有break时的警告

path,在类路径、源文件路径等中有不存在的路径时的警告

finally,任何finally子句不能正常完成时的警告

all,关于以上所有情况的警告

下面看一个小例子:

package com.main;

public class Person {

	@Override
	public String toString() {
		return "测试@Override";
	}

	@Deprecated
	public void print() {
		System.out.println("测试@Deprecated");
	}

}

3. 自定义Annotation

注解应用需要三个步骤:

  1. 编写注释

  2. 在类上应用注释

  3. 对应用了注释的类进行反射操作的类

    自定义Annotation的语法如下:

    访问控制权限 @interface Annotation名称{}

    例如:

    public @interface MyAnnotation{}

package com.main;

/**
 * 自定义注解
 * @author lenovo
 */
public @interface MyAnnotation {
	// 定义变量
	public String name();
	public int age();
	public String info() default "学生";// 为变量info设置默认值
}
package com.main;

@MyAnnotation(age = 18, name = "小明")
public class Person {

4. Retention和RetentionPolicy

Annotation要想决定其作用的范围,可以通过@Retention指定,而Retention指定的范围由RetentionPolicy决定,RetentionPolicy指定了三种范围:

范围 描述
public static final RetentionPolicy SOURCE 在java源程序中存在
public static final RetentionPolicy CLASS 在java生成的class中存在
public static final RetentionPolicy RUNTIME 在java运行的时候存在

示例:

package com.main;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * 自定义注解
 * @author lenovo
 */
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
	// 定义变量
	public String name();
	public int age();
	public String info() default "学生";// 为变量info设置默认值
}

5. 反射与Annotation

一个Annotation真正起作用,必须结合反射机制,在反射中提供了以下的操作方法:

java.lang.reflect.AccessibleObject

方法名称 描述
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 判断是否是指定的Annotation
public Annotation[] getAnnotations()
得到全部的Annotation

实例:

package com.main;

import java.lang.annotation.Annotation;

public class AnnotationTest {
	
	public static void main(String[] args) throws InstantiationException, IllegalAccessException {
		Class personClass = Person.class;
		Annotation annotation = personClass.getAnnotation(MyAnnotation.class);
		MyAnnotation myAnnotation = (MyAnnotation) annotation;
		String name = myAnnotation.name();
		int age = myAnnotation.age();

		Person p1 = (Person) personClass.newInstance();
		p1.setName(name);
		p1.setAge(age);
		
		System.out.println(p1);
	}

}


© 著作权归作者所有

共有 人打赏支持
来来来过来挨到我坐
粉丝 2
博文 13
码字总数 7493
作品 0
程序员
私信 提问
Spring的事务管理实现原理初探

这里主要是通过分析部分源码进行剖析Spring事务管理的实现原理。 再分析源码前,现从理论上大概分析哈: 纯JDBC操作数据库的基本步骤: 1. 获取连接 Connection conn = DriverManager.getCon...

rockypeng
2014/01/19
0
0
初探Kotlin+SpringBoot联合编程

Kotlin是一门最近比较流行的静态类型编程语言,而且和Groovy、Scala一样同属Java系。Kotlin具有的很多静态语言特性诸如:类型判断、多范式、扩展函数、模式匹配等等让我无法只作为一个吃瓜群...

CodeSheep
01/23
0
4
JVM初探- 使用堆外内存减少Full GC

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hanqing280441589/article/details/54406665 JVM初探-使用堆外内存减少Full GC 标签 : JVM 问题: 大部分主流...

菜鸟-翡青
2017/01/13
0
0
【目录导航】JAVA零基础进阶之路

【JAVA零基础入门系列】(已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day6 Java字符串 Day7 Java输入与输出...

MFrank
06/21
0
0
JAXB Annotation初步使用

JAXB(Java Architecture for XML Binding简称JAXB)允许Java开发人员将Java类映射为XML表示方式。JAXB提供两种主要特性:将一个Java对象序列化为XML,以及反向操作,将XML解析成Java对象。换...

秋风醉了
2014/07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

微服务分布式事务实现

https://www.processon.com/view/link/5b2144d7e4b001a14d3d2d30

WALK_MAN
今天
2
0
《大漠烟尘》读书笔记及读后感文章3700字

《大漠烟尘》读书笔记及读后感文章3700字: 在这个浮躁的社会里,你有多久没有好好读完一本书了? 我们总觉得自己和别人不一样,所以当看到别人身上的问题时,很少有“反求诸己”,反思自己。...

原创小博客
今天
3
0
大数据教程(9.5)用MR实现sql中的jion逻辑

上一篇博客讲解了使用jar -jar的方式来运行提交MR程序,以及通过修改YarnRunner的源码来实现MR的windows开发环境提交到集群的方式。本篇博主将分享sql中常见的join操作。 一、需求 订单数据表...

em_aaron
今天
3
0
十万个为什么之什么是resultful规范

起源 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点...

尾生
今天
3
0
Terraform配置文件(Terraform configuration)

Terraform配置文件 翻译自Terraform Configuration Terraform用文本文件来描述设备、设置变量。这些文件被称为Terraform配置文件,以.tf结尾。这一部分将讲述Terraform配置文件的加载与格式。...

buddie
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部