栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

了解Java中的注释

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

了解Java中的注释

注释基本上是可以附加到字段,方法,类等的数据位。

在Java中声明注释的语法有点尴尬。它们看起来有点像接口(毕竟是用声明的

@interface
),但它们并不是真正的接口。我认为您可能已将该
doTestTarget()
方法放入您的
TestAnnotations
类中,因为您认为注释是接口并且需要实现它。这不是正确的-
您可以删除此方法,并且可以根据需要从代码中对其进行调用,这样做不会给您带来任何问题。

另外,您可能无意将注释放在字段上

str
。注释仅适用于紧随其后的内容。结果,您的代码无法编译,因为您已将注释应用于字段,但声明只能将注释应用于方法。更改
@Target(ElementType.METHOD)
@Target(ElementType.FIELD)
,然后应编译您的代码。

至于字符串发生了什么

Hello World!
,它将被写入.class文件,并且可用于读取Java类的任何工具。但是,它不一定在运行时在JVM中可用。发生这种情况是因为您没有
@Retention
@Test_Target
注释指定。为默认值
@Retention
RetentionPolicy.CLASS
,这意味着JVM大可不必去加载出来的类文件。(有关RetentionPolicy枚举,请参见Javadoc。)

我想您想看到一种在运行时从此批注中读取值的方法。如果是这样,我建议您添加

@Retention(RetentionPolicy.RUNTIME)
注释,以确保它在运行时可用。

要在运行时访问注释及其中包含的值,您需要使用反射。我已经

TestAnnotations
按照以下步骤重写了您的课程,以进行快速演示:

import java.lang.reflect.Field;public class TestAnnotations {   @Test_Target(doTestTarget="Hello World !")   private String str;   public static void main(String[] args) throws Exception {      // We need to use getDeclaredField here since the field is private.      Field field = TestAnnotations.class.getDeclaredField("str");      Test_Target ann = field.getAnnotation(Test_Target.class);      if (ann != null) {         System.out.println(ann.doTestTarget());      }   }}

当我运行此代码时,它将为我提供以下输出:

你好,世界 !


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454174.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号