Java面试:编程题解析与Singleton模式

下载需积分: 0 | DOC格式 | 72KB | 更新于2024-11-14 | 154 浏览量 | 0 下载量 举报
收藏
"Java面试第四季,关注编程题目,尤其是Singleton模式和类的执行顺序" 在Java面试中,编程能力是非常关键的一部分。本部分主要涵盖了两个核心知识点:Singleton设计模式和类的继承与构造器执行顺序。 首先,让我们来详细讨论Singleton模式。Singleton模式是一种创建型设计模式,它的目标是确保类只有一个实例,并提供一个全局访问点。在Java中,有几种常见的Singleton实现方式: 1. 饿汉式Singleton: 这种方式在类加载时就完成了实例化,因此线程安全。代码如下: ```java public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } ``` 这种方式的缺点是如果Singleton类没有被使用,也会被加载,可能会造成内存浪费。 2. 懒汉式Singleton(同步方法): 这种方式在第一次调用`getInstance`方法时才实例化,因此延迟了初始化。代码如下: ```java public class Singleton { private static Singleton instance = null; private Singleton() {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } ``` 这种方式虽然保证了线程安全,但每次调用`getInstance`都会进行同步,降低了效率。 3. 双重检查锁定(DCL,Double-Check Locking)Singleton: 这种方式既延迟了初始化,又减少了同步开销。代码如下: ```java public class Singleton { private volatile static Singleton instance = null; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` DCL通过volatile关键字保证了多线程环境下的正确性,同时避免了不必要的同步。 接下来,我们讨论类的继承与构造器执行顺序。当一个类继承另一个类时,子类的构造器会在调用自己的构造器之前先调用父类的构造器。这是因为子类构造器必须确保父类的状态已经正确初始化。以下是一个简单的例子: ```java package test; public class FatherClass { public FatherClass() { System.out.println("FatherClassCreate"); } } package test; import test.FatherClass; public class ChildClass extends FatherClass { public ChildClass() { System.out.println("ChildClassCreate"); } } ``` 在这个例子中,当你创建`ChildClass`的实例时,首先会执行`FatherClass`的构造器,然后才是`ChildClass`的构造器。因此,输出顺序将是"FatherClassCreate"先于"ChildClassCreate"。 了解这些基本概念对于Java面试至关重要,因为它们反映了对核心语言特性和设计模式的理解。熟练掌握Singleton模式和类继承的执行顺序,将有助于在面试中展示你的编程功底和问题解决能力。

相关推荐