山东手机网站建设公司,广州网站改版方案,网站设计规划建设的目的,wordpress 内容编辑器今日内容
1. Junit单元测试
2. 反射
3. 注解Junit单元测试#xff1a;
* 测试分类#xff1a;1. 黑盒测试#xff1a;不需要写代码#xff0c;给输入值#xff0c;看程序是否能够输出期望的值。2. 白盒测试#xff1a;需要写代码的。关注程序具体的执行流程。* Junit使…今日内容
1. Junit单元测试
2. 反射
3. 注解Junit单元测试
* 测试分类1. 黑盒测试不需要写代码给输入值看程序是否能够输出期望的值。2. 白盒测试需要写代码的。关注程序具体的执行流程。* Junit使用白盒测试* 步骤1. 定义一个测试类(测试用例)* 建议* 测试类名被测试的类名Test CalculatorTest* 包名xxx.xxx.xx.test cn.itcast.test2. 定义测试方法可以独立运行* 建议* 方法名test测试的方法名 testAdd() * 返回值void* 参数列表空参3. 给方法加Test4. 导入junit依赖环境* 判定结果* 红色失败* 绿色成功* 一般我们会使用断言操作来处理结果* Assert.assertEquals(期望的结果,运算的结果);* 补充* Before:* 修饰的方法会在测试方法之前被自动执行* After:* 修饰的方法会在测试方法执行之后自动被执行反射框架设计的灵魂 * 框架半成品软件。可以在框架的基础上进行软件开发简化编码
* 反射将类的各个组成部分封装为其他对象这就是反射机制* 好处1. 可以在程序运行过程中操作这些对象。2. 可以解耦提高程序的可扩展性。* 获取Class对象的方式1. Class.forName(全类名)将字节码文件加载进内存返回Class对象* 多用于配置文件将类名定义在配置文件中。读取文件加载类2. 类名.class通过类名的属性class获取* 多用于参数的传递3. 对象.getClass()getClass()方法在Object类中定义着。* 多用于对象的获取字节码的方式* 结论同一个字节码文件(*.class)在一次程序运行过程中只会被加载一次不论通过哪一种方式获取的Class对象都是同一个。* Class对象功能* 获取功能1. 获取成员变量们* Field[] getFields() 获取所有public修饰的成员变量* Field getField(String name) 获取指定名称的 public修饰的成员变量* Field[] getDeclaredFields() 获取所有的成员变量不考虑修饰符* Field getDeclaredField(String name) 2. 获取构造方法们* Constructor?[] getConstructors() * ConstructorT getConstructor(类?... parameterTypes) * ConstructorT getDeclaredConstructor(类?... parameterTypes) * Constructor?[] getDeclaredConstructors() 3. 获取成员方法们* Method[] getMethods() * Method getMethod(String name, 类?... parameterTypes) * Method[] getDeclaredMethods() * Method getDeclaredMethod(String name, 类?... parameterTypes) 4. 获取全类名 * String getName() * Field成员变量* 操作1. 设置值* void set(Object obj, Object value) 2. 获取值* get(Object obj) 3. 忽略访问权限修饰符的安全检查* setAccessible(true):暴力反射* Constructor:构造方法* 创建对象* T newInstance(Object... initargs) * 如果使用空参数构造方法创建对象操作可以简化Class对象的newInstance方法* Method方法对象* 执行方法* Object invoke(Object obj, Object... args) * 获取方法名称* String getName:获取方法名* 案例* 需求写一个框架不能改变该类的任何代码的前提下可以帮我们创建任意类的对象并且执行其中任意方法* 实现1. 配置文件2. 反射* 步骤1. 将需要创建的对象的全类名和需要执行的方法定义在配置文件中2. 在程序中加载读取配置文件3. 使用反射技术来加载类文件进内存4. 创建对象5. 执行方法注解
* 概念说明程序的。给计算机看的
* 注释用文字描述程序的。给程序员看的* 定义注解Annotation也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面用来对这些元素进行说明注释。
* 概念描述* JDK1.5之后的新特性* 说明程序的* 使用注解注解名称* 作用分类①编写文档通过代码里标识的注解生成文档【生成文档doc文档】②代码分析通过代码里标识的注解对代码进行分析【使用反射】③编译检查通过代码里标识的注解让编译器能够实现基本的编译检查【Override】* JDK中预定义的一些注解* Override 检测被该注解标注的方法是否是继承自父类(接口)的* Deprecated该注解标注的内容表示已过时* SuppressWarnings压制警告* 一般传递参数all SuppressWarnings(all)* 自定义注解* 格式元注解public interface 注解名称{属性列表;}* 本质注解本质上就是一个接口该接口默认继承Annotation接口* public interface MyAnno extends java.lang.annotation.Annotation {}* 属性接口中的抽象方法* 要求1. 属性的返回值类型有下列取值* 基本数据类型* String* 枚举* 注解* 以上类型的数组2. 定义了属性在使用时需要给属性赋值1. 如果定义属性时使用default关键字给属性默认初始化值则使用注解时可以不进行属性的赋值。2. 如果只有一个属性需要赋值并且属性的名称是value则value可以省略直接定义值即可。3. 数组赋值时值使用{}包裹。如果数组中只有一个值则{}可以省略* 元注解用于描述注解的注解* Target描述注解能够作用的位置* ElementType取值* TYPE可以作用于类上* METHOD可以作用于方法上* FIELD可以作用于成员变量上* Retention描述注解被保留的阶段* Retention(RetentionPolicy.RUNTIME)当前被描述的注解会保留到class字节码文件中并被JVM读取到* Documented描述注解是否被抽取到api文档中* Inherited描述注解是否被子类继承* 在程序使用(解析)注解获取注解中定义的属性值1. 获取注解定义的位置的对象 ClassMethod,Field2. 获取指定的注解* getAnnotation(Class)//其实就是在内存中生成了一个该注解接口的子类实现对象public class ProImpl implements Pro{public String className(){return cn.itcast.annotation.Demo1;}public String methodName(){return show;}}3. 调用注解中的抽象方法获取配置的属性值* 案例简单的测试框架
* 小结1. 以后大多数时候我们会使用注解而不是自定义注解2. 注解给谁用1. 编译器2. 给解析程序用3. 注解不是程序的一部分可以理解为注解就是一个标签