junit的单元测试
使用测试在所测试的方法上加上@Test ,在导入junit包进行测试
@Before:在@Test的方法之前运行
@After :在@Test的方法之后运行
tip:Assert.assertEquals(期望的结果,运算的结果);
反射
-
反射获取对象的三种方式
1.Class.forName("全类名"):将字节码文件加载进内存,返回Class对象
多用于配置文件,将类名定义在配置文件中。读取文件,加载类2.类名.class:通过类名的属性class获取
多用于参数的传递3.对象.getClass():getClass()方法在Object类中定义着。
多用于对象的获取字节码的方式
通过class对象来获取属性,方法,构造器并执行和修改属性
-
获取成员变量
- Field[] getFields() :获取所有public修饰的成员变量
- Field getField(String name) 获取指定名称的 public修饰的成员变量
- Field[] getDeclaredFields() 获取所有的成员变量,不考虑修饰符
- Field getDeclaredField(String name)
- 获取后返回Field变量可以进行下面操作:
- 设置值
- void set(Object obj, Object value)
-
获取值
- get(Object obj)
-
忽略访问权限修饰符的安全检查
- setAccessible(true):暴力反射
-
- void set(Object obj, Object value)
-
获取构造器
- Constructor<?>[] getConstructors()
- Constructor
getConstructor(类<?>... parameterTypes) - Constructor
getDeclaredConstructor(类<?>... parameterTypes) - Constructor<?>[] getDeclaredConstructors()
- Constructor:构造方法
- 创建对象:
- T newInstance(Object... initargs)
- 创建对象:
- Constructor:构造方法
-
获取方法
- Method[] getMethods()
- Method getMethod(String name, 类<?>... parameterTypes)
- Method[] getDeclaredMethods()
- Method getDeclaredMethod(String name, 类<?>... parameterTypes)
- 执行方法:
-
Object invoke(Object obj, Object... args)
-
获取方法名称:
- String getName:获取方法名
-
注解
- 四个元注解
元注解:用于描述注解的注解
* @Target:描述注解能够作用的位置
* ElementType取值:
* TYPE:可以作用于类上
* METHOD:可以作用于方法上
* FIELD:可以作用于成员变量上
* @Retention:描述注解被保留的阶段
* @Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
* @Documented:描述注解是否被抽取到api文档中
* @Inherited:描述注解是否被子类继承
自定义注解
@Target({ElementType.TYPE,ElementType.METHOD})
@Tetention(TetentionPolicy.RUNTIME)
public @interface one_anno{
}
自定义注解后可以标注在类上,这样我们就可以通过反射获取类中带有注解的方法,和带有注解的类,进行下一步操作;;;