Java中对@Rentention注解、@Target注解和自定义注解的理解与应用

1. 什么是注解

注解Annotation是一种引用数据类型,编译之后也是生成.class类型的java文件。

2. 注解怎么使用

注解定义的语法格式为:修饰符 @interface 注解类型名;
注解可以出现在类上、方法上、属性上、甚至注解上等…

3. JDK中内置了哪些注解

@Deprecated:该注解注解的类或方法,表示该类或方法已经过时,不建议使用该类或方法了。
@Override:表示一个类中的方法是继承的父类或者实现的类中的方法的重写。
@SuppressWarnings:使用该注解,可以忽略编译器的警告。

4. 什么是元注解

元注解就是用来标记注解的;
常见的元注解有@Target、@Retention。

5.注解的具体使用

需求:自定义一个注解,该注解只能用在类上,并且该注解作用的类必须有一个int类型的id属性,如果没有的话就抛出异常!

/**
自定义注解类
*/
@Retention(RUNTIME)
@Target(TYPE)
public @interface Id {}
/**
@Id注解引用的类
*/
@Id
public class People {
	private int id;
	private String username;
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
/**
测试类
*/
public class Test {
	public static void main (String[] args) {
		try {
			Class<?> c = Class.forName("test.People");
			// 判断User类上是否存在Id注解
			if (c.isAnnotationPresent(Id.class)) {
				// 如果User类上存在Id注解的话就获取它的所有属性
				Field[] fields = c.getDeclaredFields();
				boolean isInt = false;
				for (Field field : fields) {
					// 如果存在属性名字是id并且属性类型名字是int类型,isInt属性就为true
					if ("id".equals(field.getName()) && "int".equals(field.getType().getSimpleName())) {
						isInt = true;
						System.out.println("类上存在@Id注解,且类存在属性名字是id并且属性类型是int的");
						break;
					}
				}
				// 如果不存在属性名字是id并且属性类型名字是int类型的话,输出一个异常
				if (!isInt) {
					throw new PropertyException("类上若存在@Id注解的话,必须存在属性名字是id并且属性类型名字是int类型");
				}
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}
/**
People类中不存在id属性并且id属性不为int名字是抛出一个异常
*/
public class PropertyException extends RuntimeException {
	private static final long serialVersionUID = -3692944350616143050L;

	public PropertyException () {}
	
	public PropertyException (String msg) {
		super(msg);
	}
}
输出结果为:类上存在@Id注解,且类存在属性名字是id并且属性类型是int的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值