第17天 Junit 反射和注解

Junit 反射和注解

  • Junit
  • 反射
    • 获取字节码文件对象的3种方式
    • 反射的使用步骤
  • 注解

Junit

  • 概念: 测试每个类中的方法是否能够顺利执行。从而保证代码的稳定性
  • 使用步骤
  1. 新建测试类,类名是XXTest
  2. 在测试类中新建测试方法,不能被static修饰,并且无参无返回值
  3. 给方法上加@Test注解
  4. alt+enter 引入junit4
  5. 选中方法右键执行
  • 常见注解:@Test 表示要测试的方法,@Before 会在测试方法之前执行,一般用于加载资源,@After 会在测试方法之后执行,一般用于释放资源

反射

获取字节码文件对象的3种方式

  • forName(全类名)
  • 类名.class
  • 对象名.getclass()

反射的使用步骤

  1. 先获取字节码对象
  2. 获取描述器(consructor,field,method)
  3. 暴力反射设置访问权限
  4. 生成对象,调用方法,操作成员变量
  • 生成对象的操作
    Class clazz = Person.class;
    Constructor constructor = clazz.getDeclaredConstructor();
    constructor.setAccessible(true);
    Object obj = constructor.newInstance();
    System.out.println(obj);
    
  • 调用对象的方法
    Person person =new Person();
    Class clazz =Person.class;
    Method method = clazz.getDeclaredMothod("eat",String.class)
    mothod.setAccessible(true);
    mothod.invoke(person,"apple");
    
  • 修改成员变量的属性
    Class clazz = Person.class;
    Field field = clazz.getDeclaredField("name");
    field.setAccessible(true);
    field.set(person,"lina");
    
  • .通过反射如何操作对象属性
    public class Demo{
    	public static void main(String[] args){
    		Properties properties = new Properties();
    		properties.load(Demo.class.getClassLoader().getResourceAsStream("config.properties");
    		String className = properties.getProperty("className");
    		String methodName = properties.getProperty("methodName");
    		Class clazz = Class.forName(className);
    		Object obj = clazz.newInstance();
    		Method method = clazz.getDeclaredMethod(methodName);
    		method.setAccessible(true);
    		method.invoke(obj);
    	}
    

注解

  • 注解:就是一个标记,这个标记可以作用在类上,方法上等。程序判断有没有注解来完成指定的功能
  • 元注解:描述注解的注解 @Target(ElementType.METHOD),@Retention(RetentionPolicy.RUNTIME) 以后定义注解这个元注解必须要加上。
  • 如何定义注解:
- public @interface 注解名{
	数据类型 属性名() deault 默认值;
	//数据类型:基本,字符串,数组。枚举,注解
	}
  • 注意事项
  1. 如果有默认值,那么在使用注解的时候可以不给该属性赋值
  2. 如果在使用注解的时候只有一个属性value,那么在赋值的时候可以直接赋值@注解名(“值”)
  3. 如果是数组类型,并且只需要赋值一个数据,可以省略{}

你可能感兴趣的:(java)