github加星 star 艾米莉2026Java 基础知识面试题 覆盖核心考点,面试复习必备

28 阅读8分钟

1. 何为编程

编程是指为解决特定问题,使用程序设计语言编写代码,使计算机按照指令完成任务的过程。本质是人与计算机的交流,需将解决问题的思路、方法转化为计算机可理解的形式。

Taimili 艾米莉 ( 一款专业的 GitHub star 管理和github 加星涨星工具taimili.com )

艾米莉 是一款优雅便捷的 GitHub star 管理和github 加星涨星工具,基于 PHP & javascript 构建, 能对github star fork follow watch 刷星管理和提升,最适合github 的深度用户

WX20251021-210346@2x.png

2. 什么是 Java

Java 是一门静态面向对象编程语言,吸收了 C++ 的优点,摒弃了多继承、指针等复杂概念,兼具功能强大与简单易用的特性。其核心优势是极好地实现了面向对象理论,支持开发者以优雅的思维进行复杂编程。

3. JDK 1.5 后的三大版本

  • Java SE(标准版) :前身为 J2SE,支持桌面、服务器、嵌入式等场景的应用开发,是 Java EE 和 Java ME 的基础,包含 Web 服务开发相关类。
  • Java EE(企业版) :前身为 J2EE,基于 Java SE 构建,提供 Web 服务、组件模型、通信 API 等,用于开发可移植、健壮的企业级应用。2018 年 2 月更名为 Jakarta EE。
  • Java ME(微型版) :前身为 J2ME,面向移动设备和嵌入式设备(如手机、机顶盒),提供灵活的用户界面、安全模型和网络协议支持,实现 “一次编写,多设备运行”。

4. JDK、JRE、JVM 的区别

三者是包含关系:JDK 包含 JRE,JRE 包含 JVM

  • JDK:Java 开发工具包,面向开发者,包含 JRE 及编译工具(javac.exe)、打包工具(jar.exe)、JVM 监控工具等。安装 JDK 后无需单独安装 JRE。
  • JRE:Java 运行时环境,面向使用者,包含 JVM 和核心类库(如 java.lang 包)。核心类库提供基本数据类型、字符串处理、线程管理等基础功能,系统默认加载。仅需运行 Java 程序时,安装 JRE 即可。
  • JVM:Java 虚拟机,是跨平台的核心。不同操作系统有对应的 JVM 实现,Java 程序通过 JVM 运行,无需针对不同平台修改代码。

5. 跨平台性及原理

  • 跨平台性:Java 程序一次编译后,可在多个系统平台上运行。
  • 实现原理:Java 程序通过 JVM 运行,只要目标系统安装了对应的 JVM,即可执行编译后的字节码文件,无需重新编译。

6. Java 语言的特点

  • 简单易学:语法与 C/C++ 接近,降低学习成本。
  • 面向对象:支持封装、继承、多态三大特性。
  • 平台无关性:依赖 JVM 实现跨平台。
  • 网络编程友好:设计初衷即简化网络编程。
  • 支持多线程:允许程序并行执行多项任务。
  • 健壮性:具备强类型机制、异常处理、自动垃圾回收等特性。
  • 安全性好:避免指针直接操作内存,提供安全的类加载机制。

7. 字节码及核心优势

  • 字节码:Java 源代码经编译器编译后生成的.class 文件,不面向特定处理器,仅面向 JVM。
  • 核心优势:兼顾执行效率与可移植性。既解决了传统解释型语言效率低的问题,又保留了 “一次编译,多平台运行” 的特性,无需针对不同平台重新编译。

8. Java 程序的执行流程

Java 源代码 → 编译器 → JVM 可执行的字节码(虚拟指令) → JVM → 解释器 → 机器二进制码 → 程序运行。

9. 主类的定义及应用程序与小程序的区别

  • 主类:一个 Java 程序中仅有一个主类,是程序执行的入口点。
  • 应用程序主类:包含 main () 方法的类,无需强制为 public 类。
  • 小程序主类:继承自 JApplet 或 Applet 的子类,必须为 public 类,无 main () 方法,嵌入浏览器运行,通过 init () 或 run () 方法启动。

10. Java 与 C++ 的区别

  • 相同点:均为面向对象语言,支持封装、继承、多态。

  • 不同点:

    1. Java 无指针,内存访问更安全;
    2. Java 类支持单继承,接口支持多继承,C++ 支持多重继承;
    3. Java 具备自动内存管理(垃圾回收),无需手动释放内存。

