目录

一、什么是对象?

二、Java 的核心特点(面试高频)

1. 平台无关性(一次编写,到处运行)

2. 面向对象(OOP)

3. 自动内存管理(垃圾回收 GC)

三、JVM、JRE、JDK 的关系(必背)

1. 各组件核心作用

2. 通俗理解

四、值传递与引用传递(面试重点坑点)

1. 基本数据类型(值传递)

2. 引用数据类型(仍是值传递)

核心总结

五、面试高频问答(查漏补缺)

总结


一、什么是对象?

对象是 Java 面向对象编程(OOP)的核心载体,可从两个维度理解:

  • 逻辑层面:对象是类的运行时实例,是对现实世界事物的抽象(比如 “张三” 是 “人类” 这个类的一个具体对象);
  • 物理层面:对象是 JVM 堆内存中分配的一块具体内存空间,包含了该实例的属性值和方法执行上下文。

简单来说:类是 “模板”,对象是根据模板生产的 “具体产品”。

二、Java 的核心特点(面试高频)

Java 能成为主流编程语言,核心得益于以下三大特性:

1. 平台无关性(一次编写,到处运行)

这是 Java 最核心的优势,底层逻辑是:

  • Java 源代码(.java)通过编译器编译为字节码文件(.class)
  • 字节码不直接与操作系统交互,而是运行在Java 虚拟机(JVM) 上;
  • 不同操作系统(Windows/Linux/Mac)只需安装对应版本的 JVM,即可执行相同的字节码。

核心:JVM 屏蔽了底层操作系统的差异,让字节码具备跨平台能力。

2. 面向对象(OOP)

Java 是纯面向对象的语言(除了基本数据类型),面向对象的核心优势是:

  • 封装:隐藏内部实现,仅暴露对外接口,提升代码安全性;
  • 继承:复用已有代码,减少冗余;
  • 多态:同一行为不同实现,提升代码灵活性和扩展性。

最终让代码更易维护、复用和扩展。

3. 自动内存管理(垃圾回收 GC)

Java 内置垃圾回收机制(Garbage Collection),核心特点:

  • 开发者无需手动分配 / 释放内存(对比 C/C++ 的 malloc/free);
  • JVM 会自动识别并回收 “不再被引用的对象” 占用的内存;
  • 大幅减少内存泄漏、野指针等内存相关问题,降低开发门槛。

注意:GC 不代表完全不会内存泄漏,比如不合理的对象引用(如静态集合持有对象)仍会导致内存泄漏。

三、JVM、JRE、JDK 的关系(必背)

三者是包含关系,核心公式:JDK > JRE > JVM(“>” 表示包含)。

1. 各组件核心作用

表格

组件 全称 核心作用
JVM Java Virtual Machine(Java 虚拟机) 执行字节码、实现跨平台、负责垃圾回收
JRE Java Runtime Environment(Java 运行时环境) 运行 Java 程序的最小环境,包含 JVM + 核心类库(如 java.lang、java.util)
JDK Java Development Kit(Java 开发工具包) 开发 Java 程序的完整工具包,包含 JRE + 编译 / 调试工具(如 javac 编译器、java 命令、javadoc 文档生成工具)

2. 通俗理解

  • 如果你只需要运行Java 程序(比如运行一个 jar 包),安装 JRE 即可;
  • 如果你需要开发Java 程序(编写、编译、调试代码),必须安装 JDK;
  • JVM 是三者的核心,是 Java 跨平台的基础,JRE 和 JDK 都是围绕 JVM 构建的。

四、值传递与引用传递(面试重点坑点)

核心结论:Java 中只有值传递,不存在引用传递!

很多开发者容易混淆这个概念,下面分两种数据类型拆解:

1. 基本数据类型(值传递)

  • 传递的是值的副本
  • 方法内修改副本的值,不会影响原变量的值。

示例代码:

public class ValuePassDemo {
    public static void changeNum(int num) {
        num = 100; // 修改的是副本的值
    }
    
    public static void main(String[] args) {
        int a = 10;
        changeNum(a);
        System.out.println(a); // 输出10,原变量未改变
    }
}

2. 引用数据类型(仍是值传递)

  • 传递的是对象引用的副本(即内存地址)
  • 方法内可通过副本修改对象的内容(因为指向同一个堆内存对象);
  • 但无法改变原引用的指向(副本是新的引用变量,修改其指向不影响原引用)。

示例代码:

class Person {
    String name;
    public Person(String name) {
        this.name = name;
    }
}

public class ReferencePassDemo {
    // 修改对象内容
    public static void changeName(Person p) {
        p.name = "李四"; // 通过引用副本修改对象内容
    }
    
    // 尝试修改引用指向
    public static void changeRef(Person p) {
        p = new Person("王五"); // 仅修改副本的指向,原引用不受影响
    }
    
    public static void main(String[] args) {
        Person person = new Person("张三");
        
        // 1. 修改对象内容
        changeName(person);
        System.out.println(person.name); // 输出"李四",对象内容被修改
        
        // 2. 尝试修改引用指向
        changeRef(person);
        System.out.println(person.name); // 仍输出"李四",原引用指向未变
    }
}

核心总结

  • 基本类型:传值副本 → 修改副本不影响原变量;
  • 引用类型:传地址副本 → 可改对象内容,但改不了原引用指向;
  • 本质:两者都是 “传递副本”,因此 Java 只有值传递。

五、面试高频问答(查漏补缺)

  1. :为什么 Java 能跨平台?:Java 源代码编译为字节码,字节码运行在 JVM 上,JVM 屏蔽了操作系统差异,实现跨平台。
  2. :JVM、JRE、JDK 的区别?:JVM 是执行字节码的虚拟机;JRE 包含 JVM 和核心类库,用于运行 Java 程序;JDK 包含 JRE 和开发工具,用于开发 Java 程序。
  3. :Java 是值传递还是引用传递?:只有值传递。引用类型传递的是地址副本,可修改对象内容,但无法改变原引用指向。

总结

  1. 对象是类的运行时实例,本质是堆内存中的一块具体内存空间;
  2. Java 核心特点是平台无关性、面向对象、自动内存管理,其中平台无关性依赖 JVM 实现;
  3. JDK 包含 JRE,JRE 包含 JVM,开发需 JDK,运行仅需 JRE;
  4. Java 仅存在值传递:基本类型传值副本,引用类型传地址副本,无法改变原引用指向。

本文为 Java 基础面试核心概念篇,后续会持续更新 Java 基础其他高频考点(如类与接口、异常、集合等),欢迎关注收藏!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