面试总结-03

1.单例模式设计

单例就是该类只能返回一个实例。

单例所具备得特点:

  1. 私有化得构造函数。
  2. 私有得静态得全局变量
  3. 公有的静态的方法

实现的方式:

  • 懒汉式:
  • 线程安全懒汉式:
  • 饿汉式:
/*
懒汉模式:
优点:节约了空间
缺点:线程不安全,反射破解问题
*/
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的区别:

  1. 位置:Throw方法发内部,Throws方法名之后
  2. 作用:Throw抛出异常,throws声明异常
  3. 个数:Throw一次抛出一个异常,Throws可以声明多个异常。

4.Final,Finally,finalize关键字的作用

  1. final用于声明属性,方法和类,分别标识属性不可变,方法不可覆盖,类不可继承。
  2. finally是异常处理语句结构的一部分,表示总是执行。不管是否有异常总是被执行,除非虚拟机停止才不执行。System.exit(1)。
  3. finalize是Object类的一个方法,在垃圾收集器执行的时候会被调用被回收对象的此方法可以实现资源回收,释放资源,关闭文件等。JVM不保证此方法总是被调用。

​​​​​​​5.Final关键字的作用

  1. 修饰类:(最终类)不能被子类继承
  2. 修饰方法:(最终方法)不能被子类重写
  3. ​​​​​​​修饰变量:(常量)一旦声明之后,不能再次修改其中的值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值