注解Annotation

注解的写法

@XXX[(一些信息)]

写在哪

类/属性/方法/构造方法上/参数的前面

注解的作用

用来当作注释的作用,如date类型中的那些过时的方法就是注解修饰导致的,如"@Deprecated"

做代码的检测,如方法重写实现时写在类上的,如"@Override"

携带一些信息

注解类的信息必须是基本数据类型/String类型信息/枚举类型/注解类型/数组类型,数组里只能是前四个的类型

java自带的注解

@Deprecated 说明方法时废弃的
@Override 做方法的检测是否被重写
@SuppressWarnings(“unused”) 变量定义后未被使用
@SuppressWarnings(“serial”) 实现implements Serializable接口时,告诉编译器不用检测了
@SuppressWarnings(“rawtypes”) 创建集合时没有泛型

自定义注解

通过@interface自定义注解类型

元注解(也是注解,不是用来使用的,而是用来说明注解)

@Targer 描述当前的这个注解可以放置在哪里
@Retention 描述当前这个注解存在什么作用域中
@Inherited 描述这个注解是否能被子类对象继承
@Document 描述这个注解是否能被文档所记录

在这里插入图片描述

注解的使用

先自定义一个注解类

//放在什么上面:属性/方法/构造方法
@Target({ElementType.FIELD,ElementType.METHOD,ElementType.CONSTRUCTOR})
//作用域
@Retention(RetentionPolicy.RUNTIME)
public @interface Anno {

	//不常用
	String name = "";
	
	//注解要求方法必须有返回值,只能是上面的五个类型
	String[] value()default "哈哈哈";
	
}

在类的属性/方法/构造方法添加注解

public class Atm {
	@Anno(value = {"张三","李四","王五"})
	private String nameString;
	
}

读取注解里的值

public static void main(String[] args) {
		try {
			//获得类
			Class clazz = Class.forName("atm.Atm");
			//获得属性
			Field field = clazz.getDeclaredField("nameString");
			//获得属性上的注解
			Annotation annotation = field.getAnnotation(Anno.class);
			//执行方法即可
//			Anno anno= (Anno)annotation;
//			String[] arr = anno.value();
//			for (String string : arr) {
//				System.out.println(string);
//			}
			
			Class class1 =  annotation.getClass();
			Method method = class1.getMethod("value");
			String[] arr = (String[])method.invoke(annotation);
			for (String string : arr) {
				System.out.println(string);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值