其实说起注解语法,对于任何一个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 test(){
}
public static void main(String[] args){
TagTest tt = new TagTest();
try {
Annotation[] annotation =tt.getClass().getMethod("test").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
结束
分享到:
相关推荐
三、变量注解(Annotations) 注解是一种元数据,提供了一种方式来将信息附加到代码上,而不改变其语义。在Java 5.0中,开发者可以使用@符号定义注解,这些注解可以被编译器或运行时系统用来进行检查、生成代码或...
JDK1.5提供了一些内置的注解,如`@Override`、`@Deprecated`等。 6. **类型安全的异构容器(Collections)** `Collection`框架得到升级,支持泛型后,可以创建类型安全的容器,避免了ClassCastException。 7. **...
4. **Annotations(注解)**:提供了一种元数据机制,可以在源代码中添加元数据,用于编译时或运行时的检查和处理。 5. **变量args**:在main方法中,可以直接使用`String... args`来接收可变数量的命令行参数。 6. ...
变量注解(annotations)是JDK1.5引入的新特性,它允许在代码中添加元数据,这些元数据可以用于编译器检查、代码生成、运行时处理等。例如,@Override注解确保方法是重写父类的方法,@Deprecated则标记不再推荐使用...
变量注解(Annotations)是JDK1.5引入的新特性,它提供了一种元数据的形式,可以用来标记代码中的元素,如类、方法或变量。注解可以用于编译器检查、运行时处理或者自动生成文档等目的,大大增强了代码的可扩展性。 ...
注解(Annotations)的引入为元编程提供了便利,它们可以用于标记代码以供编译器、JVM或工具使用,例如用于持久化、验证、AOP(面向切面编程)等领域。 IBM JDK 1.5还包含了JRockit Mission Control的一部分功能,...
8. **注解(Annotations)**:注解提供了一种元数据机制,允许在代码中添加元信息,用于编译器、JVM或其他工具使用。例如,`@Override`用于标记重写父类的方法,`@Deprecated`标记不建议使用的API等。 9. **内省...
4. 注解(Annotations):注解是一种元数据,可以提供有关代码的信息,但不直接影响代码的行为。注解在编译、部署和运行时都可用,常用于简化配置、编译时检查和运行时反射。 5. 静态导入(Static Import):静态...
4. Annotations(注解):注解提供了一种元数据,用于在编译时或运行时向编译器或JVM提供信息。例如,@Override注解确保重写父类的方法,@Deprecated用于标记不再推荐使用的代码。 5. Enum Types(枚举类型):JDK ...
6. **Annotations(注解)**:元数据的一种形式,用于向编译器、JVM或其他工具提供信息。 了解并掌握这些特性将有助于你编写更高效、更易于维护的Java代码。此外,JDK1.5还改进了性能和内存管理,提升了Java平台的...
变量注解(Annotations)也是JDK 1.5的一大亮点。注解为元数据提供了一种方式,使得开发者可以在源代码中添加信息,这些信息可以被编译器、构建工具或者运行时环境用来处理代码。例如,@Override注解用于表明方法是...
4. **变量注解(Annotations)**:变量注解提供了一种元数据机制,可以将信息附加到代码的元素上,这对于编译器、重构工具和运行时环境都很有用,如JSR-303用于进行Bean验证。 5. **增强的for循环(Enhanced For ...
6. **注解(Annotations)**:注解是一种元数据,提供了一种向编译器、工具或JVM提供信息的方式,而不影响程序执行。它们可以用于标记代码元素,如类、方法、变量等,以便进行验证、处理或生成代码。 7. **静态导入...
7. **注解(Annotations)** 注解为元数据提供了机制,可以用来标记代码,提供编译器或运行时系统使用的信息,如@Override、@Deprecated等。 8. **NIO.2(New IO)** 虽然NIO.2是在JDK 7中引入的,但JDK 1.5已经...
在JDK1.5中,注解可以用于编译时检查、运行时处理,甚至自动生成代码。它们极大地简化了诸如持久化、验证和资源管理等任务。 ### 5. 静态导入(Static Import) 静态导入允许开发者直接引用类的静态成员,而无需...
### JDK1.5中的注解(Annotations):深入解析与应用 #### 引言 自JDK1.5起,Java引入了一项重要的语言特性——注解(Annotations),这一特性极大地扩展了Java语言的元数据表达能力,为开发人员提供了在代码中...
8. **注解(Annotations)** 注解是元数据的一种形式,提供了在代码中添加元信息的能力,使得编译器或运行时环境可以根据这些信息进行处理。例如,@Override注解用来标识重写父类的方法,@Deprecated则标记已过时的...
JDK 1.5引入了标准注解如`@Override`(表示方法覆盖父类方法)、`@Deprecated`(标记过时的API)和`@ SuppressWarnings`(抑制编译器警告)。开发者还可以自定义注解,用于代码生成、静态分析等目的。 ### 枚举...
4. **变量注解(Variable Annotations)**: 允许在变量声明处使用注解,增加了代码的元数据信息,有助于编译器和工具进行检查和分析。 5. **增强的for循环(Enhanced for Loop)**: 也称为foreach循环,简化了遍历...
4. **变量注解(Annotations)**:注解是一种元数据,可以用于向编译器、JVM或其他工具提供信息,比如用于进行运行时检查、代码生成等。 5. **增强的for循环(Enhanced for Loop)**:也称为foreach循环,简化了...