Java 实例 – 如何执行编译过 Java 文件(手把手讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

在 Java 编程的世界中,从编写代码到最终运行程序,需要经历“编写→编译→执行”三个核心步骤。对于许多编程新手而言,如何将编译后的 Java 文件转化为可运行的程序,往往是一道需要跨越的门槛。本文将以“Java 实例 – 如何执行编译过 Java 文件”为核心,通过实例讲解、比喻说明和代码演示,帮助读者系统掌握这一过程。无论是刚接触 Java 的新手,还是希望巩固基础的中级开发者,都能在此找到实用的知识点。


一、Java 文件的编译与执行流程解析

1.1 编译与执行的底层逻辑

Java 语言的执行流程分为两个阶段:

  1. 编译阶段:将人类可读的.java源代码文件,通过 Java 编译器(javac) 转换为 字节码(.class 文件)
  2. 执行阶段:通过 Java 虚拟机(JVM) 解释并运行字节码文件,最终生成可执行的结果。

形象比喻

  • 编译过程如同将一本英文小说翻译成中文:源代码是“英文原稿”,编译器是“翻译者”,而生成的字节码则是“中文译本”。
  • 执行过程则是“读者(JVM)”通过阅读译本(字节码),理解并执行其中的逻辑。

1.2 关键工具与环境要求

  • Java 开发工具包(JDK):包含 javacjava 命令,是编译和执行 Java 程序的基础。
  • 集成开发环境(IDE):如 IntelliJ IDEA 或 Eclipse,可简化编译与执行流程。

步骤验证
在命令行中输入以下命令,确认环境已正确配置:

javac -version  
java -version  

若显示版本信息,则表明 JDK 已安装成功。


二、从零开始:通过命令行编译与执行 Java 程序

2.1 第一个 Java 程序:Hello World

2.1.1 编写源代码

创建一个名为 HelloWorld.java 的文件,代码如下:

public class HelloWorld {  
    public static void main(String[] args) {  
        System.out.println("Hello, Java World!");  
    }  
}  

关键点说明

  • 类名必须与文件名完全一致(区分大小写)。
  • main 方法是程序的入口点,格式固定为 public static void main(String[] args)

2.1.2 编译 Java 文件

在命令行中切换到文件所在目录,执行编译命令:

javac HelloWorld.java  

成功编译后,会生成 HelloWorld.class 字节码文件。

2.1.3 运行程序

通过 java 命令执行编译后的文件:

java HelloWorld  

终端将输出 Hello, Java World!,表示程序运行成功。


2.2 常见编译错误及解决方案

2.2.1 类名与文件名不匹配

错误示例
若文件名为 Hello.java,但类名为 HelloWorld,编译时会提示:

HelloWorld is not public in Hello.java. Cannot be accessed in another package  

解决方法:确保类名与文件名完全一致。

2.2.2 缺少主方法(main 方法)

若删除 main 方法后编译,会得到错误:

error: no main method found in HelloWorld  

解决方法:添加符合规范的 main 方法。


三、多文件项目的编译与执行

3.1 依赖关系的处理

在实际开发中,程序通常由多个类组成。例如,假设存在一个 Calculator 类和一个 Main 类:

// Calculator.java  
public class Calculator {  
    public static int add(int a, int b) {  
        return a + b;  
    }  
}  

// Main.java  
public class Main {  
    public static void main(String[] args) {  
        System.out.println(Calculator.add(3, 5));  
    }  
}  

3.1.1 编译多文件项目

使用 javac 命令时,需同时指定所有源文件:

javac Calculator.java Main.java  

或使用通配符:

javac *.java  

3.1.2 运行主类

执行 Main 类即可:

java Main  

输出结果为 8


3.2 使用 javac 的高级选项

3.2.1 指定输出目录

通过 -d 参数指定编译后的字节码存放路径:

javac -d bin *.java  

此命令会将生成的 .class 文件存放在 bin 目录下。

3.2.2 显示详细编译信息

使用 -verbose 参数查看编译过程的详细日志:

javac -verbose Main.java  

四、通过 IDE 简化编译与执行流程

4.1 IntelliJ IDEA 的使用示例

4.1.1 创建项目

  1. 打开 IntelliJ IDEA,选择 Create New Project
  2. 选择 Java 模板,配置项目名称和 SDK 版本,点击 Create

4.1.2 编写与运行代码

  • src 目录下新建 Java 类,编写代码后,点击编辑器右侧的 Run 按钮(绿色三角形)。
  • IDE 会自动编译并运行程序,输出结果直接显示在下方的 Run 窗口。

优势

  • 自动处理依赖关系,无需手动编译。
  • 提供实时错误提示和代码补全功能。

五、处理复杂场景:依赖管理与模块化

5.1 使用 Maven 管理依赖

对于需要引入外部库的项目,Maven 是常用的构建工具。例如,若要使用 JUnit 5 进行单元测试:

  1. pom.xml 文件中添加依赖:
<dependency>  
    <groupId>org.junit.jupiter</groupId>  
    <artifactId>junit-jupiter-api</artifactId>  
    <version>5.8.1</version>  
    <scope>test</scope>  
</dependency>  
  1. 通过 Maven 命令编译并执行:
mvn compile  
mvn test  

5.2 模块化编译(JPMS)

Java 9 引入的模块化系统可通过 module-info.java 文件定义模块依赖:

module myapp {  
    requires java.base;  
    exports com.example;  
}  

编译时需指定模块路径:

javac --module-path src -d out/module-info.java  

六、常见问题与最佳实践

6.1 字节码文件丢失或损坏

若执行时提示 Could not find or load main class,可能原因包括:

  • 字节码文件未生成(编译失败)。
  • 类路径(classpath)配置错误。

解决方法

  • 重新编译项目。
  • 显式指定类路径:
    java -cp . HelloWorld  
    

6.2 性能优化建议

  • 对于大型项目,使用增量编译工具(如 Gradle)减少重复编译时间。
  • 通过 javac -J-Xmx1024m 调整 JVM 内存参数,提升编译效率。

结论

通过本文的实例演示和深入解析,读者已掌握了从编写 Java 源代码到最终执行的完整流程。无论是通过命令行的精细化操作,还是借助 IDE 的自动化工具,编译与执行的核心逻辑始终围绕 编译器转换虚拟机执行 两大环节展开。对于开发者而言,理解这一过程不仅有助于解决常见错误,更能为后续学习多线程、网络编程等进阶内容打下坚实基础。

掌握“Java 实例 – 如何执行编译过 Java 文件”这一技能后,建议读者尝试以下实践:

  1. 将代码封装为可执行的 JAR 包(jar 命令)。
  2. 探索不同 JVM 参数对程序性能的影响。
  3. 结合实际项目,应用依赖管理和模块化技术。

编程之路如同搭建积木,每个环节的扎实积累都将为构建复杂系统提供无限可能。

最新发布