反射
配置文件一般放在src包下
模拟框架
public class Person {
public void eat(){
System.out.println("人吃菜");
}
}
PZwenjian
className=com.itheima.Person
methodName=ea
public class D1 {
public static void main(String[] args) throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
Properties p = new Properties();
InputStream is= D1.class.getClassLoader().getResourceAsStream("PZwenjian");
p.load(is);
is.close();
String className = p.getProperty("className");
String methodName = p.getProperty("methodName");
Class c = Class.forName(className);
Constructor con = c.getConstructor();
Object o = con.newInstance();
Method m = c.getMethod(methodName);
m.invoke(o);
单元测试 三个注解
@before 功能方法之前执行
@test Assert.
@after 功能方法之后执行
注解
@override 检测方法是否继承自父类(接口)
@Deprecated 提示方法已过时
@SuppressWarnings 压制警告 一般传递参数"all"
@function 用于检测接口是否是函数式接口
自定义注解
属性 : 接口的抽象方法
1:返回值类型有下列
基本数据类型 String 枚举 注解 以上类型的注解
2:定义了属性,在需要时需要给属性赋值
1 如果赋值时 ,使用了default关键字给属性赋值,使用时可以不给属性赋值
2如果属性名叫value描述注解能够作用的位置 且只有一个属性 赋值时value可以省略
3数组赋值时需要{}
元注解:用于描述注解的注解
1@target :描述注解能够作用的位置
ElementType 取值
type 类上
method 方法上
file 变量上
2@Retention: 描述注解被保留的阶段
source
class
runtime 一般都是这个值
@Retention(@Retentionpolicy.runtime ) 保留到runtime期间
3@Dcumented 表示该注解会被抽取到doc文档中
4@inherited 表示注解会自动被子类继承
解析注解 获取注解中的属性的值
1 获取定义注解的class对象
2 获取注解对象 getAnnotation(注解名.class)
|
|