1.黑盒测试和白盒测试的区别? 
黑盒测试:不需要写代码,只需要给输入值,看程序输出结果是否能达到输出预期的效果 
白盒测试:需要使用代码对程序的执行流程和执行效率进行检测,并分析,看程序输出结果是否能达到输出预期的效果 
 
2.什么是反射?反射在程序中的应用场景,我们为什么要使用反射? 
反射:将类的各个组成部分封装成其他对象 
反射应用场景:反射运用到框架居多,因为通过反射我们在使用框架时可以不需要修改里面的代码只需要修改配置文件就可以创建任意对象和调用任意方法.并且在程序运行的时候去调用这些对象,提高程序的扩展性,实现代码解耦 
反射好处:(1) 可以在程序运行过程中,操作这些对象 
(2)可以解耦,提高程序的可扩展性 
 
3.获取 Class对象有几种方式?他们的用途都在哪? 
(1)Class.forName获取,多用于配置文件 
(2) 类名.class获取,多用于参数的传递 
(3)对象.getClass()获取,多用于对象的获取字节码的方式 
 
4.如何获取Class对象中被私有的成员变量对象和成员方法对象? 
(1) 可以用Class对象调用 Field[] getDeclaredFields() 方法获取所有的成员变量,不考虑修饰符或Field getDeclaredField(String name)  获取指定名称的成员变量,不考虑修饰符获取指定的成员变量。如果想对该成员变量进行设置操作,需要用成员变量对象调用setAccessible(true)方法,忽略访问权限修饰符的检查进行设置。 
(2) 可以用Class对象调用Method[] getDeclaredMethods()  获取所有的成员方法,不考虑修饰符或Method getDeclaredMethod(String name, 类<?>... parameterTypes) 获取指定的成员方法,不考虑修饰符。如果想对该成员方法进行调用私有方法操作,需要用成员方法对象调用setAccessible(true)方法,忽略访问权限修饰符的检查进行设置。 
 
5.注解在程序中都有哪些用途? 
(1)编写文档:通过代码里标识的注解生成文档(生成文档doc文档) 
(2)代码分析:通过代码里标注的注解对代码进行分析(使用反射). 
(3)编译检查:被标注的代码会自动检查,如果不符合注解的要求则报错,例如:@Override,@FunctionalInterface 
 
6.什么是元注解? 
元注解:用于描述注解的注解 
例如: 
@Target:描述该注解可以标记在什么位置 
Element.TYPE        标记在类上             
Element.METHOD        标记在方法上                  
Element.FIELD        标记在成员变量上 
@Retention:描述该注解被保留的阶段                       
常使用RetentionPolicy.RUNTIME,表示该注解保留在.class文件中,可以被JVM读取 
@Documented:描述注解是否被抽取到api文档中 
@Inherited:描述注解是否被子类继承 
 
7.文件从编译到运行可以分为哪三个时期? 
(1)Source源代码时期 
(2)Class类对象时期 
(3)Runtime运行时时期 
 
8.思考:想让一个类加载进内存,有几种方式? 
(1)new 类名 
(2)访问,操作静态成员属性或方法 
(3)反射,Class.forName("全类名") 
(4)类名.getClassLoader()加载 
 
 |