欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

我的Java SE总结(九)

程序员文章站 2022-07-14 20:25:14
...

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)文件和使用继承的情况下,动态地扩展一个类的功能。
它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

适配器模式
解决了两个功能的协同工作。

简单工厂模式
将生产和消费分离(解耦),即创建对象和使用对象的功能分离,便于管理。