Java SE高频面试题

JavaSE面试题

  • 编程题:写一个Singleton(单例模式)示例
    • 要点
    • 几种常见的形式
  • 如下代码的运行结果
    • 运行步骤
    • 小结
  • 类初始化和实例初始化等
    • 1.类初始化过程
    • 2.实例初始化过程
    • 3.方法的重写
    • 此代码的执行结果
  • 方法的参数传递机制
    • 考点
    • 图解
    • 结果
  • 递归与迭代
  • 成员变量和局部变量
    • 考点
    • 局部变量与成员变量的区别
    • 当局部变量与xx变量重名时,如何区分
    • 结果

编程题:写一个Singleton(单例模式)示例

Singleton:在Java中即指单例设计模式,它是软件开发中最常用的设计模式之一。
单:唯一
例:实例

单例设计模式,即某个类在整个系统中只能有一个实例对象可被获取和使用的代码模式。
例如:代表JVM运行环境的Runtime类

要点

一、是某个类只能有一个实例;
1.构造器私有化
二、是它必须自行创建这个实例;
2.含有一个该类的静态变量来保存这个唯一的实例
三、是它必须自行向整个系统提供这个实例;
3.对外提供获取该实例对象的方式:
(1)直接暴露(2)用静态变量的get方法获取

几种常见的形式

饿汉式:直接创建对象,不存在线程安全问题

  • 直接实例化饿汉式(简洁直观)
/*
 * 饿汉式:
 * 	在类初始化时直接创建实例对象,不管你是否需要这个对象都会创建
 * 
 * (1)构造器私有化
 * (2)自行创建,并且用静态变量保存
 * (3)向外提供这个实例
 * (4)强调这是一个单例,我们可以用final修改
 */
public class Singleton1 {
   
	public static final Singleton1 INSTANCE = new Singleton1();
	private Singleton1(){
   	
	}
  • 枚举式(最简洁)
/*
 * 枚举类型:表示该类型的对象是有限的几个
 * 我们可以限定为一个,就成了单例
 */
public enum Singleton2 {
   
	INSTANCE
}
  • 静态代码块饿汉式(适合复杂实例化)
public class Singleton3 {
   
	public static final Singleton3 INSTANCE;
	private String info;
	
	static{
   
		try {
   
			Properties pro = new Properties();
			//加载属性
			pro.load(Singleton3.class.getClassLoader().getResourceAsStream("single.properties"));
			
			INSTANCE = new Singleton3(pro.getProperty("info"));
		} catch (IOException e) {
   
			throw new RuntimeException(e);
		}
	}
	
	private Singleton3(String info){
   
		this.info = info;
	}

	public String getInfo() {
   
		return info;
	}

	public void setInfo(String info) {
   
		this.info = info;
	}

	@Override
	public String toString() {
   
		return "Singleton3 [info=" + info + "]";
	}
	
}

懒汉式:延迟创建对象

  • 多线程不安全(适用于单线程)
/*
 * 懒汉式:
 * 	延迟创建这个实例对象
 * 
 * (1)构造器私有化
 * (2)用一个静态变量保存这个唯一的实例
 * (3)提供一个静态方法,获取这个实例对象
 */
public class Singleton4 {
   
	private static Singleton4 instance;
	private Singleton4(){
   
		
	}
	public static Singleton4 getInstance(){
   
		if(instance == null){
   
			instance = new Singleton4();
		}
		return instance;
	}
}
  • 线程安全(适用于多线程)
/*
 * 懒汉式:
 * 	延迟创建这个实例对象
 * 
 * (1)构造器私有化
 * (2)用一个静态变量保存这个唯一的实例
 * (3)提供一个静态方法,获取这个实例对象
 */
public class Singleton5 {
   
	private static Singleton5 instance;
	private Singleton5(){
   
		
	}
	public static Singleton5 getInstance(){
   
		if(instance == null){
   
			synchronized (Singleton5.class)

你可能感兴趣的:(java面试题,java)