一、Java 平台无关性与跨平台原理
1. 什么是平台无关性?
平台无关性指程序不依赖具体操作系统或硬件环境运行的特性。
核心体现:
- 代码可在 Windows、Linux、macOS 等不同操作系统运行
- 无需为不同硬件架构(如 x86、ARM)单独编译
- 通过 Java 虚拟机(JVM)屏蔽底层差异实现 "一次编写,到处运行"
2. 什么是编译与解释并存?
Java 程序先由编译器将源代码编译为字节码(编译过程),再由 JVM 逐行解释执行字节码(解释过程),二者结合实现程序运行
Java 采用混合执行模式:
- 编译阶段:
.java
源文件经javac
编译为字节码文件(.class)(静态编译) - 解释阶段:JVM 通过类加载器读取字节码,由 ** 解释器(Interpreter)** 逐行解释执行
- JIT 编译器优化:热点代码(多次执行的代码块)会被 ** 即时编译器(JIT)** 动态编译为本地机器码(动态编译),提升执行效率
3. Java 如何实现 "一次编写,到处运行"?
核心在于其跨平台的技术架构设计,通过 字节码和 Java 虚拟机的协同工作,屏蔽了不同操作系统和硬件的底层差异。
实现流程:
- 编写统一的 Java 源代码(
.java
) - 编译器生成与平台无关的字节码(Bytecode)
- 不同平台部署对应版本的 JVM(如 Windows 版 JVM、Linux 版 JVM)
- JVM 作为抽象层,将字节码转换为对应平台的机器指令
关键技术点:
- 字节码格式统一(所有平台的.class 文件结构一致)
- JVM 针对不同平台实现独立的执行引擎
- 屏蔽了操作系统的 API 差异(通过 Java API 接口调用)
二、面向对象的基本特征
面向对象的三大核心特征是什么?
封装、继承和 多态
1. 封装(Encapsulation)
- 定义:将数据(属性)和操作数据的方法(行为)封装在一个类中
- 实现方式:
- 使用
private
关键字隐藏内部属性 - 通过
public
方法(getter/setter)暴露访问接口
- 使用
- 作用:
- 保护数据完整性
- 简化外部调用逻辑
- 降低模块间耦合度
2. 继承(Inheritance)
- 定义:子类(Subclass)继承父类(Superclass)的属性和方法
- 实现方式:
- 使用
extends
关键字(单继承) - 父类声明为
public
/default
访问权限
- 使用
- 作用:
- 代码复用
- 建立类之间的层次关系
- 支持多态特性
3. 多态(Polymorphism)
- 定义:同一引用类型变量调用相同方法,呈现不同行为
- 实现条件:
- 继承 / 实现关系(子类继承父类或实现接口)
- 方法重写(Override)
- 父类引用指向子类对象(向上转型)
- 典型场景:
Animal animal = new Cat(); // 父类引用指向子类对象 animal.speak(); // 调用Cat类重写的speak()方法
三、Java 虚拟机与字节码核心概念
1. 什么是 Java 虚拟机(JVM)?
Java 虚拟机(JVM)是运行 Java 字节码的虚拟计算机,负责将字节码解释或编译为对应平台的机器码并执行,实现 Java 程序跨平台运行。
- 本质:虚拟的计算机系统,运行 Java 字节码的抽象层
- 核心功能:
- 类加载机制(ClassLoader)
- 内存管理(堆、栈、方法区等)
- 字节码执行引擎(解释器 / JIT 编译器)
- 垃圾回收(GC)机制
- 重要性:实现 Java 跨平台的核心组件,不同平台需安装对应 JVM 版本
2. 什么是字节码(Bytecode)?
- 定义:介于 Java 源代码和机器码之间的中间表示形式
- 文件格式:
.class
文件,由 8 位字节组成的二进制流 - 特点:
- 与平台无关(不依赖具体操作系统 / 硬件)
- 面向 JVM 设计(而非具体 CPU 架构)
- 包含类的元数据(如字段、方法、访问权限等)
3. 字节码的好处有哪些?
字节码可跨平台运行,提高代码可移植性,且加载速度快、安全性高,便于 Java 虚拟机解释执行与优化。
优势 | 具体体现 |
---|---|
跨平台性 | 一份字节码可在任意安装 JVM 的平台运行 |
安全性 | 字节码验证机制(如类型检查、访问控制)防止恶意代码攻击 |
动态性 | 支持运行时类加载、反射机制,便于实现框架动态扩展(如 Spring IoC) |
可移植性 | 源代码只需编译一次,生成的字节码可部署到不同环境 |
与语言无关性 | 除 Java 外,Groovy、Kotlin 等语言也可编译为字节码运行于 JVM |