注解
注释:单行、多行、文本
注释是给程序员看的,
注解是给程序用的,程序运行期间可以去读取到注解中的内容。
内置注解:
java提供的,只管用就可以了。
@Override @Overload
@Deprecated:用于标记当前方法已过时
@SuppressWarnings(“all”):用于压制警告 一般该注解会提供参数:all,表示压制所有警告。
元注解:
用于标记其他注解的注解。
@Documented
@Target:用于表明被注解的注解能够出现的位置。(在哪生效)
@Retention:用于表明被注解的注解能够出现的时期 (针对的对象)
@Inherited: 用于表明被注解的注解去注解了某个类时,该类的子类能够继承被注解的注解
自定义注解
使用元注解来标记某个注解
@Target:用于表明被注解的注解能够出现的位置。()
@Retention:用于表明被注解的注解能够出现的时期
创建自定义注解,使用元注解来指定注解出现的位置,指定注解可以生效的时期…
package com.woniuxy.annotaiton;
import java.lang.annotation.*;
/**
* 使用元注解来标记自定义注解能够出现的位置,能够出现的时期,是否能够被继承,生成doc文档时能够看到注解
*/
//@Documented
@Target({
ElementType.TYPE,ElementType.METHOD})//表明注解能够出现的位置,常用值:TYPE(类上),METHOD(方法上),FIELD(成员变量上),PARAMETER(方法形参上)
@Retention(RetentionPolicy.RUNTIME)//SOURCE(源码),CLASS(字节码),RUNTIME(运行期)
//@Inherited
public @interface MyAnnotation {
/**
* 声明注解要附带的值语法
*
* 类型 属性名();
*
* 类型:8大基本数据类型 String enum(枚举);
*
* 如果需要指定默认值,则应通过default 关键字来实现
*
* 值的个数:要么单个 要么使用数组
*
*
* @return
*/
int[] value() default 5;
String name();
}
使用自定义注解
@MyAnnotation(name = "tom",value = 10)
public class User {
private String username;
@MyAnnotation(name = "jack",value = 50)
public void speak(){
System.out.println(111);
}
}
读取注解的内容
package com.woniuxy.test;
import com.woniuxy.annotaiton.MyAnnotation;
import com.woniuxy.model.User;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) throws NoSuchMethodException {
Class<User> clazz = User.class;
if (clazz.isAnnotationPresent(MyAnnotation.class)) {
//判断User类上是否有MyAnnotation注解
MyAnnotation annotation = clazz.getAnnotation(MyAnnotation.class);
System.out.println(annotation.name());
int[] values = annotation.value();
for (int value : values) {
System.out.println(value)