Java 环境与程序结构

笔记/Java/Java基础/Java基础语法/Java 环境与程序结构

背景与动机#

学习 Java 的第一步不是背语法,而是先搞清楚一段 .java 源码如何变成可执行程序。

Java 程序的基本链路是:

  1. 使用 javac.java 源文件编译成 .class 字节码。
  2. 使用 java 命令启动 JVM。
  3. JVM 加载字节码并执行 main 方法。

理解这条链路后,后面的类、包、访问修饰符、异常、集合等内容才不会变成孤立知识点。

核心原理拆解#

1. JDK、JRE、JVM 分别是什么#

这 3 个词经常一起出现,但职责不同:

  • JVM:Java 虚拟机,负责加载和执行字节码。
  • JRE:Java 运行环境,包含 JVM 和运行 Java 程序所需的基础库。
  • JDK:Java 开发工具包,包含 JRE、编译器 javac、调试工具等开发工具。

img
img

学习和开发阶段通常安装 JDK,因为只安装运行环境不能编译源码。

2. .java.class 的关系#

.java 是人写的源码文件,.class 是编译后生成的字节码文件。

例如:

Terminal window
javac Hello.java

执行后会生成:

Hello.class

然后再运行:

Terminal window
java Hello

注意这里运行的是类名 Hello,不是文件名 Hello.class

3. main 方法是程序入口#

Java 应用程序的常见入口写法是:

public static void main(String[] args) {
}

可以先这样理解:

  • public:JVM 可以从类外访问这个方法。
  • static:不需要先创建对象就能调用。
  • void:方法没有返回值。
  • String[] args:接收命令行参数。

4. 类名和文件名通常要一致#

如果一个 .java 文件里有 public class Hello,文件名必须是:

Hello.java

否则编译器会报错。这是 Java 源文件组织的基础规则。

最小可运行代码示例#

创建 Hello.java

public class Hello {
public static void main(String[] args) {
System.out.println("hello, java");
}
}

编译并运行:

Terminal window
javac Hello.java
java Hello

输出:

hello, java

常见陷阱与错误示例#

1. 运行时带上 .class#

错误写法:

Terminal window
java Hello.class

正确写法:

Terminal window
java Hello

java 命令接收的是类名,不是字节码文件名。

2. 文件名和 public 类名不一致#

错误示例:

public class Hello {
}

如果文件名叫 Demo.java,会编译失败。应改成 Hello.java,或者把类名改成 Demo

3. 只安装运行环境却想编译代码#

如果终端能运行 java,但不能运行 javac,通常说明当前环境没有正确安装或配置 JDK。

面试高频问题#

1. JDK、JRE、JVM 有什么区别#

JVM 负责执行字节码,JRE 是运行 Java 程序的环境,JDK 是开发工具包,包含编译器和开发工具。开发阶段通常需要 JDK。

2. Java 为什么能跨平台#

Java 源码先编译成平台无关的字节码,再由不同平台上的 JVM 执行。跨平台的关键是 JVM 屏蔽了操作系统差异。

3. java Hello 为什么不写 .class#

因为 java 命令启动的是类加载过程,参数是类名。.class 是磁盘上的文件扩展名,不是 Java 类的运行入口名称。

一句话总结#

Java 程序的最小闭环是:写 .java 源码,用 javac 编译成 .class 字节码,再用 java 启动 JVM 执行包含 main 方法的类。

文章目录

文章目录