Junit
反射
注解
泛型
-
Junit使用:白盒测试
-
步骤:
- 定义一个测试类(测试用例)
- 建议:
- 测试类名:被测试的类名Test CalculatorTest
- 包名: xxx.xxx.xxx.test cn.ybs.test
- 建议:
- 定义测试方法:可以独立的运行
- 建议:
- 方法名: test测试的方法名
- 返回值: void
- 参数列表:空参
- 建议:
- 给方法加@Test
- 导入Junit依赖
- 定义一个测试类(测试用例)
-
补充
- @Before
- @Close
-
-
反射:框架设计的灵魂
-
框架:半成品的软件。可以在框架的基础上进行软件开发,简化编码
-
反射:将类的各个组成部分封装为其他对象,这就是反射机制。
- 好处:
- 可以在程序运行过程中,操作这些对象
- 可以解耦,提高程序的可扩展性。
- 好处:
-
获取Class对象的方式:
- Class.forName(“全类名”) : 将字节码文件加载进内存,返回class对象
- 多用于配置文件,将类定义在配置文件中。读取文件,加载类
- 类名.class: 通过类名的属性获取
- 对用于参数的传递
- 对象.getClass() :getClass 方法在object类中定义着
- 多用于对象的获取字节码的方式
- 结论
- 同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪种方式获取的Class对象,都是同一个。
- Class.forName(“全类名”) : 将字节码文件加载进内存,返回class对象
-
Class 对象功能
- 获取功能:
- 获取成员变量
- Fileld[] getFileds() 获取所有public 成员变量
- Field getField(String name) 获取指定名称的public对象
- 获取构造方法
- getConstructors()
- getConstructor(…)
- 创建对象
- 获取成员方法
- getMethods()
- getMethod(…)
- 获取类名
- getName()
- 获取成员变量
- 可以通过暴力反射获取私有变量,改变私有变量
- 获取功能:
-
注解
-
概念:说明程序的。给计算机看的。
-
注释:用文字描述程序。给程序员看的。
-
概念描述:
- JDK1.5之后的新特性
- 说明程序的
- 使用注解:@注解名称
-
使用分类:
- 编写文档
- 代码分析
- 编译检查
-
JDK中预定义的一些注解
- @Override: 检测被该注解标注的方法是否是继承自父类(接口)
- @Deprecated: 该注解标注的内容,表示已过时
- @SuppressWarning: 压制警告
- 一般传递参数 all @SuppressWarning(all)
-
自定义注解
- 格式
- 元注解 public @interface 注解名称{}
- 本质: 注解的本质就是一个接口,该接口默认继承Annotation接口
- public interface MyAnno extends java.lang.Annotation{}
- 属性:接口中的抽象方法
- 要求:
-
属性的返回值类型
- 基本数据类型
- String
- 枚举
- 注解
- 以上类型的数组
-
定义了属性,在使用时需要给属性赋值
- 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不用赋值
- 如果只有一个属性需要赋值,则直接定义值即可
- 数组赋值时,只使用{}。如果数组中只有一个值,则{}可以省略
-
- 元注解:用于描述注解的注解
- @Target:描述注解能够作用的位置
- ElementType取值:
- TYPE:可以作用于类上
- METHOD:可以作用在方法上
- FIELD:可以作用于成员变量上
- ElementType取值:
- @Retention:描述注解被保留的阶段
- @Documented:描述注解是否被抽取到api文档中
- @Inherited:描述注解是否被子类继承
- @Target:描述注解能够作用的位置
- 要求:
- 格式
-
在程序中使用(解析)注解
- 获取注解定义的位置的对象。如:获取该类的字节码文件 XXX.class()
- 获取指定的注解。如:获取上边的注解对象 getAnnootation(xxx)
- 调用注解对象中定义的抽象方法,获取返回值
-
小结
- 通常会使用注解,而不是自定义注解
- 直接给谁用?
- 编译器
- 解析程序
- 注解不是程序的一部分,可以理解为注解就是一个标签
泛型
泛型是一种未知的数据类型,当我们不知道使用什么数据类型的时候,可以使用泛型
泛型也可以看做一个变量,用来接收数据类型
E e : Element
- 不使用泛型
- 好处:默认的类型就是Object类型,可以存储任意类型的数据
- 弊端:不安全,会引发异常
泛型的上限限定 extends
泛型的下限限定 super