美文网首页
Java注解学习笔记

Java注解学习笔记

作者: 捉虫大师 | 来源:发表于2018-08-05 21:24 被阅读8次

什么是Java注解

  • 注解:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
  • 标准注解:@Override,@Deprecated,@SuppressWarnings
  • JDK元注解:注解其他注解的注解,四个元注解分别是
    @Target,@Retention,@Documented,@Inherited
  1. @Target说明注解修饰对象的范围。
ElementType.CONSTRUCTOR 描述构造器
ElementType.FIELD 描述域
ElementType.LOCAL_VARIABLE 描述局部变量
ElementType.METHOD 描述方法
ElementType.PACKAGE 描述包
ElementType.PARAMETER 描述参数
ElementType.TYPE 描述类、接口(包括注解类型)或enum声明
  1. @Retention定义注解被保留时间的长短。
RetentionPoicy.SOURCE 源文件保留
RetentionPoicy.CLASS class文件保留
RetentionPoicy.RUNTIME 运行时保留
  1. @Documented 这个注解修饰的Annotation类可以被javadoc工具提取成文档,他是一个标记注解,没有成员。
  2. @Inherited表示被标注过的类型是被继承的,如果一个@Inherited修饰的注解类型被用于一个class,则这个注解将被用于该class的子类,他也是个标记注解。

如何自定义一个注解

  • 定义格式
public @interface 注解名 {定义体}
  • 注意:只能用public或default这两个访问权修饰;参数成员只能用基本类型(byte,short,char,int,long,float,double,boolean)和String,Enum,Class,annotations以及他们的数组;
  • 一个简单例子
package annotationtest;

import java.lang.annotation.*;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitColor {

    public enum Color {BLUE, RED, GREEN};

    Color fruitColor() default Color.RED;
}
package annotationtest;

public class Apple {

    @FruitColor(fruitColor = FruitColor.Color.RED)
    public String color;
}
package annotationtest;

import java.lang.reflect.Field;

public class FruitInfoUtil {

    public static String getFruitInfo(Class<?> tClass) {

        String colorString = "";

        Field[] fields = tClass.getDeclaredFields();
        for (Field field : fields) {
            if (field.isAnnotationPresent(FruitColor.class)) {
                FruitColor fruitColor = field.getAnnotation(FruitColor.class);
                colorString = fruitColor.fruitColor().toString();
            }
        }
        return colorString;
    }

}
package annotationtest;

public class FruitMain {

    public static void main(String[] args) {
        System.out.println("apple color:"+FruitInfoUtil.getFruitInfo(Apple.class));
    }
}

原理

从上面的例子能看出,注解起作用是java的反射机制。

  • 反射是指程序在运行时能获取自身的信息
  • 反射可以获取类中的信息,包括类的构造方法,类方法,属性等等。
// 获取类的属性
Field[] fields = tClass.getDeclaredFields();
// 获取类的构造方法
Constructor[] constructors = tClass.getConstructors();
// 获取类方法
Method[] methods = tClass.getMethods();

相关文章

  • Java反射机制学习笔记

    上一篇《java注解学习笔记》中最后说到了注解的实现主要依赖java的反射机制,那么这一篇主要介绍一下java的反...

  • JAVA注解学习笔记

    学习书籍 JAVA编程思想(第四版)第20章 java SE5中引入的新特性之一,并在java.lang中内置了几...

  • Java注解学习笔记

    什么是Java注解 注解:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本...

  • Java注解学习笔记

    作为一个Android开发者,关于注解应该用的很多,比如大名鼎鼎的ButterKnife框架,就是主要依赖于注解实...

  • Java 注解 学习笔记

    Java 注解 学习笔记 前言: 注解是一个很早就出现的技术,之前一直没有时间就这么拖着,现在闲暇之时学习一下,...

  • Java 注解 学习笔记

    我们平常写Java代码,对其中的注解并不是很陌生,比如说写继承关系的时候经常用到@Override来修饰方法。但是...

  • java注解学习笔记

    注解的定义 官方定义:Java注解用于为Java代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些...

  • Java注解学习笔记

    注解是Java提供的一种原程序中的元素关联任何数据和任何信息的一种途径和方法。 注解的分类 按运行机制分 源码注解...

  • 关于注解

    自己学习笔记,仅供自己参考,如有不对欢迎指正 1.source注解,生命周期存活与Java源文件(.java文件)...

  • 相关文章

    我的笔记核心理论基础、Socket通信原理、RPC远过程调用协议、Dubbo博客 java注解-01、java注解...

网友评论

      本文标题:Java注解学习笔记

      本文链接:https://www.haomeiwen.com/subject/olrivftx.html