自定义注解-笔记

目录

1、初步了解

2、基本内置注解

3、自定义注解

4、元注解

1.@Target注解:描述作用的位置

2.@Retention 注解

3.@Document注解

4.@Inherited 注解


1、初步了解

注解:说明程序的,给计算机看的

注释:用文字描述给程序员看的

定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

作用分类:

①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】(生成API文档的)

② 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】

③编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】

2、基本内置注解

@Override

它的作用是对覆盖超类中方法的方法进行标记,如果被标记的方法并没有实际覆盖超类中的方法,则编译器会发出错误警告。

@Deprecated

标记方法过时了。

@SuppressWarnings("all")  压制警告class中有警告 加上这个注释就没了。

3、自定义注解

模仿jdk写一个

public @interface MyAnno {
}

测试:

public class Worker {
    private String name ;
    @MyAnno
    public void show (){
    }
}

可以使用但是没有作用。

将java文件编译成class,在反编译class得到

D:\work\IDEAworkspace\test\src\com\tungkong\anno>javac MyAnno.java

D:\work\IDEAworkspace\test\src\com\tungkong\anno>javap MyAnno.class
Compiled from "MyAnno.java"
public interface com.tungkong.anno.MyAnno extends java.lang.annotation.Annotation {
  public abstract java.lang.String value();
}

发现 就是继承了一个java.lang.annotation.Annotation;注解的本质就是接口。是接口的话就可以在里面写方法。随便写一个方法

public @interface MyAnno {
     String value() default "" ;
    int age();
    String name();
}

发现测试类Woker报错了,解决错误。

public class Worker {
    private String name ;
    @MyAnno(age = 1, name ="name1" )
    public void show (){
    }
}

得出结论:1、如果写了default 则表示设置默认值为" ",如果不写需要在使用注解的方法上写上值。2、注解类中的方法 就是show()注解的属性。

属性可以是1、基本数据类2、string类型3、枚举 4、数组 ,用{}表示

4、元注解

1.@Target注解:描述作用的位置

@Target(ElementType.TYPE) //作用在接口、类、枚举上
@Target(ElementType.FIELD) //作用在字段、枚举的常量上
@Target(ElementType.METHOD) //作用在方法上
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量

//作用在类上 方法上 成员变量上
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})
public @interface MyAnno {
    String value() default "" ;
    int age();
    String name();
}

@MyAnno(age = 1, name = "name1")
public class Worker {
    @MyAnno(age = 2, name ="2" )
    private String name ;
    @MyAnno(age = 1, name ="name1" )
    public void show (){
    }
}

2.@Retention 注解

用于描述注解的生命周期,表示需要在什么级别保存该注解,即保留的时间长短。

RetentionPolicy.SOURCE//注解仅存在于源码中,在class字节码文件中不包含
RetentionPolicy.CLASS // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
RetentionPolicy.RUNTIME // 注解会在class字节码文件中存在,在运行时可以通过反射获取到

自定义一般用@Retention(RetentionPolicy.RUNTIME)

3.@Document注解

 @Document 注解,说明该注解将被包含在javadoc中。它是一个标记注解,会添加API文档中

4.@Inherited 注解

     @Inherited 注解,用于表示某个被标注的类型是被继承的。如果父类被 @Inherited 注解修饰,说明子类可以继承父类中的该注解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值