`

对注解的一点理解

 
阅读更多

    注解(Annotation) 为我们在代码中天界信息提供了一种形式化的方法,是我们可以在稍后

某个时刻方便地使用这些数据(通过 解析注解 来使用这些数据)。

 

    注解的语法比较简单,除了@符号的使用以外,它基本上与java的固有语法一致,java内置了三种

注解,定义在java.lang包中。

      @Override  表示当前方法是覆盖父类的方法。

      @Deprecated  表示当前元素是不赞成使用的。

      @SuppressWarnings 表示关闭一些不当的编译器警告信息。

 

  下面是一个定义注解的实例

 

package Test_annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;

/*
 * 元注解@Target,@Retention,@Documented,@Inherited
 * 
 *     @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
 *         ElemenetType.CONSTRUCTOR 构造器声明
 *         ElemenetType.FIELD 域声明(包括 enum 实例)
 *         ElemenetType.LOCAL_VARIABLE 局部变量声明
 *         ElemenetType.METHOD 方法声明
 *         ElemenetType.PACKAGE 包声明
 *         ElemenetType.PARAMETER 参数声明
 *         ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
 *         
 *     @Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
 *         RetentionPolicy.SOURCE 注解将被编译器丢弃
 *         RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
 *         RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
 *         
 *     @Documented 将此注解包含在 javadoc 中
 *     
 *     @Inherited 允许子类继承父类中的注解
 *   
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
/*
 * 定义注解 Test
 * 注解中含有两个元素 id 和 description
 * description 元素 有默认值 "no description"
 */
public @interface Test {
	public int id();
	public String description() default "no description";
}

 

下面是一个使用注解 和 解析注解的实例

package Test_annotation;

import java.lang.reflect.Method;

public class Test_1 {
	/*
	 * 被注解的三个方法
	 */
	@Test(id = 1, description = "hello method_1")
	public void method_1() {
	}

	@Test(id = 2)
	public void method_2() {
	}

	@Test(id = 3, description = "last method")
	public void method_3() {
	}

	/*
	 * 解析注解,将Test_1类 所有被注解方法 的信息打印出来
	 */
	public static void main(String[] args) {
		Method[] methods = Test_1.class.getDeclaredMethods();
		for (Method method : methods) {
			/*
			 * 判断方法中是否有指定注解类型的注解
			 */
			boolean hasAnnotation = method.isAnnotationPresent(Test.class);
			if (hasAnnotation) {
				/*
				 * 根据注解类型返回方法的指定类型注解
				 */
				Test annotation = method.getAnnotation(Test.class);
				System.out.println("Test( method = " + method.getName()
						+ " , id = " + annotation.id() + " , description = "
						+ annotation.description() + " )");
			}
		}
	}

}

  

 

分享到:
评论

相关推荐

    mpeg2.rar_C 注解_TS流分析 _mpeg ts_ts encode_程序员

    此代码是IS0 13818-5 MPEG2系统层协议分析代码,经过我的一点修改,现在终于可以在VC++ 6.0下编译运行, 发布上来献给那些为了理解MPEG2系统层协议而苦苦加班的程序员。为了可以在windows下编译,我修改了部分操作...

    java7hashmap源码-AnnotationDemo:注解基础知识,编译时注解和运行时注解例子

    这是注解的精髓,理解了这一点一切就变得不再那么神秘。 例如我们写代码用的IDE(例如 IntelliJ Idea),它检查发现某一个方法上面有@Deprecated这个注解,它就会在所有调用这个方法的地方将这个方法标记为删除。访问...

    若依RuoYi框架剖析笔记,该笔记是在学习江南一点雨所录课程再结合自己的理解所写

    11、自定义注解+AOP 12、权限中的概念梳理 13、登录.授权流程梳理 14、RuoYi-Vue3 15、动态菜单加载思路 16、Vue3中的数据加载 17、Promise 18、Vue3和Vue2的差异 19、Vue3中自定义插件 20、Vue3自定义指令 21、...

    图像处理与计算机视觉-图像处理简单操作及解析

    上述说明为作业要求,我的滤波模板是手工的,自动生成的模板有点问题作业中就暂时放在注释中了,代码中有很详细注解、个人理解,也很适合初学者了解写代码过程步骤,VS2015中实现,语言C++,跑起来一点错误也没有,...

    ucos_ii中文注释.pdf

    原因是我的E 文水平很差,不过Ucos 还是给了我尝试的动力,在作者的原基础上增加中文译码,也许是一件非常不错的选择,相信在中国和我这种水平的人多不胜数,中文的注解对源码而言,能够具有极高的理解价值,可以在...

    程序设计和测试.doc

    程序的内部文档 程序的注解对于程序的阅读与理解起着重要的作用。 1. 程序块头部注释。包括模块功能说明,由1~2行的篇幅说明本模块要完成的功能 。输入/出变量说明,对参数表中的每个变量按顺序逐个说明其意义。...

    23种设计模式之:建造者,代理,观察,策略,状态模式

    用幽默的方式写下这些设计模式,代码里面有相应注解,不会很难理解,每个包里面有1-2个代码事例,还有一点小说明,还有本人qq,现在只有5种,其他的设计模式期待下一个版本吧!

    OG语法手册of 超级菜鸟

    限定定语指的只是修饰词中的一部分东西,理解了这一点,很多这方面的题目3秒钟搞定(其实很多题目都可以30秒搞定的),我听过某某方的课堂录音,在这点上讲的不对。 当然,大牛们就不要看我的注解了(浪费时间)---...

    自己动手设计ESB(5)

    文章接上文本小节开始,我们将按照前文介绍的ESB-Client的核心步骤,一点一点的给出ESB-Client端和ESB-Broker进行交互的核心代码。为了方便在ESB-Client端进行ESB-Broker的交互,我们设计了一个ActiveBrokerContext...

    精华游戏算法整理(经典)

    你可以在这里找到方程和额外的注解。 F的值是G和H的和。第一步搜索的结果可以在下面的图表中看到。F,G和H的评分被写在每个方格里。正如在紧挨起始格右侧的方格所表示的,F被打印在左上角,G在左下角,H则在右下角。...

    hibernate 框架详解

    使用 JDK 5.0 的注解(Annotation) 7. 集合类(Collections)映射 7.1. 持久化集合类(Persistent collections) 7.2. 集合映射( Collection mappings ) 7.2.1. 集合外键(Collection foreign keys) 7.2.2. 集合...

    Hibernate中文详细学习文档

    19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One ...

    hibernate3.04中文文档.chm

    20.5. 理解集合性能(Understanding Collection performance) 20.5.1. 分类(Taxonomy) 20.5.2. Lists, maps 和sets用于更新效率最高 20.5.3. Bag和list是反向集合类中效率最高的 20.5.4. 一次性删除(One...

    Hibernate教程

    20.5. 理解集合性能(Understanding Collection performance) 20.5.1. 分类(Taxonomy) 20.5.2. Lists, maps 和sets用于更新效率最高 20.5.3. Bag和list是反向集合类中效率最高的 20.5.4. 一次性删除(One ...

    Hibernate+中文文档

    19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One ...

    基于maven项目的SSM框架与layu前端框架的代码

    首先,需要说明的一点,AOP只是Spring的特性,它就像OOP一样是一种编程思想,并不是某一种技术,AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个...

    hibernate 体系结构与配置 参考文档(html)

    使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) ...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One ...

    Hibernate参考文档

    19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One ...

    HibernateAPI中文版.chm

    19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One ...

Global site tag (gtag.js) - Google Analytics