Java面试:编程题解析与Singleton模式
下载需积分: 0 | DOC格式 | 72KB |
更新于2024-11-14
| 154 浏览量 | 举报
"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模式和类继承的执行顺序,将有助于在面试中展示你的编程功底和问题解决能力。
相关推荐