关于注解Annotation的创建和使用

注解是什么?
Annotion可用于类、构造方法、成员变量、方法、参数等声明中。该功能不影响程序的运行但是会对编译器警告等产生影响。
注释VS注解
注释是给以后的程序员或者自己看的,为了更好的表达程序的内容
注解是一种配置,信息和程序分离,从而通过修改注解信息来改变程序的流程
在JDK1.5以后,在系统中提供了三个Annotation:
@Override:表示当前方法为覆盖超类中的方法
@Deprecated:表示的是一个类或者方法不再建议继续使用了
@SuppressWarnings:表示关闭不当的编译警告

SuppressWarnings("serial")
public class Main extends JFrame{
    public static void main(String[] args) {
        Animal a=Animal.DOG;
        Animal b=Animal.CAT;
        a.getName();
        abc();
    }
    @Deprecated
    private static void abc(){

    }
}

注解应用注意三个步骤
1)编写注解
2)在类上应用注解
3)对应用了注解的这个类进行反射操作的类

定义Annotation

public @interface MyAnnotation {
    String name();
    int age();
}

定义Annotation可以带上默认值

public @interface MyAnnotation {
    String name() default "xiaoming";
    int age() default 30;
}

还可以在注解当中设置数值

public @interface MyAnnotation {
    String name() ;
    int age() ;
}
public class Main {
    @MyAnnotation(age = 15, name = "xiaoming")
    public static void main(String[] args) {

    }
}

利用枚举限定注解的范围

public enum Color {
    RED,BULE,GREEN;
}
public @interface MyAnnotation {
    public Color color();
}
public class Main {
    @MyAnnotation(color = Color.RED)
    public static void main(String[] args) {

    }
}

范围 描述
通过@Retetion限定注解的生命周期
public sttic final RetentionPolicy SOURCE 在java源程序中存在
public sttic final RetentionPolicy CLASS 在jva生成的class文件中存在
public sttic final RetentionPolicy RUNTIME 在java运行时候存在

@Retention(value=RetentionPolicy RUNTIME)
public @interface MyAnnotation{
    public String name();
}

通过@Target设置Annotation类型适用的程序元素种类,如果没有设置@Target,则表示适用于所有程序元素。枚举类ElementType中的枚举常量用来设置@Target。
public static final ElementType Type 只能在类或者接口或者枚举上使用
public static final ElementType FIELD 在成员变量上使用
public static final ElementType METHOD 在方法中使用
public static final ElementType PARAMETER 在参数中使用
public static final ElementType CONSTRUCTOR 在构造方法中使用
public static final ElementType LOCAL_VARIABLE 局部变量中使用
public static final ElementType ANNOTATION_TYPE 只能在Annotation中使用
public static final ElementType PACKAGE 只能在包中使用

通过@Inherited表示一个Annotation是否允许被子类继承下来

@Inherited
@Target(value=ElementType.TYPE)
@Retention(value=RetentionPolicy.RUNTIME)
public @interface MyAnnotation{
    public String name();
}

一个Annotation真正起作用,必须结合反射机制,在反射中提供了以下的操作方法:
isAnnotationPresent(Class

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值