文档章节

Java之注解初探

来来来过来挨到我坐
 来来来过来挨到我坐
发布于 2016/01/28 11:30
字数 862
阅读 10
收藏 0
点赞 1
评论 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联合编程

本文原载于个人微信公众号 CodeSheep,欢迎订阅 ↓↓↓ Kotlin是一门最近比较流行的静态类型编程语言,而且和Groovy、Scala一样同属Java系。Kotlin具有的很多静态语言特性诸如:类型判断、多...

CodeSheep
01/23
0
4
Kotlin和Java混合开发必读:基本的互操作

在使用Kotlin和Java混合开发的时候,涉及到一些基本的互操作 一、属性的读写 1.Kotlin自动识别Java的属性的Getter和Setter 2.Java操作kotlin属性可以通过Getter和Setter的方式 二、空安全类型...

王木东
04/05
0
0
Java注解教程:自定义注解示例,利用反射进行解析

Java注解能够提供代码的相关信息,同时对于所注解的代码结构又没有直接影响。在这篇教程中,我们将学习Java注解,如何编写自定义注解,注解的使用,以及如何使用反射解析注解。 注解是Java ...

哲别0
2017/10/23
0
0
【目录导航】JAVA零基础进阶之路

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

MFrank
06/21
0
0
Java SE Annotations API学习

注解,元数据的一种形式,提供关于程序不是程序本身的一部分数据。注解对代码的操作没有直接影响。 注解有多用途,如: a、用于编译信息。通过编译器检测错误or抑制警告 b、编译时和部署时的...

Rksi5
2014/04/08
0
0
springmvc请求接收参数的几种方法

通过@PathVariabl注解获取路径中传递参数 转载请注明出处:springmvc请求接收参数的几种方法 代码下载地址:http://www.zuidaima.com/share/1751862044773376.htm JAVA [java] view plainco...

boonya
2014/10/23
0
0
Java注解(Annotation)详解

Java注解(Annotation)详解 1.Annotation的概念 An annotation is a form of metadata, that can be added to Java source code. Classes, methods, variables, parameters and packages may......

幻海流心
05/23
0
0
JAXB Annotation初步使用

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

秋风醉了
2014/07/02
0
0
【Spring reference】Spring基于java的配置

1、简述 spring reference写到: Java-based configuration: Starting with Spring 3.0, many features provided by the Spring JavaConfig project became part of the core Spring Framewo......

666B
2014/07/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring配置xml启动报错 Connot find 'beans'

1.我们先看一下spring的原始配置 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSc......

江湖鱼大虾
9分钟前
0
0
与女儿谈商业模式 (4):戴尔的成功秘诀

分类:与女儿谈商业模式 | 标签: 戴尔 经济学 陈志武 2007-05-15 10:26阅读(7434)评论(36)   2007年5月《创富志》与“女儿谈商业模式”专栏 (之四)   戴尔的成功秘诀   陈志武   ...

祖冲之
18分钟前
0
0
www.w3.org被qiang导致logback报错:Connect reset

web项目部署到tomcat后,web项目中的logback不能运行,报错信息如下: Reported exception: ch.qos.logback.core.joran.spi.JoranException: I/O error occurred while parsing xml file......

浮躁的码农
32分钟前
0
0
JDeveloper中文乱码解决

全局设置字体; 全局设置环境编码; 项目设置编译器环境编码。

wffger
今天
2
0
MySQL主从介绍 , 准备工作,配置主,配置从, 测试主从同步

MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的 MySQL主从是基于binlog的,主上须开启bin...

TaoXu
今天
2
0
线性代数学习总结

亭子happy
今天
1
0
Java8:Lambda表达式增强版Comparator和排序

1、概述 在这篇教程里,我们将要去了解下即将到来的JDK 8(译注,现在JDK 8已经发布了)中的Lambda表达式——特别是怎样使用它来编写Comparator和对集合(Collection)进行排序。 这篇文章是...

孟飞阳
今天
0
0
从架构到组件,深挖istio如何连接、管理和保护微服务2.0?

近几年我一直从事于微服务系统的设计以及实现方面的工作,属于微服务架构一线实践者。之前做过一些单体系统的微服务改造,在微服务拆分、治理等方面都有一定的经验。 本人比较特殊一点的经历...

xiaomin0322
今天
1
0
基于vue的h5文件切片上传(获取文件md5,实现秒传、进度条实现)

template <button @click="file"></button><label ref="upload" style="position: relative;"> <input type="file" @change="selectFile" style="position: abs......

hkaikai
今天
2
0
Spring Boot 2.0 项目实现自同步AD域账号

在通过Spring Boot的自动化装配功能及JDK自带的LDAP模块,可通过如下几个简单步骤实现业务系统自动同步AD域账号功能。 1. Java自带ldap搜索域账号信息核心代码: try { LdapContext ctx...

B超
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部