1.介绍

注解是JavaSE5.0開始提供的一项新特性,利用此特性能够通过特定的注解标签为程序提供一些描写叙述性信息。

这些描写叙述性信息能够在编译或执行时为编译器、执行环境提供附加的信息。从而简化开发。

 2.自己定义注解

1.声明自己的注解

@interface <注解名称>{<注解属性类型> <注解属性名称>[default<默认值>]}

<span style="font-family:SimSun;font-size:18px;">@interface myTest{//自己定义注解属性String msg();}</span>

2.确定注解使用目标

目的不同,注解能够有不同的使用目标。

比如对方法注解,对构造器注解,对变量字段注解,对类或者接口注解等等

@Target(ElementType.<使用目标点>)

<span style="font-family:SimSun;font-size:18px;">//声明此注解仅仅能对类或者接口进行注解
@Target(ElementType.TYPE)
@interface myTest{//自己定义注解属性String msg();}</span>

3.确定注解的使用时效

依据使用目的不同,注解能够有不同的使用时效。

Class:注解存在于雷文件里。但在执行时虚拟机不能够获取注解信心

SOURCE:注解仅仅存在于源码中。在编译时被去除

RUNTIME:注解存在于类文件里,并且在执行时虚拟机能够获取注解信息

@Retention(RetentionPolicy.<时效值>)

<span style="font-family:SimSun;font-size:18px;">//声明此注解仅仅能对类或者接口进行注解
@Target(ElementType.TYPE)
//声明此注解在执行时能够获得
@Retention(RetentionPolicy.RUNTIME)
@interface myTest{//自己定义注解属性String msg();}</span>

4.使用反射获取注解

前几篇博客中谈到过反射,在这里也能够通过反射获取到注解的信息,方法与上述类似。

<span style="font-family:SimSun;font-size:18px;">package com.Annotation;import java.lang.annotation.*;
import java.lang.reflect.*;//声明使用目标为TYPE的注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface MyAnnotationForClass {java.lang.String msg();
}// 声明使用目标为METHOD的注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface MyAnnotationForMethod {java.lang.String msgPart1();java.lang.String msgPart2();
}// 声明使用注解的类
@MyAnnotationForClass(msg = "这是对类的注解")
class MyClass {@MyAnnotationForMethod(msgPart1 = "方法的第一部分注解", msgPart2 = "方法的第二部分注解")public void sayHello() {System.out.println("恭喜您成功地调用了sayHello方法!

!"); } } // 主类 public class Sample34_10 { public static void main(String[] args) throws NoSuchMethodException { // 获取使用了注解的类MyClass相应的Class对象 Class ac = MyClass.class; // 获取MyClass类的注解 MyAnnotationForClass mafc = (MyAnnotationForClass) ac .getAnnotation(MyAnnotationForClass.class); // 打印类的注解信息 System.out.println("MyClass类的注解信息为:“" + mafc.msg() + "”。

"); // 获取指定方法相应的Method对象 Method method = ac.getMethod("sayHello", new Class[0]); // 获取方法相应的注解 MyAnnotationForMethod mafm = (MyAnnotationForMethod) method .getAnnotation(MyAnnotationForMethod.class); // 打印方法相应的注解信息 System.out.println("sayHello方法的第一部分注解信息为:“" + mafm.msgPart1() + "”。

"); System.out.println("sayHello方法的第二部分注解信息为:“" + mafm.msgPart2() + "”。"); } } </span>

上述实例中分别定义了两种注解信息。一种应用于类或者接口上。一种应用于方法上面;紧接着通过反射机制获取到对应的注解类,然后就能够操纵注解信息

转载于:https://www.cnblogs.com/jzdwajue/p/6724547.html

Java学习笔记十(注解)相关推荐

  1. Java学习笔记之--------注解(Annotation)

    注解的定义 注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等 ...

  2. Java学习笔记7-2——注解与反射

    目录 理解 Class 类并获取 Class 实例 Class类 获取 Class 类的实例 哪些类型可以有Class对象 所有类型的Class对象 从内存角度分析类加载[重点] 类加载的过程 什么时 ...

  3. Java学习笔记7-1——注解与反射

    目录 注解 注解是啥 内置注解 元注解 @Target @Retention @Documented @Inherited 自定义注解 反射 静态语言 和 动态语言 Java 反射机制概述 Java ...

  4. 反射、Lambda表达式(Java学习笔记十二)

    文章目录 反射 Class 类 创建运行时类的对象 获取运行时类的完整结构 调用运行时类的指定结构 调用指定方法 调用指定属性 关于setAccessible方法的使用: 动态代理 Lambda表达式 ...

  5. java学习笔记(十二)----集合

    集合类 集合类用于存储一组对象,其中的每个对象称之为元素,经常会用以的有Vector,Enumeration,ArrayList,Collection,Iterator,Set,List等集合和接口 ...

  6. Java学习笔记十五

    26. 下面介绍synchronized代码块,个人以为,重要度远远高于单纯的修饰synchronized方法: 一方面:高效率! 另一方面:后面涉及到的wait和notify方法,都要涉及 Sync ...

  7. java学习笔记十二

    1. Java IO 主要分为字节流(byte stream) 字符流          (characterstream) 实现这两种流的输入流与输出流分别是 InputStream OutputS ...

  8. 【Java学习笔记十】输入输出流

    在Java.io包中提供了一系列用于处理输入/输出的流类.从功能上分为两类:输入流和输出流.从六结构上可分为:字节流(以字节为处理单位)和字符流(以字符为处理单位). 字符是由字节组成.在Java中所 ...

  9. Java学习笔记十:Java的数组以及操作数组

    Java的数组以及操作数组 一:什么是数组: 数组可以理解为是一个巨大的"盒子",里面可以按顺序存放多个类型相同的数据,比如可以定义 int 型的数组 scores 存储 4 名学 ...

最新文章

  1. Servlet、MySQL中文乱码
  2. linux下shell显示-bash-4.1#不显示路径解决方法
  3. DirectX 开发环境配置
  4. linux安装jetty部署war包,jetty部署war包
  5. 20应用统计考研复试要点(part21)--概率论与数理统计
  6. php xml与数组的转换函数
  7. Mac用户必备翻译软件!Bob 0.5.3 中文版 附谷歌翻译插件!
  8. 腾讯笔试题——猴子吃桃(PythonC语言实现)
  9. 代理xp组件已作为此服务器安全配置的一部分被关闭
  10. 夜深人静写算法(十四)- 基数估计 (Cardinality Estimation)
  11. intel服务器芯片组C,Intel C232芯片组 华硕P10S-C售2399元
  12. Java开发者,我到底要不要学大数据开发?
  13. Tracup|工作时节省时间的三个奇异但是有用的小妙招
  14. 请简述一下 Ajax 的原理及实现步骤
  15. 计算机网络——单播、多播(组播)、广播
  16. dede栏目添加自定义字段方法
  17. python实现抽签功能(不放回抽样)
  18. refseq数据库的特点_eureka如何剔除服务
  19. python和nltk自然语言处理 脚本之家_想要入门自然语言处理,资料贫瘠,英语不好,大神推荐斯坦福的真的是搞不定,迷迷茫茫,不知从何下手?...
  20. 知乎引流推广运营全攻略

热门文章

  1. python学习费用-深圳python学习费用
  2. python编辑器安卓下载-Python的下载安装与Python编辑器的安装
  3. python好找工作吗2017-2017,再来聊一聊Python,未来发展怎样?
  4. python怎么画条形图-python绘制条形图方法代码详解
  5. python官网下载步骤linux-官方下载python源码,编译linux版本的python
  6. python测试开发自学教程-自动化平台测试开发:Python测试开发实战_PDF电子书
  7. python语言可以应用在哪些方面-python应用于哪些方面
  8. python如何读取excel数据-使用Python读取电子表格中的数据
  9. python面向对象编程的优点-Python面向对象编程——总结面向对象的优点
  10. python 书 推荐-推荐几本Python书