- 浏览: 1208493 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (361)
- java综合 (33)
- 项目管理 (10)
- 工作流 (6)
- spring (11)
- hibenate (17)
- struts (0)
- javascript,html,css,ajax,jquery (11)
- IDE (9)
- 生活 (0)
- 工作 (0)
- 杂记 (1)
- 数据库 (96)
- 服务器 (5)
- 可视编辑 (0)
- freemarker (6)
- 操作系统 windows (13)
- web页面 (6)
- jms (15)
- 调优 (4)
- 测试和bug管理 (2)
- 原理 (1)
- 項目-atf (17)
- 安全 (3)
- xml (4)
- 操作系统 liunx (21)
- 网络 (22)
- office (11)
- 设计 (2)
- 软件 (1)
- 数据库 mysql (6)
- 胖客户端-flex (1)
- 正则 (9)
- oracle- liunx (3)
- sql2000 (2)
- 模式 (1)
- 虚拟机 (2)
- jstl (2)
- 版本控制 打包工具 (0)
- AOP (1)
- demo (1)
- 小软件 (2)
- 感恩 (1)
- iphone 4 (1)
- 反欺诈业务经验整理 (0)
最新评论
-
sea0108:
mark
java内存模型 -
XingShiYiShi:
方便把:testPNR();具体实现发出来吗?谢谢
用正则表达式解析 航信的电子客票和pnr报文 -
wh359126613:
如果js和webservice不在同一个服务器上,有跨域问题如 ...
使用javascript调用webservice示例 -
雨飛雁舞:
...
oracle 动态性能(V$)视图 -
ouyang1224:
好东西
oracle 动态性能(V$)视图
在我的上一篇文章JDK1.5新特性介绍中,我们介绍了JDk1.5新增的6个基本特性,本文继续介绍JDK1.5另外一个秘密武器,新的注释语法(Annotations)。
其实说起注解语法,对于任何一个Java开发人员来说都已经耳熟能详了,我们每天都在使用着 @author, @param,等等编写注释,然后用javadoc生成文档。Java的这种方便的文档生成方法受到了开发者的普遍赞誉。而从JDK1.5开始,注释语法提供了更为强大的功能。
我们先谈谈注释语法本身,它有时候也称为meta-data :“描述数据的数据” 。一般来说它们可以被用来生成文档,检查代码间依赖关系,帮助编译器作语法检查。时下比较流行的工具有Xdoclet等。对于文档生成早已经有了javadoc工具的完美表现,而对于代码检查,如今java也提供了语言级的支持。
我们知道,javadoc是通过提取java源文件中的标签信息来生成文档。所以要学习新的注释语法,们首先要熟悉的就是新增的标签。新的注释语法支持两种标签,系统标准标签和用户自定义标签。标签的符号也原先一样,@符号加上标签名字。我们先从JDK1.5自带的标准标签说起。
首先介绍@override , 也不用多罗嗦,顾名思义了,就是用来说明方法覆载的。我们假设有一个子类必须要覆载父类的方法.
================================================================================
public class Parent{
public void foo(){
System.out.println("Original Implementation of foo");
}
}
public class Child extends Parent{
@Override
public void foo(){
System.out.println("Overide Implementation of foo");
}
}
================================================================================
目前为止我们看不出来这个@Override给我们带来了任何好处,所以我们先说说加个这个标签后,我们用javac编译的时候编译器执行了些什么呢?编译器会检查这个方法,然后从父类查找是否有这个方法,否则就编译出错。这个特性可以帮助我们避免一些低级错误。上面这个例子,子类想覆载foo()方法,不过你可能一时疏忽把它写成了fob(), 对于这样的”低级错误”,如果你没有在前期就发现的话,到系统集成测试的时候,可能会化上你几个小时甚至一两天去找出这样的bug。现在好了,编译器在编译的时候就会给出错误,
Child.java:3: method does not override a method from its superclass
@Override
^
1 error
怎么样,这个功能还不错吧。
看过了标准标签的使用方法,我们来看看用户自定义标签。首先介绍@interface, 它用于定义新的注释类型(annotation type)。新建一个注释类型看起来和定义一Interface 没有什么两样,
MyTag.java用于新建一个用户自定义标签,代码如下,
================================================================================
package tiger.annotation;
/**
* 用户自定义标签??MyTag
*/
public @interface MyTag { }
定义了一个tag之后,我们就可以在任何java文件中使用这个tag了,
import tiger.annotation.MyTag;
public class TagTest{
@MyTag
public void testTag(){
}
}
===============================================================================
注释类型还可以有成员变量,
==============================================================================
package tiger.annotation;
/**
* 用户自定义标签??带有成员变量的MyTag
*/
public @interface MyTag {
String name();
int age();
}
=============================================================================
然后我们可以这么使用这个标签,
@MyTag(name="MyTag",age=1)
public void testTag(){
}
使用标签最终是为了帮助开发人员提取注释信息,然后根据不同需求做进一步处理,下面我们来看看如何获取注释信息。
=============================================================================
import java.lang.annotation.Annotation;
import tiger.annotation.MyTag;
public class TagTest{
@MyTag(name="MyTag",age=1)
public void testTag(){
}
public static void main(String[] args){
TagTest tt = new TagTest();
try {
Annotation[] annotation =tt.getClass().getMethod("testTag").getAnnotations();
for (Annotation tag :annotation) {
System.out.println("Tag is:" + tag);
System.out.println("tag.name()" + ((MyTag)tag).name());
System.out.println("tag.age()" + ((MyTag)(tag)).age());
}
} catch(NoSuchMethodException e) {
e.printStackTrace();
}
}
}
===============================================================================
需要注意的一点是,在执行这段代码之前我们还有一点小工作要做,还需要给我们的自定义标签MyTag加上一个说明标签,@ Retention, 表明注释信息将可以在运行时刻通过反射机制得到。如果不加入这个标签,上面的代码将没有任何输出。修改以后的MyTag如下,
================================================================================
/**
* 用户自定义标签??带有成员变量的MyTag
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTag {
String name();
int age();
}
================================================================================
然后我们执行TagTest可以得到输出如下,
Tag is:@tiger.annotation.MyTag(name=MyTag, age=1)
tag.name()MyTag
tag.age()1
好了,Tiger新的注释语法基本用法就这么简单,基本用法虽然简单,但是获取注释信息之后如何处理确很值得推敲,我们可以用他们来做一些语法检查,文件相关性检查,进行各种统计等等。关于更多的Tiger新注释语法的信息,可以访问[link=http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html]。
以上代码在win2k + j2se5 GA下通过。
- test.zip (847 Bytes)
- 下载次数: 8
发表评论
-
介绍Java GC种类,并更换 调优GC
2011-03-04 03:42 2204转载自:http://blog.csdn.net/rola ... -
Daemonthread(守护线程)的含义
2011-03-03 20:39 1976http://fruitking.iteye.com/blog ... -
smc_5_1_0小例子
2010-06-25 15:33 0smc_5_1_0小例子 -
Hessian 例子
2010-06-25 15:27 0Hessian 例子 -
java小日历带农历(转)
2010-06-20 15:55 1536http://zengming526.iteye.com/bl ... -
Annotation exmaple
2009-12-14 09:44 1148如何使用注解的小例子 -
Java6 WebService @WebService
2009-12-11 10:39 43801. 新建一个JAVA project.2. 新建一个He ... -
JNI 数据类型转换
2009-11-18 12:01 21298Java代码 #include <jni ... -
JNI 返回结构体参数
2009-11-18 11:58 8927如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jn ... -
Map 四种同步方式的性能比较
2009-11-01 21:03 2031如果需要使 Map 线程安全,大致有这么四种方法: 1、使用 ... -
ConcurrentHashMap之实现细节
2009-11-01 21:00 2865ConcurrentHashMap是Java 5中支持高并发、 ... -
Java反射经典实例
2009-09-28 16:30 2055Java提供了一套机制来动态执行方法和构造方法,以及数组操作等 ... -
servlet 线程 安全 threadlocal (基础知识了)
2009-09-15 13:05 3274关键字: j2ee servlet 线程 ... -
java toString() ReflectionToStringBuilder
2009-06-18 11:31 2150@Override public String toStrin ... -
解决JAVA服务器性能问题
2009-04-13 01:51 2886解决JAVA服务器性能问题 ... -
java内存模型
2009-04-12 23:10 5687Weblogic系统管理总结(7.1/8.0)关于JVM内存管 ... -
Java线程总结
2009-04-12 20:32 1204在论坛上面常常看到初 ... -
删除字符串中的空格或将字符串的多个空格换位单个空格
2009-04-10 15:44 2536//将字符串的多个空格换位单个空格 public static ... -
Java 中文于unicode 互转
2009-04-06 03:08 3267关键字: java unicode convert 转换 ... -
Java EE 6体系结构的变革
2009-03-27 17:54 1523又看到 Reza 同学为 Java EE 6 奔走呼告了。如同 ...
相关推荐
也被称为foreach循环,这是JDK 1.5引入的简化迭代集合元素的语法糖。例如,`for (QueryCondition qc : lstQC) {...}` 这样的语句可以遍历`lstQC`中的每一个`QueryCondition`对象,无需手动操作迭代器,使代码更简洁...
也称为foreach循环,JDK 1.5引入了这个简洁的语法,方便遍历数组和集合。例如,`for (String str : strings) {...}` 将遍历字符串数组`strings`中的所有元素。 **类型安全的枚举(Type-Safe Enumerations)** 虽然...
**JDK1.6 API中文版帮助文档**是Java开发者不可或缺的参考资料,它包含了Java标准版(Java SE)1.6版本的所有公共类、接口、枚举和注解的详细说明,以及相关的示例代码。这份文档对于深入理解Java语言特性和API的...
**Java Development Kit (JDK) 5.0 特性详解** JDK 5.0,也称为 Java 5,是Java平台的一个重要版本,它引入了许多创新特性,极大地提升了开发效率和代码质量。这份PPT(幻灯片)旨在总结和解释其中的关键特性。 1....
在JDK 1.7中,编译器支持新的语法特性,如钻石操作符()和多线程注解(@SafeVarargs)。 2. **Java运行时环境 (JRE)**:包含了运行Java应用程序所需的库和虚拟机(Java Virtual Machine, JVM)。JVM是Java平台的...
Java API文档通常由JavaDoc工具生成,它使用特殊的注释语法来解析源代码,并将这些注释转化为结构化的文档。在JDK6.0中文文档中,我们可以找到以下几个关键部分: 1. **包(Packages)**:Java程序是由多个包组织...
- **高级特性**:包括反射(Reflection)、泛型(Generics)、注释(Annotations)、自动装箱和拆箱、枚举类(Enums)、可变参数(Varargs)、可变返回类型、增强循环(For-Each Loop)以及静态导入(Static Import...
- 依次点击`Window` > `Preferences` > `General` > `Editors` > `Text Editors` > `Annotations` > `Occurrences (Write Occurrences)`。 - 在此界面调整文本颜色,使其更符合个人喜好或习惯。 更改文本颜色后,...