初学注解
什么是注解
**Java 注解(Annotation)**用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。
常见的注解:@Override 重写,@SuppressWarnings 镇压警告,@Target 表示我们的注解可以在那些地方,value值指定范围
元注解
元注解作用:元注解的作用就是负责注解其他注解, 还可以用来规范代码等,也更便于阅读。
下面来看看注解的类型
◆其实注解类型都可以在它们所支持的类在java.lang annotation包中可以找到.( @Target , @Retention,@Documented , @Inherited )
➢@Target: 用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
➢@Retention :表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE< CLASS < RUNTIME)
➢@Document:说明该注解将被包含在javadoc中
➢@Inherited: 说明子类可以继承父类中的该注解
注解怎么用?
第一步:先定义一个自定义注解
@interface MyAnno{
}
第二步:再写一个类用来测试注解
/**注解
* @author Asus
*#元注解#
*/
//测试元注解
@MyAnno
public class Personal_01 {
@MyAnno
// @Override
public void hehe() {
/**
* @SuppressWarnings 镇压警告
*/
@SuppressWarnings("unused")
String d;
}
@MyAnno
public void th() {
}
}
第三步:现在就可以写你想测试的注解啦
/**
*自定义注解
*@Target 表示我们的注解可以在那些地方,value值指定范围
*ElementType.METHOD:只能对方法进行注解,只在方法上有效 TYPE是可以对类进行注解
*/
@Target(value = {ElementType.METHOD,ElementType.TYPE})
/**
* @Retention表示我们的注解在什么地方还有效
* runtime>class>sources
*/
@Retention(value = RetentionPolicy.RUNTIME)
/**
* @Documented 表示是否将我们的注解生成在JAVAdoc中
*/
@Documented
/**
* @Inherited 子类可以继承父类的注解
*/
@Inherited
@interface MyAnno{
}
@Target 表示我们的注解可以在那些地方,value值指定范围
下面是源码:(进入方法:ctrl+鼠标左键)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
/**
* Returns an array of the kinds of elements an annotation type
* can be applied to.
* @return an array of the kinds of elements an annotation type
* can be applied to
*/
ElementType[] value();
}
其中ElementType[] value();的值可以规定你可以在哪里进行注解;
ElementType[]源码:
public enum ElementType {
/** Class, interface (including annotation type), or enum declaration */
TYPE,
/** Field declaration (includes enum constants) */
FIELD,
/** Method declaration */
METHOD,
/** Formal parameter declaration */
PARAMETER,
/** Constructor declaration */
CONSTRUCTOR,
/** Local variable declaration */
LOCAL_VARIABLE,
/** Annotation type declaration */
ANNOTATION_TYPE,
/** Package declaration */
PACKAGE,
/**
* Type parameter declaration
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* Use of a type
*
* @since 1.8
*/
TYPE_USE
}
上面翻译大概是:
ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
ElementType.CONSTRUCTOR 可以给构造方法进行注解
ElementType.FIELD 可以给属性进行注解
ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
ElementType.METHOD 可以给方法进行注解
ElementType.PACKAGE 可以给一个包进行注解
ElementType.PARAMETER 可以给一个方法内的参数进行注解
ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举
例:
@Target(value = {ElementType.METHOD,ElementType.TYPE})
比如这个value的值就只能在类、接口等和方法上使用
总结
学好注解是作为一个优秀程序员的必备技能,我认为在学到一定程度后就可以依靠注解来理解Java源代码,这样在了解底层时会有很多帮助,所以大家多多加油
最后:由于我是初学,很多时候都是借鉴别人的理解,所以Java之路长之又长,继续努力