Java开发网 |
注册 |
登录 |
帮助 |
搜索 |
排行榜 |
发帖统计
|
您没有登录 |
» Java开发网 » Java SE 综合讨论区
打印话题 寄给朋友 订阅主题 |
话题锁定 |
该话题已被锁定 - littledeer1974 , 2004-10-25 20:14 如果您尚不清楚该话题被锁定的原因,请参考论坛规则以及本版公告或者联系本版版主。 |
作者 | jdk5.0初探--metadata |
savage1984
发贴: 3 积分: 0 |
于 2004-10-23 20:04
jdk5.0出来有一阵子了,这一次的版本更新不同于以往,它带来了很多里程碑式的革新,SUN将其绰号取名为tiger(虎),这一次的变革将是 Java诞生以来从未有过的,它给我们带来了耳目一新的感觉。在这里,我简单介绍一下metadata,关于泛型可以看我的另一篇文章jdk5.0初探- -generics,其他的一些简单改动,可以参考jdk的文档: 元数据(metadata)可用于编译时的注释,借此被JVM识认,也可以被动态加载进来,在动态调用时读取其注释。事实上注释是一个接口,在编译时被编译成一个独立的文件,以下声明一个简单的注释(Student_Name.java): import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) //说明是用于运行时调用的 @Target(ElementType.METHOD) //说明该注释用于方法 public @interface Student_Name{ String name(); //声明一个简单的注释使用 } 以下是使用注释(Student.java): public class Student{ @Student_Name(name="王文银") public static void speak(){ System.out.println("Hello,World!"); } } 注意这里的语法: @Student_Name(name="王文银"),上面已经声明了这个注释是用于方法的,在方法speak()的声明前使用,当编译器在编译这个文件时,先寻找Student_Name这个注释,然后动态加载进来,同时给了name一个值“王文银”,以下是测试(RunStudent.java): import java.lang.annotation.*; import java.lang.reflect.*; public class RunStudent{ public static void main(String[] args) throws Exception{ for(Method m:Class.forName("Student").getMethods()){ //动态加载Student if(m.isAnnotationPresent(Student_Name.class)){ //表示使用了注释的speak()方法 m.invoke(null); //调用speak()方法。此时屏幕输出Hello,World! Student_Name a=m.getAnnotation(Student_Name.class); //获得方法的注释引用 System.out.println("Name:"+a.name()); //使用注释的方法,从而或得我们声明的 注释 } } } } 最后结果输出: Hello,World! Name:王文银 这样,我们在源文件里所用的注释就可以被编译器所调用,这些更加有助于程序员的动态控制,不需要另外的第三方的文件提供. 联想游戏(欢迎跟贴,哈) |
话题树型展开 |
人气 | 标题 | 作者 | 字数 | 发贴时间 |
5909 | jdk5.0初探--metadata | savage1984 | 1352 | 2004-10-23 20:04 |
已读帖子 新的帖子 被删除的帖子 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |