Java面试50问,女面试官最喜欢问的居然是它!

简介: Java面试50问,女面试官最喜欢问的居然是它!

[] 什么是接口和抽象类?

在Java中,接口(Interface)和抽象类(Abstract Class)都是实现面向对象编程中抽象化概念的工具,但它们有以下不同之处:

接口(Interface)

1. 定义:接口是一种完全抽象的类,它可以包含常量和方法的签名,但不能有任何的实现代码。
2. 成员变量:接口中的变量默认是public static final的,这意味着它们是常量。
3. 方法:接口中的方法默认是public abstract的,但Java 8允许接口中存在默认方法(带有实现的方法)和静态方法。
4. 实现:要使用接口,必须通过一个具体类来实现(implements)它。实现类必须提供接口中所有方法的具体实现。
5. 多重继承:一个类可以实现多个接口,这允许实现多重继承的功能。
6. 使用场景:接口常用于定义一组类应遵循的契约或行为规范。

抽象类(Abstract Class)

1. 定义:抽象类是一种不完整的类,它包含抽象方法和具体方法。
2. 成员变量:抽象类中的变量可以是任意类型的,没有默认的访问修饰符。
3. 方法:抽象类可以有抽象方法(没有方法体)和具体方法(有方法体)。
4. 继承:要使用抽象类,必须通过一个具体子类来继承(extends)它。子类可以继承抽象类的具体方法,并且必须提供所有抽象方法的具体实现。
5. 单继承:Java中的类只能继承一个类,但可以实现多个接口。
6. 使用场景:抽象类常用于定义一个类的基本轮廓,它提供了一些实现细节,同时为子类留下一些抽象部分。

接口和抽象类的主要区别:

- 抽象程度:接口是完全抽象的,而抽象类可以包含具体的实现细节。
- 多重继承:类可以实现多个接口,但只能继承一个抽象类。
- 成员变量:接口中的变量默认是公共的静态常量,而抽象类中的变量可以是任意类型。
- 方法实现:接口中的方法默认是抽象的,不能有实现(除非是默认方法),而抽象类可以有抽象方法和具体方法。
- 构造器:抽象类可以有构造器,接口不能有。
- 访问修饰符:接口的方法默认是公共的,不能有访问修饰符;抽象类的方法可以有访问修饰符。

选择使用接口还是抽象类取决于具体的设计需求。如果需要定义一组不相关类共有的行为,可以使用接口。如果需要定义一个基类,它提供了一些共同的属性和方法,并且想要强制子类提供其他方法的实现,那么抽象类是更好的选择。

[] 什么是单例模式?

单例模式(Singleton Pattern)是一种常用的软件设计模式,其核心目的是确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。单例模式在Java中的实现通常遵循以下几个原则:

1. 私有构造函数:为了防止外部通过new操作符创建类的多个实例,单例类的构造函数是私有的。

2. 静态私有实例:类自身持有其唯一实例的引用,这个实例通常是静态的,因为这样即使多次获取单例对象,返回的都是同一个对象。

3. 公有的静态方法:提供一个公有的静态方法,通常是getInstance,用于返回类的唯一实例。如果实例不存在,该方法会创建一个实例;如果已存在,则直接返回该实例。

单例模式的实现方式有多种,以下是几种常见的实现方法:

懒汉式(线程不安全)

public class Singleton {
   private static Singleton instance;

   private Singleton() {}

   public static Singleton getInstance() {
       if (instance == null) {
           instance = new Singleton();
       }
       return instance;
   }
}

懒汉式(线程安全)

public class Singleton {
   private static Singleton instance;

   private Singleton() {}

   public synchronized static Singleton getInstance() {
       if (instance == null) {
           instance = new Singleton();
       }
       return instance;
   }
}

饿汉式

public class Singleton {
   private static final Singleton instance = new Singleton();

   private Singleton() {}

   public static Singleton getInstance() {
       return instance;
   }
}

静态内部类

public class Singleton {
   private Singleton() {}

   private static class SingletonHolder {
       private static final Singleton INSTANCE = new Singleton();
   }

   public static Singleton getInstance() {
       return SingletonHolder.INSTANCE;
   }
}

枚举实现

public enum Singleton {
   INSTANCE;

   public void someMethod() {
       // 实例方法
   }
}

单例模式在以下场景中非常有用:

- 当一个类只能有一个实例时,如配置管理器、连接池等。
- 当创建对象的资源非常昂贵,需要重复利用时。

然而,单例模式也有一些缺点,例如它可能会使代码难以测试,并且违反了高内聚低耦合的原则。因此,在决定使用单例模式时,需要仔细权衡其优缺点。

相关文章
|
2天前
|
安全 算法 Java
java多线程面试题2019整理
java多线程面试题2019整理
|
2天前
|
负载均衡 NoSQL Dubbo
java分布式面试快问快答
java分布式面试快问快答
9 0
|
2天前
|
XML Java 数据库连接
面试必备!Java核心技术100+面试题
面试必备!Java核心技术100+面试题
|
2天前
|
算法 Java 调度
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
7 0
|
2天前
|
SQL 网络协议 Java
技术经验分享:Java不会或做错的面试题总结
技术经验分享:Java不会或做错的面试题总结
11 0
|
2天前
|
安全 Java 中间件
《面试专题-----经典高频面试题收集一》解锁 Java 面试的关键:深度解析常见高频经典面试题(第一篇)
《面试专题-----经典高频面试题收集一》解锁 Java 面试的关键:深度解析常见高频经典面试题(第一篇)
8 0
|
2天前
|
安全 Java API
《面试专题-----经典高频面试题收集三》解锁 Java 面试的关键:深度解析并发编程基础篇高频经典面试题(第三篇)
《面试专题-----经典高频面试题收集三》解锁 Java 面试的关键:深度解析并发编程基础篇高频经典面试题(第三篇)
7 0
|
2天前
|
Java
Java面试题整理附答案【基础篇】
Java面试题整理附答案【基础篇】
|
15小时前
|
Java 数据处理 调度
Java多线程编程入门指南
Java多线程编程入门指南
|
1天前
|
监控 安全 算法
如何有效地处理Java中的多线程
如何有效地处理Java中的多线程