Java 注解

649 阅读3分钟

注解的介绍

提到注解,我们会不由的想到注释,其实注解和注释不是一个东西,注释的作用就是解释代码,方便理解和阅读,说白了就是给程序员看的。而注解则不是,注解的作用比较大,可以进行编译检查、生成doc文档或者进行代码分析。 java语言中的类、方法、变量等都可以被标注。java标注可以通过反射获取标注内容,在编译器生成类文件时,标注可以被嵌入到字节码中。虚拟机可以保存标注内容,在运行时可以获取到标注内容。

java 预定义中的注解

  • @Override: 重写或者实现父类或者接口中的方法时,会出现这个注解,强制格式检查
  • @Deprecated 标注当前方法已经过时。
  • @SuppressWarnings(“all”) 压制警告

java 中自定义注解

格式

//  MyAnnotation1 自定义注解名,注意@
public @interface MyAnnotation1 {}

我们可以通过反编译看一下如何实现的

这就好像我们定义了一个接口,这个接口继承了java.lang.annotation.Annotation,既然是接口,我们也可以添加一些属性,比如说 int 类型的 id,String 类型的 name,除此之外还可以添加数组类型,枚举类型或者自定义的注解类型(注意有括号) 举个例子:

public @interface MyAnnotation2 {
	//default 默认值
	int id() default 1;
	
	String name();
	
	MyAnnotation1 annotation1();
	
	//枚举类型
	TypeEnum status();
	
	//String 类型的数组
	String[] hobbies();
}
//枚举类型TypeEnum
public enum TypeEnum{	
	A{1, “三杀了”},
	B(2, “四杀了,我的五杀,五杀!!”),
	C(3, "XXX已被终结,垃圾游戏,ALT + F4");
	private int status;
	private String msg;
	TypeEnum(int status, String msg) {
		this.status = status;
		this.msg = msg; 
	}
	//省略getter setter方法
}

定义完成之后,在使用的时候需要注意以下几点:

1.有属性的,在使用时应对属性进行赋值。

2.有默认值的(default)的可以赋值也可以不赋值,不进行赋值操作就是默认值

3.有且只有一个value(无论数据类型是什么)属性,或者除了value属性之外的其他属性都有默认值,那么在赋值的时候不需要 ‘属性 = 值’,直接可以给定数值。

4.一个方法可以有多个注解。

元注解

给予注解的解释,就是用来约束注解的。

  • @Retention 说明这个注解的生命周期到哪,有三个取值

RetentionPolicy.SOURCE : 只在源码阶段保留,不参与代码的运行和解析,不保留在class文件里

RetentionPolicy.CLASS : 保留到编译进行的时候,不会被加载到虚拟机里

RetentionPolicy.RUNTIME : 可以加载到虚拟机里,参与代码执行,在程序运行的时候可以获取他们

  • @Documented

将注解的元素可以包含到javadoc文档中

  • @Target 标记这个注解是那种 java 成员,是方法,是类,还是属性等

ElementType.TYPE 当前注解可以用于类、接口声明

ElementType.METHOD 用于方法的声明位置

ElementType.FIELD 用于成员变量的声明位置

  • @Inherited 标记这个注解是继承于哪个这注解类,就是说如果一个被@Inherited 修饰注解注解在一个父类上,那么他的子类也会有这个被@Inherited修饰的注解

最后

上面都是自己整理好的!我就把资料贡献出来给有需要的人!顺便求一波关注。学习我们是认真的,拿大厂offer是势在必得的。想了解点击一下java交流群哦

[java交流群](想了解更多点一下哦)

原文作者:0菜鸡小白0 原文链接:blog.csdn.net/weixin_4393…