黑马程序员技术交流社区
标题:
总结
[打印本页]
作者:
蓝色土耳其
时间:
2019-5-19 10:16
标题:
总结
本帖最后由 蓝色土耳其 于 2019-5-19 10:31 编辑
注解
1.注解概念
注解就是用于说明程序的。参与程序的运行
JDK1.5版本之后的新特性
2.注解的作用
编写文档(API帮助文档)
编译检查(@Override @FunctionalInterface)
代码分析(配合反射使用)【
重点
】
3.常用的注解
@Override 用于检测方法是否是重写的
@Deprecated 用于标识某个方法是否已过时
@SuppressWarnings 用于压制警告
@FunctionalInterface 用于检测接口是否是一个函数式接口
@Before 在功能方法之前被执行
@Test 执行功能方法
@After 在功能方法之后被执行
4.自定义注解
格式
public @interface 注解名称{
本质
注解本质就是一个接口!所有的注解都实现了Annotation接口
注解中的属性
属性(方法)的返回值数据类型
基本数据类型四类八种
String
枚举
注解
以上数据类型的数组
注意事项
可以使用default给属性设置一个默认初始化值
如果属性名叫value,而且只有一个属性时,那么赋值时,属性名可以省略
数组进行赋值时,需要使用{}。如果数组中只有一个值,{}可以省略
元注解
@Target(ElementType)
TYPE 用于类上面
METHOD 用于方法上面
FIELD 用于变量上面
@Retention(RetentionPolicy)
SOURCE 源代码阶段
CLASS 字节码阶段
RUNTIME 运行时阶段
@Documented 可以被抽取到帮助文档中
@Inherited 可以被子类继承
5.解析注解
狗类
public class Dog {
public void eat() {
System.out.println("狗吃肉");
}
}
猫类
public class Cat {
public void eat() {
System.out.println("猫吃鱼");
}
}
注解
@Target(value = {ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface AnimalAnnotation {
String className(); // 记录 全类名
String methodName(); // 记录 方法名
}
测试类
@AnimalAnnotation(className = "com.itheima01.Cat",methodName = "eat")
public class Test06 {
public static void main(String[] args) throws Exception{
//获取注解中的属性值
//1.获取Test06类的Class对象
Class<Test06> cls = Test06.class;
//2.通过Class对象来获取注解对象
AnimalAnnotation animal = cls.getAnnotation(AnimalAnnotation.class);
//3.通过注解对象调用属性。来获取属性值
String className = animal.className();
String methodName = animal.methodName();
//通过反射来调用方法
//1.获取Class对象
Class cls2 = Class.forName(className);
//2.获取方法
Method method = cls2.getMethod(methodName);
//3.执行方法
method.invoke(cls2.newInstance());
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2