1.注解又称注释,annotation,是一种引用数据类型,编译生成class文件。
2.语法格式:[修饰符列表] @interface 注解类型名 {}
3使用方式: @注解类型名,
4.使用地方:出现在类、方法、变量和注解上等
5.jdk中,主要内置了哪些注解?
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
public enum RetentionPolicy {SOURCE, CLASS,RUNTIME}
public enum ElementType {
TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE, PACKAGE
}
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Deprecated {
}
标识性注解:给编译器做参考,编译器看到方法上有注解时编译器会自动检查该方法,是否重写了父类的方法。只在编译阶段起作用和运行期无关。
"Target标注"注解类型的注解。
Retention标注"被标注的注解"保存在哪里,RententionPolicy. SOURCE保留在Java源文件中,CLASS保留在class文件中,RUNTIME保留在class文件中前可被反射调用。
Retention标注元素已过时,在运行时会出现警告。
修饰注解的注解叫元注解
给注解中定义属性必须赋值指定属性的值,当属性中只有一个value时候可以省略value。
@MyAnnotation(value="hehe")
String value() default "123"
注解当中的属性类型,有byte,short,int,long,float,double,char,String及枚举类型及其数组。
6.@Id这个注解只能出现在类上面,当这个类上有这个注解的时候,要求这个类中必须有一个int类型的id属性。如果没有这个属性就报异常。如果有这个属性则正常执行!
package annotation;
package date;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
//获取类
//User.class.getName();//获取类名,之前下边一直报错,我还以为完整类名有错,原来是没有加“”
try {
Class userClass = Class.forName("annotation.User");
//判断类上存在Id注解
if(userClass.isAnnotationPresent(Id.class)){
//判断存在int类型地id属性
//获取类的属性
Field[] fields = userClass.getDeclaredFields();
boolean isOk = false;
for(Field field : fields){
if("id".equals(field.getName())&&"int".equals(field.getType().getSimpleName()))
isOk = true;
//表示合法
break;
}
System.out.println(isOk);
}else{
throw new IsNotIdException();
}
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch(IsNotIdException e){
e.printStackTrace();
}
}
}
@Target(ElementType.TYPE)//表示这个类只能出现在类上面
@Retention(RetentionPolicy.RUNTIME)//该注解可以被反射机制读取到
@interface Id {
}
//@Id
class User {
//int id;
String name;
String password;
}
class IsNotIdException extends RuntimeException {
public IsNotIdException(){}
public IsNotIdException(String s){
super(s);
}
}