注解和使用

注解

概念

注释:用文字描述,给程序员看的
注解概念:代码级别的说明(元数据),说明程序的,给计算机看的。

作用:
  1. 编译检查:
    @Override:告诉计算机,这个方法是重写的父类的方法,如果父类中没有这个方法就会报错,所以注解在此起到了编译检查的作用。
  2. 编写文档:生成java文档时,会抽取对应注解的内容
    @author 标识用户
    @version 标识版本
    @since 标识时间
    @param 标识参数
  3. 代码分析:通过标识的注解,对代码进行分析和处理(我们常用)
JDK预定义注解

@Override 标注的犯法是否继承自父类/接口
@Deprecated 注释对内容过时,不建议使用
@SuppressWarnings 压制警告(多会加在类上)

自定义注解

1、格式

//元注解
public @interface 注解名称{
	//属性列表:就是抽象方法列表
}

注解的本质就是一个接口,所有注解都继承Annotation父接口

//注解反编译得到的内容
public interface 注解名称 extends Annotation{
}

即然注解本质是一个接口,所以注解就可以定义常量(被static修饰的方法)和抽象方法(没有方法体的方法)

2、属性:注解中定义的抽象方法,返回值必须是以下几种类型

  1. 基本数据类型
  2. 字符串String
  3. 注解类型
  4. 枚举类型
  5. 以上类型的数组

3、使用

//定义注解
public @interface MyAnno{
	String name();
	int age() default 20;
	//注解
	MyAnno2 anno();
	//枚举
	PersonEnum person();
	//数组
	String[] arr();
}
public @interface MyAnno2{
}
public enum PersonEnum{
	P1,P2;
}
//使用注解:直接给抽象方法名命名,多个方法名使用逗号分隔,有default的属性则可以不用付值,单个属性则可以直接赋值不用
public class User{
	@MyAnno(name="aa",age=10,anno=@MyAnno2,person=PersonEnum.P1,arr={"a","b"})
	public void method(){
	}
}
  1. 定义的属性有default默认初始值,可以不赋值而自动使用默认值
  2. 如果只有一个属性,而且属性的名称是value,则可省略value直接赋值
  3. 数组赋值的时候,值使用{}包裹,如果数组中只有一个值,可以省略{}
元注解

什么是元注解:就是自定义注解上的注解

1、JDK提供的四个元注解

  1. @Target 当前注解可以作用(放在)的位置
    ElementType.TYPE:作用在类上
    ElementType.METHOD:作用在方法上
    ElementType.FIELD:作用在成员变量上
  2. @Retention:当前注解被保留的阶段
    SOURCE<CLASS<RUNTIME
    SOURCE:只在代码阶段有效
    CLASS:保留到字节码阶段
    RUNTIME:运行阶段有效
  3. @Documented:注解是否被抽取到doc的api文档中
  4. @inherited:使用该注解的类的子类也会有该注解

2、自定义注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值