文章目录
- Java基础加强
- 1、单元测试
- 测试员测试
- 程序员自测
- 2、工具类-jar-classpath
- 工具类
- jar包
- .classpath
- 3、资源文件解析
- 概述
- 代码实现
- 解析文件三种方式
- 传统IO方式
- 字节码对象获取流
- 类加载器获取流
- 4、设计模式
- 概念
- 单例模式
- 工厂模式
- 适配器模式
- 装饰者模式
Java基础加强
1、单元测试
测试员测试
黑盒测试(功能测试):只注重功能是否实现,测试人员完全不考虑程序内部的逻辑结构和内部特性。
白盒测试:关心内部代码的结构,注重代码的质量
灰盒测试:既关注功能也关注内部逻辑的实现,但并没有白盒测试那么细致。需要灰盒测试的目的是因为白盒测试效率较低。
边界测试:测试临界值
压力测试:测试并发量
功能测试:根据需求文档看项目的功能是否完整
程序员自测
单元测试:测试业务流程是否完整,但是一个类只能有一个main方法,用main方法测试效率低,耦合高,故此引入单元测试:junit,常用版本 4
Junit4是使用注解来进行测试的,而且不需要继承TestCase类[J3],注解:@Test,测试方法是公共无参无返回值的,第三方提供,需要导包
【注意事项】
Junit4中的测试方法上都必须加上@Test才能被标识为测试方法
测试方法中没有返回值和参数,因为没有必要
测试方法必须是公开的(public)
其他测试方法若有问题,也可能影响到当前测试方法
@Before 在每个测试方法运行之前执行
@After 在每个测试方法运行之后执行
@After @Before 标准的方法不能单独运行,与顺序无关(输出结果顺序与运行顺序不一致)
2、工具类-jar-classpath
工具类
工具类所在的类和包命名,一般以util结尾
工具类一般以静态方法或者单例模式创建
提高开发效率,提高代码的复用性
jar包
概念:jar包就是一个class文件的压缩包和zip、rar性质是一样的
运用:将工具类打成jar包(jar包:字节码文件的压缩包)导入到需要的项目中
步骤:
1.直接导入外部的jar包
2.新建一个lib文件夹,拷贝jar进入,add to buildpath
.classpath
作用:记录项目环境变量的相关配置
Eclipse创建的每一个项目中都有一个.classpath文件,打开这个.classpath文件可以看到如下界面
<classpathentry kind="src" path="src"/>
kind="src":代表key, 当它是src的时候(资源文件夹)
path="src": 代表值,这个src代表一个路径(文件夹)
现在src所代表的文件夹就是一个资源文件夹
注释:资源文件夹【】里面的内容才会帮我们编译成class文件
3、资源文件解析
概述
资源文件也可以看成是配置文件,一般的形式有两种:properties形式和XML形式,都会编译到项目的bin目录中
properties文件中数据的存储是以键值对的形式存在,每一行为一条数据,只能存储字符串形式的数据,Properties文件中值的部分任意字符都会被当做值的一部分,尤其是空格
资源文件的作用:解决硬编码问题【代码逻辑中写死的代码】
代码实现
代码实现主要针对资源文件的读取,针对properties文件的读取是使用JDK中的Properties类进行数据读取
Properties类语法
load(字节输入流)
加载资源文件
getProperty(key)
返回资源文件中对应key中的值【字符串】,若key不存在则返回null
getProperty(key,默认值)
返回资源文件中对应key中的值【字符串】,若key不存在则返回默认值
读取步骤:
- 创建Properties对象
- 加载资源文件流
- 读取数据
解析文件三种方式
传统IO方式
new FileInputStream(文件路径); //自己创建文件流
字节码对象获取流
获取字节码对象:字节码对象方式获取流,文件最终必须被编译到class文件存放的位置
字节码对象获取流参数的规则:前必须带/,若资源文件没有再包中,包的路径可以省略
类名.class.getResourceAsStream(/包路径/文件名)
类加载器获取流
- 字节码对象方式获取类加载器
字节码对象.getClassLoader() - 线程方式获取类加载器
线程方式获取类加载器稍微比字节码对象获取类加载器稍显复杂,必须先获取当前线程,通过当前线程获取类加载器
Thread.currentThread().getContextClassLoader() - 获取流语法
类加载器对象.getResourceAsStream(包名/文件名)
类加载器获取流的时候,路径最前方不需要书写/
4、设计模式
概念
设计模式:直白的讲并不是代码,而是针对某类问题的通用设计解决方案,或者说是代码技巧
设计模式之间是可以相互嵌套使用的
单例模式
单例特征
- 对象构造私有化
- 私有静态当前类类型的字段
- 提供公共,静态对外的访问方法获取对象
单例模式可以保证系统中,应用该模式的类,一个类只有一个实例,即一个类只有一个对象实例
懒汉 (线程安全问题,在需要时创建对象返回,解决线程问题,但要使用双重校验,而且同步代码块这种方式效率比较低)
ThreadLocal 为每一个线程创建一个局部变量副本 每个线程得到自己对应的副本 多个线程得到多个不同的副本
private static ThreadLocal<ThreadLocalSingleton> local = new ThreadLocal<ThreadLocalSingleton>(){
protected ThreadLocalSingleton initialValue() {
return new ThreadLocalSingleton();
};
};
饿汉(类加载时就被创建,线程安全,但是存在加载效率低下的问题,使用静态代码块优化)
public class HungryMode {
//私有化构造方法
private HungryMode(){}
//私有化字段
private static HungryMode instance;
//使用静态代码块优化
static{
instance = new HungryMode();
//在代码块里面还可以写其他功能
}
//对外提供公共访问方法
public static HungryMode getIns(){
return instance;
}
}
工厂模式
工厂模式是我们最常用的实例化对象模式,是用工厂方法代替new操作的一种模式
建立一个工厂用来帮助完成某些功能,不用关注内部实现,只需要传递相应的参数
实现步骤:使用工厂对象,根据传递的参数创建对象
适配器模式
适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
装饰者模式
装饰模式指的是在不必改变原类文件和不使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
实现步骤 :通过对原类文件继承,对原有方法功能的基础上,实现新的功能