`

对注解的一点理解

 
阅读更多

    注解(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() + " )");
			}
		}
	}

}

  

 

分享到:
评论

相关推荐

    Android-一个基于运行时注解与编译时注解的AndroidIocDemo

    3. **编译时注解处理(Compile-Time Annotation Processing)**:编译时注解处理是指在编译阶段对源代码进行操作,比如自动生成代码、验证类型安全等。Java的注解处理器API(javax.annotation.processing.Processor...

    利用redis生成注解实现进程锁

    首先,我们需要理解进程锁的基本概念。在多线程环境下,进程锁用于防止多个线程同时访问共享资源,避免数据竞争问题。Redis因其高可用性、快速响应和丰富的数据结构,成为了分布式锁的理想选择。 Redis中的SetNX...

    SpringMVC注解

    本文将围绕`@RequestParam`的基本使用方法、各种异常处理技巧以及一些进阶用法进行深入探讨,旨在帮助开发者更好地理解和运用这一功能强大的注解。 #### 二、基本使用:获取提交的参数 在SpringMVC中,通过`@...

    自定义注解

    如果需要在编译时对注解进行处理,可以创建一个`AnnotationProcessor`。这通常用于代码生成、验证或其他编译时任务。不过,这里的`TestAnnotation`似乎在运行时被使用,因此可能不需要处理器。 5. **运行时处理** ...

    LoonAndroid超低耦合注解框架.zip

    在Java中,注解是一种元数据,可以提供有关程序元素的附加信息,而LoonAndroid正是利用这一点,使得组件之间的耦合度降低,增强了代码的灵活性。 二、核心原理 1. 注解处理:LoonAndroid框架通过自定义的注解...

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

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

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

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

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

    《若依RuoYi框架剖析笔记》是基于江南一点雨的课程并结合个人理解整理而成,涵盖了项目改造、框架结构分析以及多个关键功能模块的深入探讨。以下将逐一解析这些知识点。 1、**项目改造**:首先,从源代码仓库获取...

    在非spring注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息

    首先,让我们来理解如何在非Spring注解的类中使用Spring容器中的Bean。Spring容器是通过`ApplicationContext`接口管理Bean的。要从一个非Spring管理的类中获取Bean,我们需要先创建或获取`ApplicationContext`实例。...

    基于注解的轻量级java流程跟踪工具.zip

    其次,轻量级意味着这个工具对系统资源的占用较低,不会对程序性能造成显著影响。这对于生产环境中的应用尤其重要,因为过度的性能开销可能导致系统运行缓慢或者不稳定。轻量级工具通常通过高效的日志记录、事件触发...

    spring mvc+jdbctemplate非注解例子

    在本示例中,我们探讨的是一个基于Spring MVC和JdbcTemplate的非注解式应用程序,该程序可能用于...在实际项目中,虽然注解式的配置更受青睐,但了解非注解方式有助于理解Spring的工作原理,特别是对于老项目的维护。

    ModelAttribute注解详细使用.docx

    通过对`@ModelAttribute`注解的深入理解,我们可以更加灵活地管理请求数据和模型对象之间的交互。在实际开发中,根据不同的业务需求选择合适的使用方式是非常重要的。正确地使用`@ModelAttribute`不仅可以提高代码的...

    轻量级数据库,不用写 SQL ,仅仅通过注解就能完成对数据库的操作

    标题中的“轻量级数据库,不用写 SQL,仅仅通过注解就能完成对数据库的操作”指的是在移动应用开发中,一种简化数据库操作的技术。通常,这种技术允许开发者避免编写复杂的SQL语句,而是利用编程语言中的注解来实现...

    Halcon SCARA关节机器人手眼标定例程注解.zip_halcom手眼标定_halcon_halcon 手眼标定_halc

    程序中包含的注解对理解每个步骤的作用至关重要,它能帮助用户避免常见的错误,提高标定效率。 总之,Halcon提供的SCARA关节机器人手眼标定例程是实现高精度机器人视觉集成的重要工具。通过详尽的注解和实际操作,...

    疯狂java讲义29 电子版 pdf

    在讨论《疯狂java讲义》电子版PDF中关于javadoc工具的使用及其对注解的处理时,我们需要先了解javadoc工具是什么,以及注解(Annotation)在Java中的作用。javadoc是Java提供的一个工具,它可以自动提取Java源代码中...

    python代码游戏源码 贪吃蛇游戏项目源码有详细注解,适合新手一看就懂.rar

    7. **注释**:源码中的详细注解对初学者来说是极其宝贵的,它们解释了每段代码的作用,帮助理解游戏背后的逻辑。 8. **调试与测试**:源码中可能还包括一些调试工具或测试用例,帮助开发者验证游戏功能的正确性。 ...

    驾照考试-全安一点通交规驾考软件.docx

    1. 真题学习:题目科学分类,并有详细注解。 2. 顺序练习/随机练习:多元化的练习做题模式。 3. 错题巩固:帮您统计错题,针对性巩固练习。 4. 模拟考试:按新政策出台的考试规则进行真实模拟考试。 5. 本周押题:试...

    对JUnit的一点简单讲解包括一点简单的Android JUnit的讲解

    AndroidJUnit4是专门为Android平台设计的JUnit版本,它集成了JUnit4的功能并添加了对Android测试的支持。 Android测试分为几个层次: 1. 单元测试(Unit Tests):主要针对应用程序的业务逻辑,不涉及UI,通常在...

    python代码游戏源码 贪吃蛇 版本2有详细注解,适合新手一看就懂.rar

    这个版本2的代码特别适合新手学习,因为注释详尽,有助于理解每一部分的功能。 首先,我们要了解贪吃蛇游戏的基本概念。贪吃蛇游戏的主角是一条不断移动的蛇,玩家通过控制蛇的方向来让它吃掉屏幕上的食物。每次吃...

    python wxpy统计好友地理位置实例有详细注解,适合新手一看就懂

    在Python编程领域,微信开发是一个常见且实用的应用场景。`wxpy`是一个强大的第三方库,它使得使用Python操作微信变得更加简单...对于新手来说,详细注解的代码将有助于理解每一步操作的目的,从而更好地掌握相关知识。

Global site tag (gtag.js) - Google Analytics