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的