- 浏览: 778541 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (256)
- ssh (18)
- webservice (8)
- java基础 (38)
- j2EE方方面面 (17)
- 随意涂鸭!呵呵 (2)
- 数据库 (22)
- work (10)
- XML与XML解析 (9)
- 测试 (2)
- sso (1)
- ldap (6)
- java 模板技术 (4)
- 版本管理 (1)
- 每日小点滴 (26)
- javascript (26)
- Jakarta Commons (2)
- css (6)
- 设计 (3)
- Eclipse插件开发 (3)
- BAP (3)
- web控件 (2)
- java加密解密 (4)
- 调优 (6)
- 界面技术 (3)
- java多线程 (6)
- 互联网 (2)
- 日志管理 (4)
- java调度 (3)
- rest (0)
- Python (2)
- mobile (2)
- 2016的故事 (4)
- Docker (1)
- NOSQL_Hadoop (0)
最新评论
-
promiseloney:
这个女程序员厉害了。。。
JVM调优:GC 参数 -
zxjlwt:
可以通过WebService上传一个文件吗?素人派http:/ ...
webservice传送XML大小估算 -
liaoshaoyang:
写的不错嘛 可以做参考
权限管理设计一 -
aaaaaaaaabaas:
谢谢,对我有帮助
Apache Commons Configuration使用入门 -
Jack_Wilshere:
com.smartdot.pdm.business.corp. ...
java导出txt
转载连接:http://www.iteye.com/topic/165316
背景知识:
从JDK5开始提供名为Annotation(注释)的功能,它被定义为JSR-175规范。注释是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")。注释可以附加在package, class, method, field等上面,相当于给它们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。如果没有外部解析工具等对其加以解析和处理的情况,本身不会对Java的源代码或class文件等产生任何影响,也不会对它们的执行产生任何影响。
元数据的作用,大致可分为三种:编写文档,通过代码里标识的元数据生成文档;代码分析,通过代码里标识的元数据对代码进行分析;编译检查,通过代码里标识的元数据让编译器能实现基本的编译检查。
JDK5内置的基本注释
JDK5内置了一些常用的注释,可以在编译时帮我们捕获部分编译错误,及提示信息,下面介绍下这些注释的用法:
1、@Override定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明。如果方法利用此注释类型进行注解但没有重写超类方法,则编译器会生成一条错误消息。例如我们为某类重写toString()方法却写成了tostring(),并且我们为该方法添加了@Override注释;代码如下:
public class OverrideDemo { @Override public String tostring() { return super.toString(); } }
在编译时,会提示以下错误信息:
@Override
^1 错误
2、@Deprecated定义在java.lang.Deprecated中,此注释可用于修辞方法、属性、类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。在使用不被赞成的程序元素或在不被赞成的代码中执行重写时,编译器会发出警告。使用@Deprecated的示例代码如下:
public class DeprecatedDemo { public static void main(String[] args) { DeprecatedClass.DeprecatedMethod(); } } class DeprecatedClass { @Deprecated public static void DeprecatedMethod() { // TODO } }
在编译时,会得到以下提示信息:
注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。
如果在编译时添加-Xlint:deprecation参数,我们能更清楚的看到该警告的详细信息,如下:
SomeClass.DeprecatedMethod();
^1 警告
要注意@Deprecated与@deprecated的区别,@deprecated是为了生成文档的需要,例如:
class DeprecatedClass { /** * @deprecated 此方法已过时,不建议使用 */ @Deprecated public static void DeprecatedMethod() { // TODO } }
3、@SuppressWarnings定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息。与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数值都是已经定义好了的,我们选择性的使用就好了,参数如下:
通过上面的表格,你应该了解到每个参数的用意了,下面我就以一个常用的参数unchecked为例,为你展示如何使用@SuppressWarnings注释,示例代码如下:
import java.util.List; import java.util.ArrayList; public class SuppressWarningsDemo { public static List cache = new ArrayList(); //@SuppressWarnings(value = "unchecked") public void add(String data) { cache.add(data); } }
当我们不使用@SuppressWarnings注释时,编译器就会有如下提示:
注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。
下面我们去掉@SuppressWarnings(value="unchecked")这一行的注释符“//”,它会屏蔽编译时的警告信息,这也就是它所要达到的目的。
另外,由于@SuppressWarnings注释只有一个参数,并且参数名为value,所以我们可以将上面一句注释简写为
@SuppressWarnings("unchecked");
同时参数value可以取多个值如:
@SuppressWarnings(value={"unchecked", "deprecation"})
或@SuppressWarnings({"unchecked", "deprecation"})。
自定义Annotation注释
1、注释annotation与接口的异同:
因为annotation类型是一个非凡的接口,所以它与接口之间存在着某些差异:
A. Annotation类型使用关键字@interface而不是interface,这个关键字声明隐含了一个信息,它是继承了java.lang.annotation.Annotation接口,并非声明了一个interface。
B. Annotation类型的方法定义是独特的、受限制的,方法必须声明为无参数、无异常抛出的。这些方法定义了annotation的成员:方法名成为了成员名,而方法返回值成为了成员的类型。而方法返回值类型必须为primitive类型、Class类型、枚举类型、annotation类型或者由前面类型之一作为元素的一维数组。方法的后面可以使用default和一个默认数值来声明成员的默认值,null不能作为成员默认值,这与我们在非annotation类型中定义方法有很大不同。
C. Annotation类型又与接口有着近似之处,它们可以定义常量、静态成员类型(比如枚举类型定义)。Annotation类型也可以如接口一般被实现或者继承。
2、自定义注释的实例:
下面,我们将看到如何定义annotation类型的例子。它展示了annotation类型声明以及
@interface与interface之间的不同: import java.lang.annotation.*; /** * 使用annotation来描述那些被标注的成员是不稳定的,需要更改 */ public @interface Unstable { }
下面的另一个例子只定义了一个成员。并通过将这个成员命名为value,使我们可以方便的使用这种annotation的快捷声明方式:
/** * 使用Author这个annotation定义在程序中指出代码的作者 */ public @interface Author { /** 返回作者名 */ String value(); }
以下的例子更加复杂。Reviews annotation类型只有一个成员,但是这个成员的类型是复杂的:由Review annotation组成的数组。Review annotation类型有3个成员:枚举类型成员grade、表示Review名称的字符串类型成员Reviewer、具有默认值的字符串类型成员 Comment。
/** * Reviews annotation类型只有一个成员, * 但是这个成员的类型是复杂的:由Review annotation组成的数组 */ @Retention(RetentionPolicy.RUNTIME) public @interface Reviews { Review[] value(); } /** * Review annotation类型有3个成员: * 枚举类型成员grade、 * 表示Review名称的字符串类型成员Reviewer、 * 具有默认值的字符串类型成员Comment。 */ public @interface Review { // 内嵌的枚举类型 public static enum Grade { EXCELLENT, SATISFACTORY, UNSATISFACTORY }; // 下面的方法定义了annotation的成员 Grade grade(); String reviewer(); String comment() default ""; }
最后,我们来定义一个annotation方法用于罗列出类运行中所有的unchecked异常。这个 annotation类型将一个数组作为了唯一的成员。数组中的每个元素都是异常类。为了加强对未检查的异常(此类异常都是在运行时抛出)进行报告,我们可以在代码中对异常的类型进行限制:
public @interface UncheckedExceptions { Class[] value(); }
Meta-Annotation类型:
Annotation 类型可以被它们自己所标注。Java5.0定义了4个标准的meta-annotation类型,分别是:Target、Retention、Documented、Inherited,它们被用来提供对其它annotation类型作说明。 这些类型和它们所支持的类在java.lang.annotation包中可以找到。
@Target的用法:指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在 Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。 例如,以下这个注释只能用来声明方法:
@Target(ElementType.METHOD) public @interface MyAnnotation { ... }
java.lang.annotation.ElementType是一个枚举类型,它具有以下定义:
@Retention的用法:指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention 注释,则保留策略默认为 RetentionPolicy.CLASS,例如:
@ Retention(RetentionPolicy.CLASS) public @interface MyAnnotation { ... }
java.lang.annotation.RetentionPolicy是一个枚举类型,它具有以下定义:
@Documented的用法:指示某一类型的注释将通过 javadoc 和类似的默认工具进行文档化。应使用此类型来注释这些类型的声明:其注释会影响由其客户端注释的元素的使用。如果类型声明是用 Documented 来注释的,则其注释将成为注释元素的公共 API 的一部分。Documented是一个没有成员的注释。
@Inherited的用法:指示注释类型自动被子类继承。 Inherited也是一个没有成员的注释。
注意,如果使用@Inherited注释类以外的任何事物都是无效的。还要注意,此元注释仅对从超类继承注释有效;对已实现接口的注释无效。
发表评论
-
Redis command
2019-07-05 09:43 0redis-cli -v : 查看redis version ... -
Spring Boot Actuator
2018-07-24 13:46 695Spring Boot : 2.0.3 POM文件中加入 ... -
关于CXF的FrontEnd和数据绑定方案
2013-06-17 11:45 1122转载自:http://blog.csdn.net/blui ... -
webservice传送XML大小估算
2013-06-06 12:22 77402013-06-06 某天,要做几个WebService, ... -
java-HashSet源码学习
2013-06-05 15:22 808HashSet: 不支持多线程 ... -
Java @override报错的解决方法 .
2013-04-28 09:59 814有时候Java的Eclipse工程换一台电脑后编译总是@ov ... -
myeclipse中的classpath .
2013-04-03 10:32 14937myeclipse中的classpath是 ... -
int i 引出JVM故事
2013-02-27 18:47 749public class TestDuanqf { ... -
java调度:(五) 用户自定义调度策略+spring+quartz
2013-02-22 18:21 0一般应该中,quartz的调度策略都是在xml配置文件中设 ... -
java内存系列:测试JDK最大内存
2013-02-22 18:09 1894JDK各个版本在不同操作系统中支持的最大内存是不一样的,但是可 ... -
日志管理(一):slf4j原理简单介绍
2013-01-24 18:44 3048转载自:http://blog.sina.com.cn/s ... -
concurrent: wai notify notifyAll
2013-01-09 10:16 830转载自:http://sishuok.com ... -
JDK5--Annotation学习:基础(二)
2012-12-04 19:56 1029转载自:http://www.iteye.com/topic/ ... -
concurrent: ThreadPoolExecutor 用法
2012-09-03 15:19 2994thread pool一般被用来 ... -
concurrent: Callable用法
2012-09-03 14:23 1281转载自: http://auguslee.iteye.com/ ... -
java调度:(六)quarts_cron表达式
2012-07-31 13:59 1250七个域要记住,从左到 ... -
java压缩----使用sun JDK压缩--中文的文件名会是乱码
2012-07-13 14:27 1281经测试,文件名为中文 ... -
java 附件
2012-07-12 15:47 0转载: java下载附件方法: Java ... -
java内存溢出
2012-05-15 10:57 5910一、问题 ... -
java --HashTable学习
2011-11-21 16:10 1252今天在家无事,闲来看看JDK源码,就从HashTable看起 ...
相关推荐
在Java编程语言中,Annotation(注解)是一种元数据,它提供了在编译时和运行时为代码添加信息的方式。注解是自Java 5版本引入的特性,它增强了代码的可读性和可维护性,同时也简化了某些编程任务。在本篇中,我们将...
本压缩包"jdk-8u20-docs-all.zip"提供了Java SDK 8更新20版本的完整文档,对于开发者来说,是一份极其重要的参考资料。 在Java编程中,了解各个类的名称和用法是至关重要的。这个文档集合详细地介绍了Java平台的...
Java 5引入的注解(Annotation)是一种元数据,它提供了在代码中嵌入信息的方式,这些信息可以被编译器、JVM或其他工具在编译时或运行时使用。注解可以用来简化代码,提高可维护性,并帮助工具进行静态分析。 1. ...
Java Annotation 是 JDK5.0 引入的一种元数据机制,它允许程序员在代码中嵌入额外的信息,这些信息可以被编译器、构建工具或运行时系统用来执行特定的任务。Annotation 提供了一种安全、灵活的方式来描述代码的属性...
Java Annotation 是一种元数据,它为程序元素(如包、类、方法等)提供附加信息。这些信息不直接影响代码的执行,但可以被编译器、工具或运行时系统用来进行各种处理,如代码分析、验证、代码生成等。Annotation 以 ...
运行应用程序的构建: mvn clean install编译不会通过以下问题: [INFO] ------------------------------------------------------------------------[INFO] Reactor Summary for annotation-processor 1.0-...
Java开发工具包(Java Development Kit,简称JDK)是Java编程语言的标准开发环境,它包含了编译、运行Java程序所需的各种工具和库。这个离线JDK9中文版的API文档,即`API_jdk-9.CHM`,是开发者在没有网络连接时查阅...
Java Annotation(注解)是自JDK 5.0开始引入的一种元数据,它提供了一种安全、非侵入式的方式来向编译器、虚拟机或者其他的工具提供关于代码的信息。这种信息可以用来进行编译时检查、运行时处理、代码生成等。注解...
JDK9及以上版本没有javax.annotation-api-***.jar包 ,无法使用注解:@Resource JDK新特性,高版本JDK没有自带的javax(java扩展包)了。或者是使用的JDK不完整。 下载javax.annotation.jar包,导入到lib文件夹下,...
这份《良葛格Java JDK 5.0学习笔记》全面覆盖了Java编程的基础到进阶知识,特别关注了JDK 5.0的新特性,对于想要掌握Java编程的人来说是一份非常实用的学习资料。通过深入学习和实践,读者将能够熟练掌握Java编程,...
5. **ZGC(Z Garbage Collector)**:一个新的低延迟垃圾收集器,适用于大内存应用。 使用这份文档,开发者可以学习如何利用Java 11的新功能,提高代码质量和效率。查阅API文档是每个Java开发者日常工作中不可或缺...
The Java Development Kit (JDK) APIs are specific to the JDK and will not necessarily be available in all implementations of the Java SE Platform. These APIs are in modules whose names start with jdk....
Java是一种强大的、面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年推出。它的设计目标是提供一种高效、安全、跨平台的编程环境。Java的核心概念包括类、对象、封装、继承、多态等,这些...
通过学习枚举类、注解和类型注解,开发者能够编写出更加优雅、可维护的Java代码。枚举类提供了更安全的常量管理,注解则增强了代码的元数据功能,而类型注解则进一步提升了代码的静态分析和错误预防能力。对于Java...
一个Maven插件,用于处理jdk8及更高版本的编译时注释。 该插件有助于从Maven使用JDK8提供的集成在Java编译器中的新注释处理 该插件是Maven apt插件的“ alter ego” 文献资料 相关插件 插入 信息 Jboss的eclipse...
JDK 1.8源代码涵盖了Java语言的基础组件,包括语法解析、类型检查、字节码生成等。通过对`javac`编译器的源代码学习,我们可以了解到如何将Java源代码转换为可执行的字节码,这对于理解Java的编译过程至关重要。 2...
该插件创建一个名为errorprone的配置,并为每个源集配置<sourceSet>AnnotationProcessor配置以扩展它。 这允许从单个位置配置容易出错的依赖项。 需要在此配置中添加容易出错的依赖关系: repositories { maven...
压缩包子文件的文件名称列表仅包含了一个条目:“jdk-1_5_0_11-windows-i586-p.exe”,这表明这个压缩包可能只是一个单一文件的分布,即JDK的安装程序。通常,JDK的压缩包会包含多个文件和目录,如bin目录(包含各种...
collection Java 源码 概述 主要分析 JDK8 源码。 基础 java-io java-nio java-reflect java-collection java-annotation java-net java-jdbc java-concurrent java-jvm java8
Java注解是Java编程语言中的一个重要特性,它允许程序员在代码中嵌入元...对于深入学习,建议阅读Java官方文档以及相关的开源项目,如本教程提供的`java-custom-annotation-master`,以获得更丰富的实践经验和理解。