Java——javac.exe、java.exe、javaw.exe的区别及Java运行机制

简介: Java——javac.exe、java.exe、javaw.exe的区别及Java运行机制

1. javac.exe


Java编译器,将.java 文件编译成 .class 文件,即将源代码文件编译成字节码文件,字节码文件还不是机器能直接运行的文件。 javac.exe 编译后得到的 .class 文件是二进制指令,但不是机器指令,而是 Java 虚拟机可识别的指令。


2. java.exe


Java解释器,启动 JVM(Java虚拟机),将 .class 文件一行一行地解释成机器指令执行。(由 Java 虚拟机对字节码进行解释和执行) 这就是为什么 Java 程序能跨平台运行的原因。无论是在Windows、Linux、MAC等系统上,只要装有相应版本的 JVM,该JVM 就能把 .class 文件解释成机器指令执行。实现“一次编译,随处运行”。


3. javaw.exe


主要用于启动基于GUI的应用程序。跟 java 命令相对的,运行 java 命令时,会出现并保持一个console窗口,程序中的信息可以通过 System.out 在 console 内输出,而运行 javaw,开始时会出现 console,当主程序调用之后,console 就会消失。


编译:.java(源代码) ---> .class(字节码)
解释:.class(字节码) ---> 加载并启动JVM(类加载) ---> .class(机器指令)
执行:通过JVM来完成运行输出


4.Java运行机制


①编写一个Java源文件 Main.java。


②使用 javac Main.java 的命令开启 Java编译器进行编译。


③编译完成之后,会自动生成一个 Main.class 的字节码文件。


④使用 java Main 的命令启动 Java虚拟机(JVM)运行程序,JVM首先将编译好的字节码文件加载到内存(这个过程称为类加载),它是由类加载器完成的,然后 JVM 会通过 Java 解析器对加载到内存中的 Java 类进行解析执行。


⑤执行后会生成计算机可以识别的机器码文件。


⑥机器码文件在计算机运行并显示最终的结果。


相关文章
|
2天前
|
Java
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
17 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
2天前
|
Java Apache Maven
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
15 6
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
|
1天前
|
Java 程序员
深入理解Java中的异常处理机制
本文将深入探讨Java中的异常处理机制,通过详细的示例代码和解释,帮助读者更好地理解和应用Java异常处理。我们将从基本概念入手,逐步深入到高级特性,如自定义异常、异常链以及最佳实践。
|
6天前
|
Java
深入理解Java中的异常处理机制
【9月更文挑战第34天】在Java的世界里,异常处理是代码健壮性的守护神。本文将带你探索Java异常处理的奥秘,从基础语法到高级技巧,我们一步步揭开异常处理的面纱。你将学会如何捕获、声明和处理异常,以及如何自定义异常类型。让我们开始这段旅程,让代码更加稳健和可靠吧!
|
2天前
|
自然语言处理 Java 数据处理
Java IO流全解析:字节流和字符流的区别与联系!
Java IO流全解析:字节流和字符流的区别与联系!
12 1
|
2天前
|
缓存 安全 Java
Java中 final、finally、finalize 有什么区别?
本文详细阐述了Java中`final`、`finally`和`finalize`的区别:`final`用于修饰类、方法和变量以表示不可变性;`finally`是用于确保在`try-catch`结构中无论是否发生异常都能执行的代码块;而`finalize`是`Object`类的方法,用于在对象被垃圾回收前执行清理工作,但在JDK 9中已被标记为弃用。
5 0
Java中 final、finally、finalize 有什么区别?
|
2天前
|
Java
Java中抽象类和接口有什么区别?
本文阐述了Java中抽象类和接口的区别,包括类型扩展、方法/属性访问控制符、方法实现、使用目的等方面的不同,并提供了抽象类和接口的使用示例,以及Java中其他类型的类(普通类、内部类等)的简介。
6 0
Java中抽象类和接口有什么区别?
|
2天前
|
Java
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
本文介绍了Java中this和super关键字的用法,包括在构造方法中使用this来区分参数和成员变量、使用super调用父类构造方法和方法,以及它们在同一个方法中同时使用的场景。
10 0
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
|
2天前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
19 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
3天前
|
Java
深入浅出Java异常处理机制
【9月更文挑战第37天】在Java编程的世界里,异常处理是一项基础而重要的技能。它就像是我们生活中的急救箱,遇到意外时能及时救治,避免程序崩溃。本文将通过生动的例子和易于理解的语言,带你了解Java中的异常处理机制,从基本的try-catch语句到自定义异常的创建,让你的程序更加健壮和可靠。准备好了吗?让我们一起走进Java异常处理的大门,探索它的奥秘吧!