首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【最新】java面试题-基础篇

【最新】java面试题-基础篇

作者头像
命运之光
发布2025-07-10 08:15:59
发布2025-07-10 08:15:59
1180
举报

1、面向对象的特征

逐字稿:

封装是把对象的属性和行为封装成独立个体,隐藏内部实现细节,只公开必要部分。

继承是子类继承父类的属性和行为,并可添加自己所需的属性和行为。

多态是允许不同对象对同一消息做出不同响应,即同一消息根据发送对象不同有不同处理方式。

详细内容:

面向对象的特征:封装、继承、多态、抽象。

  • 封装:就是把对象的属性和行为(数据)结合为一个独立的整体,并尽可能隐藏对

象的内部实现细节,就是把不想告诉或者不该告诉别人的东西隐藏起来,把可以告诉别人的

公开,别人只能用我提供的功能实现需求,而不知道是如何实现的。增加安全性。

  • 继承:子类继承父类的数据属性和行为,并能根据自己的需求扩展出新的行为,提高了代码的复用性。
  • 多态:指允许不同的对象对同一消息做出相应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。封装和继承几乎都是为多态而准备的,在执行期间判断引用对象的实际类型,根据其实际的类型调用其相应的方法。
  • 抽象表示对问题领域进行分析、设计中得出的抽象的概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。在 Java 中抽象用 abstract 关键字来修饰,用 abstract修饰类时,此类就不能被实例化,从这里可以看出,抽象类(接口)就是为了继承而存在的。

2、Java的基本数据类型有哪些?

逐字稿:

Java 的基本数据类型有:

整型:

byte 占 1 个字节。

short 占 2 个字节。

int 占 4 个字节。

long 占 8 个字节。

浮点型:

float 占 4 个字节。

double 占 8 个字节。

字符型:char 占 2 个字节(注:在 Java 中 char 实际占 2 个字节,不是 4 个字节)。

布尔型:boolean,其具体字节数没有明确规定(注:在 Java 规范中并没有明确规定 boolean 占 1 个字节,不同 JVM 实现可能不同)。

3、JDK、JRE、JVM的区别?

逐字稿

JDK(Java Development Kit)是整个 Java 的核心,是 java 开发工具包,包括了 Java 运行环境 JRE、Java 工具和 Java 基础类库。

JRE(Java Runtime Environment)是运行 JAVA 程序所必须的环境的集合,包含 java 虚拟机和 java 程序的一些核心类库。

JVM 是 Java Virtual Machine(Java 虚拟机)的缩写,是整个 java 实现跨平台的最核心的部分,能够运行以 Java 语言写作的软件程序。

4、Java 中==和 equals 的区别

逐字稿:

对于基本类型,双等号(==)比较两边的值是否相同,值相等则返回 true,不等则返回 false。

对于对象类型,双等号(==)比较的是两个对象的地址,即是否是同一个实例,是则返回 true,不是则返回 false。

equals 比较的是对象中的内容,通过重写 equals 方法可以实现内容比较的逻辑。双等号(==)关注对象是否是同一实例,equals 关注对象的值是否相等。

5、接口和抽象类的区别是什么?

逐字稿

抽象类和接口有以下区别:

  1. 定义关键字不同,抽象类使用 “abstract” 定义,接口使用 “interface” 定义。
  2. 抽象程度不同,接口比抽象类更抽象、更纯粹。抽象类可以使用 “public”“protected”“private” 这三个访问修饰符,而接口只有 “public”。
  3. 构造函数方面,抽象类可以有构造函数,接口因为更纯粹所以不能有构造函数。
  4. 在实际项目中,比如 Spring MVC 里,Service 层通常使用接口来实现。

补充一些其他区别,比如抽象类能有普通方法和成员变量,接口只能有抽象方法和常量等。

  • 相同点:
    • 都是抽象形式,都可以有抽象方法,都不能创建对象
    • 都是派生子类形式,抽象类是被子类继承使用,接口是被实现类实现
    • 继承抽象类或者实现接口,都必须重写完他们的抽象方法,否则自己要称为抽象类或者报错!
    • 都能支持多态,实现解耦合
  • 不同点
    • 抽象类中可以定义类的全部普通成员,接口只能定义常量,抽象方法(jdk8新增的三种方式)
    • 抽象类只能被类单继承,接口可以被类多实现。一个类继承抽象类,不能再继承其他类,一个类实现接口,还可以继续继承其他类或者实现其他接口
    • 抽象类体现模板思想,更利于做父类,实现代码的复用性(最佳实践)
    • 接口更适合做功能的解耦合,解耦合性更强更灵活。(最佳实践)
    • 抽象类可以有构造函数;接口不能有。
    • 抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。

6、什么是单例模式?有几种?

逐字稿:

Java 的单例模式是指在多线程环境下,一个类的实例只会被创建一次。单例模式主要有以下几种类型:

  1. 懒汉式
    • 特点:非线程安全,延迟初始化。
    • 原理:将构造器私有化,这样就不能通过new关键字来创建对象。在类中定义一个方法,当调用这个方法时才在方法内通过new创建对象。这种方式是在需要使用对象时才去创建它,所以叫延迟初始化。
  1. 饿汉式
    • 特点:线程安全,在类加载时就完成初始化。
    • 原理:在类中直接定义并初始化单例对象,在类加载时就创建了对象,而不是在使用方法时才创建,这就是与懒汉式的区别。
  1. 双检锁(双重检查锁定)
    • 特点:线程安全,延迟初始化。这种方式结合了懒汉式的延迟初始化优点和饿汉式的线程安全优点。在多线程环境下能高效地保证单例的创建。

单例模式:某个类的实例在 多线程环境下只会被创建一次出来。

  • 懒汉式:非线程安全,延迟初始化。
  • 饿汉式:线程安全,一开始就初始化。
  • 双检锁:线程安全,延迟初始化。

7、重载与重写的区别?

逐字稿:

  • 重载是对象的方法之间,它们方法名相同,但方法的参数列表不同
  • 重写是父子类(包括接口与实现类)中两个同名方法,它们方法名相同,且方法的参数列表相同
  • 重载是编译时由编译器来区分方法,而重写是运行时由解释器来区分方法
  • 有没有发生重写,可以使用 @Override 来检查

P.S.

  • 括号内的说明是为了严谨,自己知道就行,回答时不必说出,这样比较简洁
  • 个人觉得,在回答方法重载时,不必去细说什么参数的类型、个数、顺序,就说参数列表不同就完了
  • 个人觉得,重点在于点出:重载是编译时由编译器来区分方法,而重写是运行时由解释器来区分方法
  • 语法细节,问了再说,不问不必说
    • 重写时,子类方法的访问修饰符要 >= 父类方法的访问修饰符
    • 重写时,子类方法抛出的检查异常类型要 <= 父类方法抛出的检查异常类型,或子类不抛异常
    • 重写时,父子类的方法的返回值类型要一样,或子类方法返回值是父类方法返回值的子类
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、面向对象的特征
  • 2、Java的基本数据类型有哪些?
  • 3、JDK、JRE、JVM的区别?
  • 4、Java 中==和 equals 的区别
  • 5、接口和抽象类的区别是什么?
  • 6、什么是单例模式?有几种?
  • 7、重载与重写的区别?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档