Java注解简单学习

注解(也被称作元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们在稍后某个时刻可以很方便的使用这些数据,其在一定程度上将元数据与源代码文件结合在一起,而不是保存在外部文档中。

注解使我们可以用将来由编译器测试和验证的格式,存储程序有关的额外信息。注解可以用来生成描述符文件,甚至是新的类定义,并且有助于减轻编写“样板”代码的负担。通过使用注解,将元数据保存在Java源代码中,并利用annotation API为注解构造处理工具来读取注解。

Java目前只内置了三种标准注解,以及四种元注解。元注解专职负责注解其他注解。大多数时候,程序员都是定义自己的注解,并编写自己的注解处理器来处理他们。

一个简单的注解例子

注解定义:

1 import java.lang.annotation.*;
2
3 @Target(ElementType.METHOD)                    //定义注解用于什么地方
4 @Retention(RetentionPolicy.RUNTIME)          //定义注解在哪个级别可用
5 public @interface UseCase {
6   public int id();
7   public String description() default "no description";
8 }

在注解中,一般都会包含一些元素以表示某些值。当分析处理注解时,程序或工具可以利用这些值。注解的元素看起来就像接口的方法,唯一的区别就是你可以为其制定默认值。没有元素的注解成为标记注解。

使用注解:

 1 import java.util.*;
 2
 3 public class PasswordUtils {
 4   @UseCase(id = 47, description = "Password must contain at least one numeric")
 5   public boolean validataPassword(String password) {
 6     return (password.matches("\\w*\\d\\w*"));
 7   }
 8
 9   @UseCase(id = 48)
10   public String encryptPassword(String password) {
11     return new StringBuilder(password).reverse().toString();
12   }
13
14   @UseCase(id = 49, description = "New password can‘t equal previously used ones")
15   public boolean checkForNewPassword(List<String> prevPasswords, String password) {
16     return !prevPasswords.contains(password);
17   }
18 }

注解@UseCase可以与任何修饰符共同作用于方法,例如public、static或void。从语法角度看,注解的使用方式几乎与修饰符的使用一模一样。注解的定义很像接口的定义,注解与其他任何Java接口一样,会被编译成class文件。

编写注解处理器:

 1 import java.lang.reflect.*;
 2 import java.util.*;
 3
 4 public class UseCaseTracker {
 5   public static void trackUseCases(List<Integer> useCases, Class<?> cl) {
 6     for (Method m : cl.getDeclaredMethods()) {
 7       UseCase uc = m.getAnnotation(UseCase.class);
 8       if (uc != null) {
 9         System.out.println("Found Use Case:" + uc.id() + " " + uc.description());
10         useCases.remove(new Integer(uc.id()));
11       }
12     }
13     for (int i : useCases) {
14       System.out.println("Warning:Missing use case-" + i);
15     }
16   }
17   public static void main(String[] args) {
18     List<Integer> useCases = new ArrayList<Integer>();
19     Collections.addAll(useCases, 47, 48, 49, 50);
20     trackUseCases(useCases, PasswordUtils.class);
21   }
22 }

如果没有用来读取注解的工具,那注解不会比注释更有用。使用注解的过程中,很重要的一个部分就是创建与使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员构造这类工具。同时,它还提供一个外部工具apt帮助程序员解析带有注解的Java源代码。

注解元素的类型:

· 所有基本类型(int, float, boolean等)

· String

· Class

· enum

· Annotation

· 以上类型的数组

如果是使用了其他类型,编译器会报错。注解也可以作为元素的类型,即注解可以嵌套。

参考:《Java编程思想》

时间: 2024-10-05 13:56:57

Java注解简单学习的相关文章

Java注解再学习

注解就是一个标识符,用来标识身份.处理规则等.注解是出现可以代替XML配置文件,使程序更加清晰明了.注解也是框架配置的发展方向,对于Spring而言,虽然有人反对使用注解对Spring进行配置,说这是违背了Spring的IoC的理念,其实不然.使用注解将Java类注解为配置文件和使用XML是一样的,还可以减少配置文件,并且更加自由化的定义bean的初始化过程. 注解是一门比较简单却很实用的技术,定义注解使用@interface关键字: 1 public @interface MyAnnotati

java注解简单使用

java注解可以比喻成标签,可以贴在任何地方,也可以限制只能贴在固定地方,比如类上方.方法上方.属性[字段]上方等,然后通过反射,判断是否存在这个注解. 注解形式 public @interface Test { } 应用 //类上 @Test public class Entity{ // 属性上 @Test private int id; //方法上 @Test public void test(){ } } 元注解 元注解是什么意思呢? 元注解是可以注解到注解上的注解,或者说元注解是一种基

Java注解Annotation学习笔记

一.自定义注解 1. 使用关键字 @interface 2. 默认情况下,注解可以修饰 类.方法.接口等. 3. 如下为一个基本的注解例子: //注解中的成员变量非常像定义接口 public @interface MyAnnotation { //不带有默认值 String name(); //带有默认值 int age() default 20; } 4. Reflect中3个常见方法解读 getAnnotion(Class<T> annotationClass) 返回该元素上存在的,指定类

java注解的学习

package package3; import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;//注解的注解@Retention(RetentionPolicy.RUNTIME)//表示注解试用的范围,此处是表示只用到变量上@Target(El

java泛型简单学习

一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: //import java.util.List; public class GenericTest { public static void main(String[] args) { List list = new ArrayList(); list.add("语文"); list.add("数学"); list.add(100); //编译错误 for (int i = 0; i &l

对于java注解的理解

java注解是学习java过程中一项非常实用的技能,很简单易懂,却不容忽视.关于注解,我们知道,它是从JDK5及其以后JDK版本开始支持Java注解: Java注解(Annotation)也叫作元数据,以‘@注解名’在代码中存在,它是一种在源代码中标注的特殊标记,可以标注源代码中的类.属性.方法.参数等代码,主要用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查. Java注解按照是否含有参数分为三种:1.不带参数,语法结构为:@Annotation 2.带一个参数的注解,语法结构为:@A

Java注解介绍

原文链接: Java Annotations: An Introduction原文日期: 2005年10月14日翻译日期: 2014年07月20日翻译人员: 铁锚 翻译完后,感觉这篇文章是不是在http://www.developer.com被挖坟了? Java注解介绍 基于注解(Annotation-based)的Java开发无疑是最新的开发趋势.[译者注: 这是05年的文章,在2014年,毫无疑问,多人合作的开发,使用注解变成很好的合作方式,相互之间的影响和耦合可以很低]. 基于注解的开发将

java 注解 学习

周末闲来无事,想要研究一下注解方面的知识,以前看过几次,都忘记了,这次学习下,并且写篇文章记录下, 1.元注解  元注解是指注解的注解.包括 @Retention @Target @Document @Inherited四种. 1.1.@Retention: 定义注解的保留策略  Java代码 复制代码代码如下: @Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含 @Retention(RetentionPolicy.CL

JAVA学习Swing章节按钮组件JButton的简单学习

package com.swing; import java.awt.Container; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.URL; import javax.swing.Icon; import javax.swing.ImageIcon;