2020-10-29

注解

元注解@Retention

指定注解保留时间。如果@Retention不存在,保留策略默认为RetentionPolicy.CLASS

RetentionPolicy.SOURCE注解被编绎器丢弃
RetentionPolicy.CLASS注解被编绎器记录到class文件中,但不在运行时虚拟机中保留
RetentionPolicy.RUNTIME注解被编绎器记录到class文件中和在运行时虚拟机中保留,所以可以通过反射获取

@Target

指定注解可应用的上下文。如果@Target不存在,可用于所有类型

ElementType.TYPE				类、接口、注解、枚举声明
ElementType.FIELD				成员变量声明、枚举常量
ElementType.CONSTRUCTOR			构造方法声明
ElementType.METHOD				方法声明
ElementType.PARAMETER			形参声明
ElementType.LOCAL_VARIABLE		局部变量声明
ElementType.ANNOTATION_TYPE		注解声明
ElementType.PACKAGE				包声明
ElementType.TYPE_PARAMETER		类型参数声明

@Inherited

指定注解被自动继承。如果@Inherited存在,当用户去查找注解且本类声明无此注解,会去寻找父类的注解,重复此过程直至找到或到达类层级的顶部;如果仍找不到,说明无此注解。注解应用在类上时,@Inherited才有效

@Documented

指定注解的使用被javadoc记录到文档中。注意注解本身肯定在文档中

/**
 * 注解会自动实现Annotation接口,但显性实现Annotation接口不是定义一个注解
 * 注解不能定义任何方法
 *
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
@Documented	
public @interface FirstAnnotation {
	// 定义属性。如果没有指定默认值,使用时就必须指定该属性值
	String value() default "helloworld";
	
	String NAME = "zhansan";// 定义成员变量,默认也只能是public static final
}

使用注解

如果只给value属性赋值,属性名可以省略注解中如果属性是数组类型,赋单个值时会自动转成数组。如String[],直接赋字符串会自动转成字符串数组
可以用多个注解修饰同一个成分,文档注释放在注解的上面

public static void main(String[] args) throws Exception {
	Class<Person> personClass = Person.class;
	FirstAnnotation firstAnnotation = personClass.getAnnotation(FirstAnnotation.class);
	System.out.println(firstAnnotation.value());//helloworld
	System.out.println(FirstAnnotation.NAME);//zhansan
}

常用注解

@Override			确保方法是重写方法。如果方法不是重写方法,会报错

@SuppressWarnings  	压制警告
all				压制所有警告
deprecation		压制反对使用警告
rawtypes		压制泛型警告
unchecked		压制未检查警告
unused			压制未使用警告

@Deprecated			表示方法不建议被使用
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值