注解学习笔记

2016-02-27  本文已影响115人  Twinkle_______

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

Annotation的作用:

Annotation在哪里使用:

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

看@Override的源码:

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

自定义注解

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

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

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

元注解:

@Target
@Retention
@Documented
@Inherited

@Target :
所修饰范围 取值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

上一篇 下一篇

猜你喜欢

热点阅读