Java笔试编程题:Singleton模式与类执行顺序解析
4星 · 超过85%的资源 需积分: 9 66 浏览量
更新于2024-10-22
收藏 283KB PDF 举报
"Java编程题,包括Singleton设计模式的实现和类继承时的执行顺序问题。"
在Java编程中,Singleton模式是一种常见的设计模式,它的核心目标是确保一个类在整个应用中只有一个实例,并提供全局访问点。在题目中提到了Singleton模式的两种常见实现方式。
135、Singleton模式实现:
第一种形式,也被称为"饿汉式"Singleton,它在类加载时就完成了实例化,线程安全,但可能会造成不必要的内存浪费,因为即使程序从未使用Singleton,也会创建实例。
```java
public class Singleton {
private Singleton() {} // 私有构造器
private static Singleton instance = new Singleton(); // 静态私有实例
public static Singleton getInstance() { return instance; } // 公共静态方法获取实例
}
```
第二种形式,也称为"懒汉式"Singleton,它延迟实例化直到首次被使用,这样提高了效率,但在多线程环境下不安全。为了保证线程安全,可以使用`synchronized`关键字修饰`getInstance()`方法,但会降低性能。
```java
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
更进一步,可以使用双重检查锁定(Double-Check Locking)来优化懒汉式Singleton,既保证线程安全又提高效率:
```java
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
```
136、类继承时的执行顺序问题:
在Java中,当创建子类对象时,会先执行父类的构造器,然后执行子类的构造器。这是因为Java的构造器链机制,确保了在子类实例化前父类的初始化。所以,如果有一个如下的类结构:
```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`的对象时,首先会打印`"FatherClassCreate"`(父类构造器),然后打印`"ChildClassCreate"`(子类构造器)。这是因为在子类构造器中,默认会调用父类的无参构造器(如果没有显式指定的话)。因此,无论何时创建`ChildClass`的实例,都会先执行父类的构造器,然后执行子类的构造器。
以上是Java编程题中的Singleton模式实现和类继承执行顺序的详细解释,这些知识点对于理解和解决Java面试及笔试中的相关问题至关重要。
2012-09-02 上传
2015-06-28 上传
2021-04-10 上传
2023-10-20 上传
185 浏览量
2020-12-21 上传
2022-06-10 上传
2009-06-09 上传
2010-03-31 上传
Gphone520
- 粉丝: 1
- 资源: 7
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