我的Java SE总结(九)
Java SE基础知识
单元测试
1.黑盒测试
黑盒测试也叫功能测试,主要关注软件每个功能是否实现,并不关注软件代码是否有错误。测试人员完全不考虑程序内部的逻辑结构和内部特性
2.白盒测试
白盒测试与黑盒测试相反,白盒测试主要检查软件内部逻辑结构、设计等是否符合规定。
用代码来测试你的代码
3.灰盒测试
灰盒测试是介于黑盒和白盒之间的一种测试,既关注功能也关注内部逻辑的实现,但并没有白盒测试那么细致。需要灰盒测试的目的是因为白盒测试效率较低
4.单元测试
(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。比如一个方法是否正确,比如是否达到想要的效果等。这也是我们开发者最常用的一种方式
工具类
概念
就是类中只有(静态、非静态)方法,就是为了调用方法
分类
静态
方法全部都是static修饰的,调用方式:类名.方法名(…);
非静态
通过单例模式获取到对象后。就是只有一个对象的类
方法全部都是非static修饰的,调用方式:对象名.方法名(…)
jar包
概念
封装好的字节码文件
封装
1.选中自己想要封装成jar包的类,右键export导出
2.在输入框中输入 jar,分为普通的jar包和可执行jar包
使用
1.在当前项目下,创建一文件夹folder,叫lib
2.将jar包复制到当前的lib文件夹中
3.将所有的jar包选中右键,build path add library
4.在我们代码中通过创建对象或者类名的方式使用即可
资源文件解析
1.通过IO流获取
创建properties对象,加载字符流对象读取的资源文件内容
2.通过当前类字节码文件获取
当前类.class.getResourceAsStream("/文件路径/文件名")
3.通过类加载器获取
同当前类的加载器获取
1.当前类.class.getClassLoader();//获取当前类加载器
2.classLoader.getResourceAsStream("文件路径/文件名");//通过类加载器获取流对象,如果是源文件夹,直接文件名
通过当前线程的类加载器获取流(推荐)
1、ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); //获取当前线程类加载器
2、InputStream is = classLoader.getResourceAsStream("文件路径/文件名");//通过当前线程的类加载器获取流对象,如果是源文件夹,直接文件名
设计模式
单例模式
概念
设计一个类,这个类只能创建一个对象。(限制创建对象对象数量)
获取方式
1.饿汉模式(优化方式:静态内部类)
优点:在类加载的时候,就创建好对象放到静态区了,获取对象效率高。线程安全
缺点:类加载效率低,并且static修饰的成员占用资源。
示例代码
public class Singleton {
/**
* 1. private修饰构造方法【避免外部调用构造方法,随意创建对象】
*/
private Singleton(){}
/**
* 2. 在类中创建一个对象,并且用private、static、final修饰
* private为了避免在外部直接访问当前对象
* static是为了在静态方法中可以返回当前类中的对象
* final:可加可不加,加了可以保证不可修改,且提供获取效率
*/
private static final Singleton INSTANCE = new Singleton();
/**
* 3. 提供public static 修饰的getInstance()获取当前类对象
* @return
*/
public static Singleton getInstance() {
//如果是在方法中创建的对象,每次调用getInstance方法都会创建一个新对象。所以,不能在当前方法中创建对象
// Singleton instance = new Singleton();//
return INSTANCE;
}
}
2.懒汉模式(优化方式:双重校验锁)
优点:节省资源,在需要的时候创建对象。
缺点:线程不安全。获取对象的时候,效率低
示例代码
public class Singleton {
/**
* 1. private修饰构造方法【避免外部调用构造方法,随意创建对象】
*/
private Singleton(){}
/**
* 2. 在类中创建一个对象,并且用private、static、final修饰
* private为了避免在外部直接访问当前对象
* static是为了在静态方法中可以返回当前类中的对象
* 不能加final,final修饰要求,在声明的时候赋值。
*/
private static Singleton instance;
/**
* 3. 提供public static 修饰的getInstance()获取当前类对象
* 调用方法的时候,就是需要这个对象的时候,这个时候,才去创建对象
* 有线程安全问题:
* 解决方案:线程同步
* 1. 最简单的方式是:同步方法【性能低下】
* 2. 同步代码块【双重校验锁】
* @return
*/
// public static synchronized Singleton getInstance() { //同步方法
public static Singleton getInstance() {
//为了提高效率,在同步代码块之前,再判断一次对象instance是否已经创建
if(instance == null){
//为了保证线程安全,用同步代码块
synchronized (Singleton.class) {//用当前类.class作为同步对象
//判断当前instance对象是否已经创建了,如果==null,就表示没有创建,就创建赋值给instance
if(instance == null){
//将创建的对象赋值给instance
instance = new Singleton();
}
}
}
return instance;
}
}
3.枚举
示例代码
public enum Singleton {
INSTANCE;
public static Singleton getInstance() {
return INSTANCE;
}
}
作用
1. 全局配置文件
2. 全局日志文件
3. 节省资源,例如,回收站、资源管理器、游戏单开窗口
使用场景
一般用饿汉模式,如果有序列化(自己百度扩展)要求,用枚举。
装饰者模式
不必改变原类(Input)文件和使用继承的情况下,动态地扩展一个类的功能。
它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
适配器模式
解决了两个功能的协同工作。
简单工厂模式
将生产和消费分离(解耦),即创建对象和使用对象的功能分离,便于管理。
上一篇: 我的Java SE总结(八)
下一篇: 我的Java SE总结(四)