Java注解Annotation简介

注解定义和使用

注解定义为:

public @interface AnnotationName{
}

使用注解

@ AnnotationName
public void func(){
}

Java提供了4个元注解

@Retention:保留的阶段。
@Target:注解修饰的目标,可以说类,方法,成员变量,包。
@Documented:是否被javadoc提取成文的。
@Inherited:注解是否能继承。

自定义注解

注解的成员变量定义:

public @interface AnnotationName{
    String name() default "abc";
    int age() default 33;
    boolean flag();
}

其中default修饰的表示默认值。

  • 注意:Annotation修饰类,方法,成员变量后不会自己生效,不会对程序有任何影响。只有为这些注解提供处理的工具类才会有用。

实例

定义注解类

import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Testable {
    boolean isSkiped() default false;
    String name();
}

被注解修饰的类

public class Foo {
    public static void m1() {
        System.out.println("I am m1");
    }
    @Testable(isSkiped = false, name = "methond2")
    public static void m2() {
        System.out.println("I am m2");
    }
    @Testable(name = "methond3")
    public static void m3() {
        System.out.println("I am m3");
    }
    @Testable(isSkiped = true, name = "methond4")
    public static void m4() {
        System.out.println("I am m4");
    }
}

处理注解的工具类

import java.lang.reflect.*;
public class TestAnnotation {
    public static void main(String[] args) throws SecurityException,
            ClassNotFoundException, IllegalAccessException,
            IllegalArgumentException, InvocationTargetException {
        for (Method m : Class.forName("Foo").getMethods()) {
            if (m.isAnnotationPresent(Testable.class)) {
                System.out.print(m.getName()
                        + " is Annotation element, so invoke result is: ");
                m.invoke(null);
            } else {
                System.out.println(m.getName() + " is not Annotation element");
            }
        }
    }
}

输出:

m1 is not Annotation element
m2 is Annotation element, so invoke result is: I am m2
m3 is Annotation element, so invoke result is: I am m3
m4 is Annotation element, so invoke result is: I am m4
wait is not Annotation element
wait is not Annotation element
wait is not Annotation element
equals is not Annotation element
toString is not Annotation element
hashCode is not Annotation element
getClass is not Annotation element
notify is not Annotation element
notifyAll is not Annotation element
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值