java注解

菜鸟教程写得更全面
Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。
Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容,同时它也支持自定义 Java 标注。

内置的注解
Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。从java7开始额外增加了三个注解。

元注解(作用在其他注解的注解)

@Retention - 标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。
RetentionPolicy.SOURCE:表示该注解自会存在于代码阶段,编译时就会自动忽视
RetentionPolicy.CLASS:表示该注解只会存在于编译时,他不会被加载到JVM中
RetentionPolicy.RUNTIME:表示该注解可以保留到程序运行时,他会被加载到JVM中,所以在程序运行时可以获取到它们。

@Documented - 标记这些注解是否包含在用户文档(javadoc)中。

@Target - 标记这个注解应该是哪种 Java 成员。(这个注解作用的对象)
ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
ElementType.CONSTRUCTOR 可以给构造方法进行注解
ElementType.FIELD 可以给属性进行注解
ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
ElementType.METHOD 可以给方法进行注解
ElementType.PACKAGE 可以给一个包进行注解
ElementType.PARAMETER 可以给一个方法内的参数进行注解
ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举

@Inherited - 标记这个注解是继承于哪个注解类(默认 注解并没有继承于任何子类)
比如说A使用了该注解,那么继承自A的B也默认会有此注解
@Repeatable - Java 8 开始支持,标识某注解可以在同一个声明上使用多次

预置的注解(作用在代码的注解)

@Deprecated:用来标记已过时的元素
@Override:提示子类要重写父类的方法
@SuppressWarnings:可以忽略某种警告
@SafeVarargs:提醒开发者不要用参数做一些不安全的操作(不常用)
@Functionallnterface:函数时接口注解(不常用)

Annotation架构
"每 1 个 Annotation" 都与 "1 个 RetentionPolicy" 关联,并且与 "1~n 个 ElementType" 关联
                       (指定Annotation的策略--作用域)           (指定Annotation类型)

在这里插入图片描述

Annotation.java

package java.lang.annotation;
public interface Annotation {
    boolean equals(Object obj);
    int hashCode();
    String toString();
    Class<? extends Annotation> annotationType();
    }

ElementType.java

package java.lang.annotation;
public enum ElementType {
    TYPE,               /* 类、接口(包括注释类型)或枚举声明  */
    FIELD,              /* 字段声明(包括枚举常量)  */    
    METHOD,             /* 方法声明  */    
    PARAMETER,          /* 参数声明  */    
    CONSTRUCTOR,        /* 构造方法声明  */    
    LOCAL_VARIABLE,     /* 局部变量声明  */    
    ANNOTATION_TYPE,    /* 注释类型声明  */    
    PACKAGE             /* 包声明  */
    }

RetentionPolicy.java

package java.lang.annotation;
public enum RetentionPolicy {    
SOURCE,            /* Annotation信息仅存在于编译器处理期间,编译器处理完之后就被丢弃  */    
CLASS,             /* 编译器将Annotation存储于类对应的.class文件中,jvm会忽略它。默认行为  */    
RUNTIME            /* 编译器将Annotation存储于class文件中,JVM会读取它 */
}
自定义注解 @interface

类似于创建一个接口文件。

public @interface NewAnnotation {}

使用自定义的注解类型:

public class AnnotationTest {
    @NewAnnotation
    public static void main(String[] args) {  }
}

示例

public @interface NewAnnotation {
    String value();
}
public class AnnotationTest {
    @NewAnnotation("mainmethod")
    public static void main(String[] args) {  }
    @NewAnnotation(value="saymethod")
    public static void saying(){}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值