简单注解学习

简单注解学习

问题

  1. 注解应该怎么写?
  2. 注解怎么运行?

注解开发

基本形式

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Demo {
    String name();
    String description() default "这是默认描述";
}
  1. 用@interface 定义注解
  2. 注解也相当于是接口,所以里面要写方法也是注解的属性
  3. 可以看到定义的注解上还有两个注解

深入认识注解

java 内置了3种标准注解(@Override, @Deprcated, @SuppressWarning) 和4种元注解(@Target @Retention @Documented @Inherited

元注解:
@TargetCONSTRUCTOR:构造器的声明
(表示注解用在什么地方,El ementedType参数如右)FIELD:域的声明(类中的参数,包括实例)
LOCAL_VARIABLE:局部变量声明
METHOD:方法声明
PACKAGE:包声明
PARAMETER:参数声明
TYPE:类、接口(包括注解)或enmu声明
@RetentionSOURCE:注解被编译器丢弃
(表示在什么级别保存注解,RetentionPolicy参数如右)CALSS:注解在class文件中可用,但会被jvm丢弃
RUNTIME:jvm在运行时期也会保留,因此可以通过放射机制读取注解的信息
@Documented将此注解包含在Javadoc中
@Inherited允许子类继承父类中的注解

让注解运行起来

public class DemoTest {
    @Demo(name = "lgd")
    public  void method1(){
        System.out.println("这是方法1");
    }
    @Demo(name = "shadow", description = "你好,我是shadow")
    public void method2(){
        System.out.println("这是方法2");
    }
    public void method3(){
        System.out.println("这是方法3");
    }
}
public class DemoMain {
    public static void main(String[] args) {
        DemoTest demoTest = new DemoTest();
        Class c = demoTest.getClass();
        Method [] methods = c.getDeclaredMethods();
        for (Method method: methods) {
            System.out.println("类中的方法:"+method.getName());
            if (method.isAnnotationPresent(Demo.class)){
                Demo d =   method.getAnnotation(Demo.class);
                System.out.println("添加了注解的方法:"+method.getName()+"  注解参数:  name-"+d.name()+"  decription-"+d.description());
            }
        }
    }
}
类中的方法:method2
添加了注解的方法:method2  注解参数:  name-shadow  decription-你好,我是shadow
类中的方法:method3
类中的方法:method1
添加了注解的方法:method1  注解参数:  name-lgd  decription-这是默认描述

这样注解就被运行起来了

注解可用类型

注解中方法返回类型或者说属性类型的可用类型:

  1. String
  2. Class
  3. enum
  4. Annotation
  5. 以上类型的数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值