JAVA annotation入门基础_java

一. 最常见的annotation
•@Override:用在方法之上,用来告诉别人这一个方法是改写父类的
•@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
•@SuppressWarnings:暂时把一些警告信息消息关闭
•@Entity:表示该类是可持久化的类

二. 设计一个自己的Annotation
先看代码再讲话
1. 只有一个参数的Annotation实现

复制代码 代码如下:

package chb.test.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation1 {
        String value();
}

2. 有两个参数的Annotation实现

复制代码 代码如下:

package chb.test.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation2 {
        String description();
        boolean isAnnotation();
}

3. Annotation实验类

复制代码 代码如下:

package chb.test.annotation;
@MyAnnotation1("this is annotation1")
public class AnnotationDemo {
        @MyAnnotation2(description="this is annotation2",isAnnotation=true)
        public void sayHello(){
                System.out.println("hello world!");
        }
}

4.Annotation测试说明类

复制代码 代码如下:

package chb.test.annotation;
import java.lang.reflect.Method;
import org.junit.Test;
public class TestAnnotation {
        @Test
        public void test() throws ClassNotFoundException, SecurityException, NoSuchMethodException{
                Class<?> cls = Class.forName("chb.test.annotation.AnnotationDemo");
                boolean flag = cls.isAnnotationPresent(MyAnnotation1.class);
                if(flag){
                        System.out.println("判断类是annotation");
                        MyAnnotation1 annotation1 = cls.getAnnotation(MyAnnotation1.class);
                        System.out.println(annotation1.value());
                }

                Method method = cls.getMethod("sayHello");
                flag = method.isAnnotationPresent(MyAnnotation2.class) ;
                if(flag){
                        System.out.println("判断方法也是annotation");
                        MyAnnotation2 annotation2 = method.getAnnotation(MyAnnotation2.class);
                        System.out.println(annotation2.description()+"/t"+annotation2.isAnnotation());
                }
        }

}

实验结果,控制台打出如下信息:

判断类是annotation
this is annotation1
判断方法也是annotation
this is annotation2     true

三.简介及说明
1. MyAnnotation1中的@Target(ElementType.TYPE)
@Target里面的ElementType是用来指定Annotation类型可以用在哪些元素上的.例如:
TYPE(类型)、FIELD(属性)、METHOD(方法)、PARAMETER(参数)、CONSTRUCTOR(构造函数)、LOCAL_VARIABLE(局部变量),、PACKAGE(包),其中的TYPE(类型)是指可以用在Class,Interface,Enum和Annotation类型上。

2. MyAnnotation1中的@Retention(RetentionPolicy.RUNTIME)

RetentionPolicy 共有三种策略,分别为:
•SOURCE:这个Annotation类型的信息只会保留在程序源码里,源码如果经过了编译之后,Annotation的数据就会消失,并不会保留在编译好的.class文件里面

•CLASS:这个Annotation类型的信息保留在程序源码里,同时也会保留在编译好的.class文件里面,在执行的时候,并不会把这些信息加载到JVM中。注:默认策略为CLASS类型

•RUNTIME:表示在源码、编译好的.class文件中保留信息,在执行的时候会把这一些信息加载到JVM中去的

3. MyAnnotation1中的@Documented
目的就是将这一Annotation的信息显示在JAVA API文档上,如果没有增加@Documented的话,JAVA API文档上不会显示相关annotation信息

4. MyAnnotation1中的@interface
关键字,表示该类为Annotation定义

5. MyAnnotation1中的 String value();
表示有一个成员参数,名字为value,访问权为默认(default)修饰符,注意以下两点:
•访问权只能用public和默认(default)修饰
•参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String,Enum,Class,annotations等数据类型,以及这一些类型的数组

6.AnnotationDemo中的@MyAnnotation1("this is annotation1")
因为MyAnnotation1只有一个参数,因此可以直接在括号中写上value值。注:如果Annotation只有一个参数,则建议最好将该参数名称定义为value

7.TestAnnotation中的cls.isAnnotationPresent(MyAnnotation1.class)
判断该类是否使用了MyAnnotation1的注释

