1.单例模式设计
单例就是该类只能返回一个实例。
单例所具备得特点:
- 私有化得构造函数。
- 私有得静态得全局变量
- 公有的静态的方法
实现的方式:
- 懒汉式:
- 线程安全懒汉式:
- 饿汉式:
/*
懒汉模式:
优点:节约了空间
缺点:线程不安全,反射破解问题
*/
public class SingleTon {
//使用懒汉模式
//使用volatile禁止指令集重排序
private static volatile SingleTon instance;
private SingleTon() {
synchronized (SingleTon.class) {
if (instance != null) {//解决反射破解问题
throw new RuntimeException("不能使用反射创建实例化对象");
}
}
}
public static SingleTon getInstance() {
if (instance == null) {//提高代码执行效率
synchronized (SingleTon.class) {//多线程时,保证线程安全
if (instance == null) {
instance = new SingleTon();
}
}
}
return instance;
}
}
/*
饿汉模式:
优点:线程安全
缺点:浪费空间,反射破解问题
*/
class SingleTon1 {
private static final SingleTon1 INSTANCE = new SingleTon1();
private SingleTon1() {
synchronized (SingleTon1.class) {
if (INSTANCE != null) {
throw new RuntimeException("不能使用反射创建实例化对象");
}
}
}
public static SingleTon1 getInstance() {
return INSTANCE;
}
}
/*
静态内部类(最常用的):
优点:线程安全,节约空间
缺点:反射破解问题
*/
class SingleTon3 {
private SingleTon3() {
synchronized (SingleTon3.class) {
if (Holder.INSTANCE != null) {
throw new RuntimeException("不能使用反射创建实例化对象");
}
}
}
static class Holder {
private static final SingleTon3 INSTANCE = new SingleTon3();
}
public static SingleTon3 getInstance() {
return Holder.INSTANCE;
}
}
/*
使用枚举的方式:
优点:线程安全,没有反射破解问题
缺点:浪费空间
*/
enum SingleTon4 {
INSTANCE;
public static SingleTon4 getInstance() {
return INSTANCE;
}
}
2.常见的异常类型
NullPointerException:空指针异常
ClassCastException:类型强制转换异常
IllegalArgumentException:传递非法参数异常
ArithmeticException:算数运算异常
IndexOutOfBoundsException:下标越界异常
NumberFormatException:数字格式化异常
ClassNotFindException:加载请求异常
3.Throws和Throw的区别:
位置:Throw方法发内部,Throws方法名之后
作用:Throw抛出异常,throws声明异常
个数:Throw一次抛出一个异常,Throws可以声明多个异常。
4.Final,Finally,finalize关键字的作用
final用于声明属性,方法和类,分别标识属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。不管是否有异常总是被执行,除非虚拟机停止才不执行。System.exit(1)。
finalize是Object类的一个方法,在垃圾收集器执行的时候会被调用被回收对象的此方法可以实现资源回收,释放资源,关闭文件等。JVM不保证此方法总是被调用。
5.Final关键字的作用
修饰类:(最终类)不能被子类继承
修饰方法:(最终方法)不能被子类重写
修饰变量:(常量)一旦声明之后,不能再次修改其中的值。