美文网首页
注解学习笔记

注解学习笔记

作者: Twinkle_______ | 来源:发表于2016-02-27 12:48 被阅读115次

文章大部分内容转载于 尚学堂-高琪-java视频教程ppt。

Annotation的作用:

  • 不是程序本身,可以对程序作出解释(这一点,跟注释没什么区别)
  • 可以被其他程序(比如:编译器)读取。(注解信息处理流程,是注解和注释的重大区别). 如果没有注解信息处理流程,则注解毫无意义。

Annotation在哪里使用:

  • 可以附加在package class method field 等上面, 相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程对这些元数据的访问.
  • 常见注解:

@Override(标记注解, 里边什么也没有)
@Deprecated
@SuppressWarnings

看@Override的源码:

@Target(ElementType.METHOD) // 表示只能应用在方法前面(METHOD)
@Retention(RetentionPolicy.SOURCE) 
public @interface Override {
}

自定义注解

使用@interface自定义注解时,自动继承java.lang.annotation.Annotation接口
要点:

  • @interface 用来声明一个注解*

格式为: public @interface 注解名 {定义体}

  • 其中的每一个方法实际上是声明了一个配置参数

~ 方法的名称就是参数的名称
~ 返回值类型就是参数的类型(返回值类型只能是 基本类型, Class, String, enum )
~ 可以通过default来声明参数的默认值
~ 如果只有一个参数成员, 一般参数名为value

  • 注意:
    • 注解元素必须要有值.我们定义注解元素时,经常使用 空字符串, 0作为默认值
    • 也经常使用负数(比如: -1)表示不存在的含义

元注解:

  • 元注解的作用 就是负责注解其他注解. Java定义了4个标准的meta-annotation类型,它们被用来提供对其它Annotation类型作说明
  • 这些类型和它们所支持的类在java.lang.annotation包中可以找到

@Target
@Retention
@Documented
@Inherited

@Target :
  • 作用
    • @Target(value=ElementType.TYPE)
    • 用于描述注解的使用范围(被描述的注解可以用在什么地方)
所修饰范围 取值ElementType
package 包 PACKAGE
类、接口、枚举、Annotation类型 TYPE
类型成员(方法、构造方法、成员变量、枚举值) CONSTRUCTOR:用于描述构造器<br />FIELD:用于描述域<br />METHOD:用于描述方法
方法参数和本地变量 LOCAL_VARIABLE:用于描述局部变量<br />PARAMETER:用于描述参数
@Retention :
  • 作用
  • 表示需要在什么级别保存该注释信息,用于描述注解的生命周期。
取值 RetentionPolicy 作用
SOURCE 在源文件中有效(即源文件中保留)
CLASS 在class文件中有效(即class保留)
RUNTIME 运行时有效(运行时保留)<br />为Runtime可以被反射机制读取

对于SOURCE和CLASS,编译器会去使用它们,而通过反射就读取不到了。

Example :
// AnnotationDIY.java
//@Target(value = ElementType.METHOD)  //表示这个注解只能放在方法前面
@Target(value = {ElementType.METHOD, ElementType.TYPE}) //类变量和方法都可以修饰
@Retention(RetentionPolicy.RUNTIME) // RUNTIME 反射机制读取注解
public @interface AnnotationDIY {
//    String hometown();  // hometown 是参数名, String 是参数的类型. 不给默认值,使用注解时,要赋一个值
    String hometown() default "";  // default 表示给参数一个默认值
    int distance() default 0;
    int id() default -1;   //不给id传值得话, id就不存在

    String[] rivers() default {"changjiang", "huanghe"};   
}

//AnnotationDIY1.java
@Target(value = {ElementType.METHOD, ElementType.TYPE}) //类变量和方法都可以修饰
@Retention(RetentionPolicy.RUNTIME) // RUNTIME 反射机制读取注解
public @interface AnnotationDIY1 {
    String value();  // 只有一个参数的话,一般定义为 value 
}

// 使用注解 AnnotationDIYDemo.java
public class AnnotationDIYDemo {
    @AnnotationDIY(distance = 10000, hometown = "Chongqing", id = 23)   //为注解中的参数赋值
    public void goHome() {

    }

//    @AnnotationDIY1(value = "you")
    @AnnotationDIY1("you")   //不加value参数名也可以
    public void missYou() {

    }
}

参考文章:
http://blog.csdn.net/javazejian/article/details/71860633

相关文章

  • Android & Java 注解和自定义注解处理器

    写在前面:本文是实际工作中学习成果,记为笔记 目录 背景 什么是注解 注解实战:动态注解 注解实战:静态注解 注解...

  • Spring MVC的标签库(学习笔记)

      在《Spring MVC的常用注解(学习笔记)》中提到了使用@ModelAttribute注解,利用Model...

  • SpringBoot笔记(二)

    SpringBoot学习笔记(二) @ConfigurationProperties注解 作用:将applicat...

  • 学习注解(@)笔记

    1.@在Android中的作用?(1)和编译器一起给你一些提示警告信息。(2)快捷有效的编译Java代码,谷歌出的...

  • 注解学习笔记

    什么是注解注解分类注解作用分类 元注解 Java内置注解 自定义注解自定义注解实现及使用编译时注解注解处理器注解处...

  • 注解学习笔记

    元注解: 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们...

  • 注解学习笔记

    文章大部分内容转载于 尚学堂-高琪-java视频教程ppt。 Annotation的作用: 不是程序本身,可以对程...

  • 注解-学习笔记

    一、注解 从JDK 5 开始,Java 新增注解,注解是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取...

  • SpringMVC学习(一)

    SpringMVC 学习笔记 @RequestMapping @RequestMapping注解用于为控制器指定可...

  • 林轩田机器学习基石课程笔记2 - 知识点补充

    问题 详细笔记查看 林轩田机器学习基石课程笔记2 - 学习回答Yes/No当时看这个图和注解的时候,特别难理解。因...

网友评论

      本文标题:注解学习笔记

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