11. Oracle JDK 与 OpenJDK 的对比

  • 发布周期:Oracle JDK 每 3 年发布一次,OpenJDK 每 3 个月发布一次。
  • 开源性:OpenJDK 完全开源,Oracle JDK 是其商业实现,非完全开源。
  • 稳定性:Oracle JDK 更稳定,包含更多类和错误修复,适合企业级应用。
  • 性能:Oracle JDK 在响应性和 JVM 性能上更优。
  • 长期支持:Oracle JDK 不提供长期支持,需持续更新至最新版本;OpenJDK 基于 GPL v2 许可,Oracle JDK 基于二进制代码许可协议。

二、基础语法

1. 数据类型

Java 是强类型语言,每种数据都有明确类型,内存分配大小固定。分为基本数据类型引用数据类型

基本数据类型详情

类型分类类型名称关键字占用内存取值范围成员变量默认值
整数型字节型byte1 字节-128(-2^7)~ 127(2^7-1)0
整数型短整型short2 字节-32768(-2^15)~ 32767(2^15-1)0
整数型整型int4 字节-2147483648(-2^31)~ 2147483647(2^31-1)0
整数型长整型long8 字节-9223372036854775808(-2^63)~ 9223372036854775807(2^63-1)0L
浮点型单精度浮点型float4 字节-3.403E38 ~ 3.403E380.0F
浮点型双精度浮点型double8 字节-1.798E308 ~ 1.798E3080.0D
字符型字符型char2 字节单个字符(如 'a'、'A'、' 家 ')\u0000
布尔型布尔型boolean1 字节true、falsefalse

引用数据类型

包括类(class)、接口(interface)、数组([]),其默认值为 null。

2. switch 语句的适用类型

  • Java 5 及以前:仅支持 byte、short、char、int。
  • Java 5:新增支持枚举(enum)类型。
  • Java 7:新增支持 String 类型。
  • 所有版本均不支持 long 类型。

3. 高效计算 2×8 的方式

使用位运算 2 << 3,左移 3 位等价于乘以 2 的 3 次方(8),位运算直接操作内存,效率高于算术运算。同理,右移 3 位(2 >> 3)等价于除以 8。

4. Math.round () 的计算结果

  • Math.round(11.5) 返回 12,Math.round(-11.5) 返回 - 11。
  • 原理:对参数加 0.5 后进行下取整。

5. float f=3.4 是否正确

不正确。3.4 默认是 double 类型(双精度),将 double 赋值给 float 属于窄化转换,会造成精度损失。正确写法:float f = (float)3.4;float f = 3.4F;

6. short 类型变量运算的语法正确性

  • short s1 = 1; s1 = s1 + 1; 错误。s1+1 的结果为 int 类型,需强制转换为 short 才能赋值。
  • short s1 = 1; s1 += 1; 正确。+= 运算符隐含强制类型转换,等价于 s1 = (short)(s1 + 1);

7. Java 的编码方案及特点

采用 Unicode 编码标准,为每个字符分配唯一数值,支持多语言、多平台通用,确保字符在不同环境下的一致性。

8. Java 注释的分类及规范

  • 单行注释:// 注释内容,用于单行说明。
  • 多行注释:/* 注释内容 */,用于多行说明,不可嵌套。
  • 文档注释:/** 注释内容 */,用于生成 API 文档(如通过 javadoc 工具),不可嵌套。
  • 作用:提升代码可读性,便于维护和协作,注释内容在编译时被忽略,不影响程序执行。

9. 访问修饰符的作用范围

Java 支持 4 种访问修饰符,用于控制类、变量、方法的访问权限:

修饰符当前类同包子类其他包
private×××
default(无修饰符)××
protected×
public
  • 注意:private 和 protected 不能修饰外部类,default 和 public 可修饰外部类。

10. & 和 && 的区别

  • &:有两种用途,一是按位与(针对数值类型),二是逻辑与(针对布尔类型),无论左边结果是否为 false,右边都会执行。
  • &&:仅用于逻辑与,属于短路运算。若左边结果为 false,右边表达式直接跳过,不执行。
  • 补充:逻辑或(|)与短路或(||)的区别同理,|| 在左边为 true 时,右边不执行。

11. goto 关键字的状态

goto 是 Java 的保留字,但当前版本未启用,无实际使用场景。

12. final 关键字的作用

  • 修饰类:类不能被继承。
  • 修饰方法:方法不能被重写。
  • 修饰变量:变量为常量,引用不可修改(引用指向的对象内容可修改)。

13. final、finally、finalize 的区别

  • final:修饰类、方法、变量,限制继承、重写和变量赋值。
  • finally:用于 try-catch 代码块,无论是否发生异常,其内部代码都会执行,常用于关闭资源(如流、数据库连接)。
  • finalize:Object 类的方法,由垃圾回收器调用,用于对象回收前的资源释放,是对象可回收的最后判断依据。