您的位置:首页 > 编程语言 > Java开发

Java基础 注解 学习笔记

2016-09-22 11:17 281 查看
注:本文主要记录自学习视频 《兄弟连_马剑威_JAVA基础_372_注解》 

1、认识Annotation

2、系统定义的三个Annotation

3、自定义Annotation

4、Retention和RetentionPolicy

5、反射与Annotation

6、@Documented 注解

7、@Target 注解

8、@Inherited 注解

1、认识Annotation

从JDK1.5开始,Java增加了对元数据(即类的组成单元数据)的支持,也就是注解(Annotation),它是代码里做的特殊标记,这些标记可以在编译、类加载,运行时在不改变原有逻辑的情况下,被读取,并执行相应的处理,通过使用Annotation,程序员可以在源文件中嵌入一些补充的信息。代码分析工具,开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。Annotation类似于修饰符一样被使用,可以用于包,类,构造方法,方法,成员变量,参数,局部变量的声明。
注意:Annotation 是一个接口
java.lang.Annotation 接口
2、系统定义的三个Annotation

JDK1.5后,在系统中提供了三个Annotation,分别是:@Override、@Deprecated、@SuppressWarnings
@Override
表示当前的方法定义将覆盖超类中的方法。如果不小心拼写错误,或者方法签名对不上覆盖的方法,编译器就会发出错误提示
@Deprecated
表示一个类或者方法已经不再建议继续使用了,标记为已过时
@SuppressWarnings
表示关闭不当的编译器警告信息
eg:
public class User {
private String name ;

@Deprecated
public void setName(String name) {
this.name = name;
}
}
public class AnnotationDemo {

@SuppressWarnings("deprecation")
public static void main(String []args){
User user=new User();
user.setName("haha");
}
}
在IDE中可以看到由于在User中setName方法添加了 @Deprecated标注,所以在Annotation的 main方法中使用时该方法被划了横线,并且报警告(如果不在main方法头添加 @SuppressWarnings(“deprecation”) 标注)。添加上 @SuppressWarnings 标注后该警告会消失

3、自定义Annotation
注解应用需要三个步骤:

编写注解
在类上应用注解
对应用了注解的类进行反射操作的类
自定义Annotation语法:

访问控制权限 @interface Annotation名称{}
eg:
public @interface MyAnnotation{}

在Annotation中定义变量
public @Interface MyAnnotation{
public String name();
public String info();
}


定义变量后,在调用此Annotation时必须设置变量值。
@MyAnnotation(name="XB",INFO="WSDR")
public class Demo{
}


通过default指定变量默认值
有了默认值在使用时可以不设值

public @interface MyAnnotation{
public String name() default "XB";
public String info() default "WSDR";
}


定义一个变量的数组,接收一组参数
public @interface MyAnnotation{
public String[] name;
}


使用时指定数组值
@MyAnnation(name={"XB","XH"})
public class Demo{
}


使用枚举限制变量取值范围
public enum Color{
RED,GREEN,BLUED
}
public @interface MyAnnotation{
public Color color();
}


4、Retention和RetentionPolicy

Annotation要想决定其作用的范围,通过@Retention指定,而Retention指定的范围由RetentionPolicy决定,RetentionPolicy指定了三种范围:



像override Deprecated 都属于Source类型

示例:
@Retention(value=RetentionPolicy.RUNTIME)
public @interface MyAnnation{
public String name();
}


Retention是用来描述注解的注解,又称为元注解

5、反射与Annotation

一个Annation真正起作用,必须结合反射机制,在反射中提供了以下的操作方法:
java.lang.reflect.AccessibleObject



实例:
Class<?> cls =Class.forName("com.vince.annotation.Test");
Method met=cls.getMethod("setName");//找到toString方法
if(met.isAnnotationPresent(MyAnnotation.class)){
MyAnnotation my =(MyAnnotation)met.getAnnotation(MyAnnotation.class);
String name=my.name();
String info=my.info();
System.out.println("name="+name);
System.out.println("info="+info);
}


6、@Documented注解
此注解表示的是文档化,可以在生成doc文档的时候添加注解
@Documented
@Retention(value=RetentionPolicy.RUNTIME)
public @interface MyAnnotation{
public String name();
public String info();
}
可以添加一些DOC注释 

7、@Target注解
@Target注解表示的是一个Annotation的使用范围,例如:默认之前定义的MyAnnotation可以在任意位置上使用



8、 Inherited注解
@Inherited表示一个Annotation是否允许被其子类继承下来
eg:
@Inherited
@Target(ElementType.Type)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation{
public String name();
public String info();
}
使用时允许被其子类继承
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 注解