8. TestAnnotation中的MyAnnotation1 annotation1 = cls.getAnnotation(MyAnnotation1.class)
返回该类针对MyAnnotation1的注释

9. TestAnnotation中的method.isAnnotationPresent(MyAnnotation2.class)
判断该方法是否使用了MyAnnotation2的注释

时间: 2024-08-12 15:47:51

JAVA annotation入门基础_java的相关文章

Java Swing入门基础

转自 键者天行 1.前言: 当我们学习过了java中的基本语法,并且熟悉java的面向对象基础以后,我们就可以开始简单的Swing程序的设计,用过Vb的朋友可能会被它的简单的设计用户界面方法所吸引,只需要拖几个控件到窗体上,为每个空件编写event就可以简单的实现界面设计.但是强大的java也不比vb逊?同样可以设计出精美的界面. 2.Swing概述: 当java1.0刚刚出现时还没有swing,当时的GUI基本编程库,sun取名叫AWT(Abstract Window Tookit),基本AW

Java Annotation入门

摘要: 本文针对java初学者或者annotation初次使用者全面地说明了annotation的使 用方法.定义方式.分类.初学者可以通过以上的说明制作简单的annotation程 序,但是对于一些高级的annotation应用(例如使用自定义annotation生成 javabean映射xml文件)还需要进一步的研究和探讨.涉及到深入annotation的内 容,作者将在后文<Java Annotation高级应用>中谈到. 同时,annotation运行存在两种方式:运行时.编译时.上文

Java正则表达式入门基础篇(新手必看)_正则表达式

正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段. 大家都知道,正则表达式是一种可以

Apache Camel的Java编程入门指南_java

 Apache Camel是一个非常实用的规则引擎库,能够用来处理来自于不同源的事件和信息.你可以在使用不同的协议比如VM,HTTP,FTP,JMS甚至是文件系统中来传递消息,并且让你的操作逻辑和传递逻辑保持分离,这能够让你更专注于消息的内容. 在这篇文章中,我将提供一个Java语言(非Groovy)的Apache Camel入门演示. 首先创建一个Maven项目的pom.xml.   <?xml version="1.0" encoding="UTF-8"?

介绍Jersey-Jersey入门基础_java

这里不准备讨论REST的细节内容,但是总体上,REST是让客户端与服务器段的交互通过发送和接收展示资源的方式来进行,在这里有必要说明: Fielding是http协议和apache web server的核心作者之一.举个例子: 一个http get request可以接收到一个资源 一个http post request可以生成一个资源. 如此描述,对JAVA开发者来讲也许过于底层了,事实上绝大多数的J2EE 应用程序,尤其javaserver faces应用程序是不允许REST这样的风格框架

Java正则表达式入门基础篇(新手必看)

正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段. 大家都知道,正则表达式是一种可以

Java初学者入门基础知识

一.jdk就是j2se,jdk1.1.8版本以后改成为j2se, 下载地址:http://java.sun.com/j2se/downloads.html 二.jre是java运行时环境(jdk1.3版本以后都包含jre)不用单独下载 三.设置环境变量 安装了jdk以后,要配置环境变量 我的电脑->属性->高级->环境变量 添加以下环境变量(假定你的java安装在c:\jdk1.3) java_home=c:\jdk1.3 classpath=.;c:\jdk1.3\lib\dt.jar

Java4Android之Java+Annotation入门

对java的Anotation还是不理解,希望看完这个贴子能够理解,Mark一下,明天再看.困了. http://wenku.baidu.com/link?url=eWzdJ4sDjnYA_OymO5JKBwmp97dhdZsCMpnnzN0G2l5eAVKRq7LujRCsIcRRt5B9ixVxDXLdEjycHvB5Kp7G3uLqaqJuF8fF9DgdRIdeLrS

学习教程:Java Annotation 高级应用

高级|教程 前言: 前不久在matrix上先后发表了<java annotation 入门>.<java annotation 手册>两篇文章,比较全面的对java annotation的语法.原理.使用三方面进行了阐述.由于<入门>中的简单例程虽然简单明了的说明了annotation用法,但给大家的感觉可能是意犹未见,所以在此行文<java annotation高级应用>,具体实例化解释annotation和annotation processing to