了解和使用Java中的注解
2017-12-28 12:23
113 查看
了解和使用Java中的注解
首先,我们要知道,Java中的注解和注释是完全不同的。下面开始介绍Java中的注解。1 为什么要自定义注解
Java从1.5版本以后默认内置三个注解:@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。
@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
@SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭.
但是,仅仅这三个标注是不能满足我们开发时一些需求的。所以java允许我们自定义注解来使用。
2 如何自定义注解
自定义步骤大致分为两步:1. 通过@interface关键字(注意,不是interface,是@interface)声明注解名称,以及注解的成员属性或者叫做注解的参数。
2. 使用java内置的四个元注解对这个自定义标注的功能和范围进行一些限制
问题来了,什么是元注解?
什么是元注解
元注解,就是定义注解的注解,也就是说这些元注解是的作用就是专门用来约束其它注解的注解。请区别上面那三个注解,他们也是通过元注解定义而来的。元注解有哪些呢,主要有四个:
- @Target
- @Retention
- @Documented
- @Inherited
@Target 表示该注解用于什么地方,可能的参数在ElementType中声明:
ElementType.CONSTRUCTOR 构造器声明
ElementType.FIELD 域声明(包括 enum 实例)
ElementType.LOCAL_VARIABLE 局部变量声明
ElementType.METHOD 方法声明
ElementType.PACKAGE 包声明
ElementType.PARAMETER 参数声明
ElementType.TYPE 类,接口(包括注解类型)或enum声明
@Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
RetentionPolicy.SOURCE 注解将被编译器丢弃
RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
@Documented 将此注解包含在 javadoc 中
@Inherited 允许子类继承父类中的注解
自定义注解
package com.xiaoying.test; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.annotation.ElementType;; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Description { int value(); }
使用自定义注解
自定义的注解中,如果只有一个参数,调用的时候不需要声明参数名,如果有多个,则需要声明参数名,例如上面只需要@Description(1) 即可,如果上面多了一个String desc()的话,调用就需要@Description(value=1, desc=”这是描述”)public class Test { static class A { // 写一个方法,里面包含了@Description注解的方法,值为1 @Description(1) public void print(String message) { System.out.println(message + " print type as 1 ------------------"); } } public static void main(String args []) { A a = new A(); Class aCls = a.getClass(); Method [] methods = aCls.getDeclaredMethods(); for(Method method : methods) { boolean flag = method.isAnnotationPresent(Description.class); if(flag) { // 方法包含@Description注解 Annotation an = method.getAnnotation(Description.class); Description de = (Description)an; System.out.println("method--" + method.getName() + de.value()); if(de.value() == 1) { // @Description注解的value值为1 try { // 使用反射机制,调用对象a中包含@Description注解的方法 method.invoke(a, "BBBBBBBBBBBBBBBBBBBBBBBBBB"); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } }
相关文章推荐
- Spring Framework 5.0:使用注解的方式来加载Bean、入门注解、了解java反射
- JAVA基础学习之IP简述使用、反射、正则表达式操作、网络爬虫、可变参数、了解和入门注解的应用、使用Eclipse的Debug功能(7)
- java自带注解了解,自定义注解的实现,自定义注解的使用
- 在EasyDBO中使用Java注解配置映射的原理及使用
- 在EasyDBO中使用Java注解配置映射的原理及使用
- java5.0使用annotion注解
- 在EasyDBO中使用Java注解配置映射的原理及使用
- EasyDBO中Java注解配置映射的原理及使用
- 教你深入了解Java中接口的使用
- 了解注解及java提供的几个基本注解(JDK1.5的新特性)
- JUnit 4 使用 Java 5 中的注解(annotation)
- 使用java5的注解和Sping/AspectJ的AOP 来实现Memcached的缓存
- Java基础复习笔记12Java自定义注解Annotation的使用
- Java自定义注解Annotation的使用
- Java基础-学习使用Annotation注解对象
- 在EasyDBO中使用Java注解配置映射的原理及使用
- 在EasyDBO中使用Java注解配置映射的原理及使用
- 在EasyDBO中使用Java注解配置映射的原理及使用
- 高阶Java-Java注解 Java annotation 使用详解
- Java 理论和实践: 了解泛型(第一次使用泛型的用户的常见陷阱)