注解概述
1.注解,或者又叫做注释,英文单词是annotation
2.注解Annotation是一种引用数据类型,编译之后也是生成xxx.class文件
3.如何自定义注解呢?语法格式?
[修饰符列表] @interface 注解类型名{
}
4.注解怎么用,用在什么地方?
第一:注解使用时的语法格式是:
@注解类型名
第二:注解可以出现在类上,属性上,方法上,变量上等...
注解还可以出现在注解类型上
总而言之,万物皆可被注解!
5.注解里的属性
1.定义
String name();
2.在使用注解时,如果注解有属性,那么必须赋值,除非该属性有默认值
@MyAnnotation(name="sad");
3.给属性添加默认值
String name() default "asd";
4.value属性
如果一个注解有且只有一个属性叫value,那么这个注解在使用时,value属性名可以不写
@MyAnnotation("hahah")
5.属性的类型
属性的类型可以是:
byte short int long float double boolean char String Class 枚举类型
以及以上每种数据类型的数组形式
当属性的类型是一个数组时
@MyAnnotation(session={"assd","asd","asdasd"})
@MyAnnotation(session=“as”)//数组只有一个属性,大括号可以省略不写
jdk中注解
Deprecated
1.Deprecated这个注解类和方法都能注解
2.Deprecated这个注解是给程序员看的,给程序员提供一个信息。
3.他是一个标识性注解,是给编译器做参考的
4.凡是java中的类或方法被这个注解标注,他们出现的时候中间就会有个横线,表示这个类或方法已经过时,不建议使用。
Override
1.Override这个注解只能注解方法
2.Override这个注解是给编译器做参考的,和运行没有关系
3.他是一个标识性注解,是给编译器做参考的
4.凡是java中的方法带有这个注解的,编译器都会进行编译检查,如果这个方法不是重写父类的方法,
编译器就会报错。
SuppressWarnings
1.指示应该在注释元素(以及包含在盖住适中的所有程序元素)中取消显示指定的编译器警告
元注解
概念
1.元注解是注解注解的注解 ,它是用来标注注解的
常见的元注解
1.Target
这是一个元注解,用来标注"注解类型"的"注解"
这个Target注解用来标注"被标注的注解"可以出现在哪些位置上
@Target(ElementType.METHOD):表示"被标注的注解"只能出现在方法上
2.Retention
这是一个元注解,用来标注"注 解类型"的"注解"
这个Retention注解用来标注"被标注的注解"最终保存在哪里
@Target(RetentionPolicy.SOURCE):表示"被标注的注解"最终值被保存在java源文件中
@Target(RetentionPolicy.CLASS):表示"被标注的注解"最终值被保存在class文件中
@Target(RetentionPolicy.RUNTIME):表示"被标注的注解"最终值被保存在class文件中,并且可以被反射机制查到。
通过反射来获取注解(此注解的Retention注解的value必须是RetentionPolicy.RUNTIME)
获取类的注解
//1.获取类的Class对象
Class c = Class.forName("com.bjpowernode.test.AnnotationTest");
if(c.isAnnotationPresent(MyAnnotation.class)){//判断该类是否有这个注解
//2.有这个对象,获取这个对象的这个注解
MyAnnotation annotation = (MyAnnotation) c.getAnnotation(MyAnnotation.class);
//3.获取注解中的内容
String address = annotation.address();
//4.输出
System.out.println(address);
}else{
System.out.println("没找到");
}