Java入门——Java跨平台的原理

一、Java跨平台的原理

编写代码,然后整体的进行编译。多出一个后缀名为obj的文件,然后再去交给不同设备去运行。会有一个小细节:因为计算机是不一样的 ,有些硬件也可能不一样,就会存在兼容问题。那么就只能针对不同的操作系统,都要重新的进行编译,更夸张的是,我编写代码的计算机硬件跟你运行的计算机硬件差别特别大的话,就算是同一个操作系统都可能没法运行。所以就不具备跨平台性质。

解释型语言:就是读一行编译一行然后去运行,读一行编译一行然后去运行。编写代码、按行编译、再交给不同设备去运行。细节:python是不会产生新的文件的,所以说python程序员天生开源,因为就是拿着源文件读一行编译一行运行一行的。

Java是混合型的,首先是把Java文件整体的编译成一个.class文件,也称之为字节码文件(与平台无关的中间代码------字节码(.class 文件))。然后再按行交给设备去运行。细节:他运行时不是直接运行在计算机中的,而是在虚拟机中。

  • 字节码是一种虚拟机指令集,不是 CPU 能直接执行的指令。
  • 它是 Java 程序的"通用语言",不依赖于任何具体硬件或操作系统。

Java 虚拟机(JVM - Java Virtual Machine)

字节码不能直接在硬件上运行,必须由 JVM 来解释或编译执行。

  • 每个操作系统都有对应的 JVM 实现(由 Oracle、OpenJDK 或其他厂商提供)。
  • JVM 负责将字节码 翻译成当前平台的本地机器码,并执行。
  • 这个过程可以是:
    • 解释执行(逐行翻译,较慢)
    • 即时编译(JIT)(HotSpot JVM 会把热点代码编译为本地机器码,提升性能)

🔁 所以流程是:
Java 源码 → 编译 → 字节码(.class)→ JVM(平台相关)→ 本地机器码 → 运行

复制代码
[Windows]      [Linux]       [macOS]
   |               |              |
[JVM for Win] [JVM for Linux] [JVM for Mac]
   \               |              /
    \              |             /
     \             |            /
      \            |           /
        [相同的 .class 字节码文件]
                ↑
         javac 编译生成
                ↑
         Java 源代码 (.java)

💡 关键点:Java 程序不直接和操作系统打交道,而是通过 JVM "中介"来运行 。只要目标平台有 JVM,就能运行同一个 .class 文件。

二、JDK和JRE

如果我们编写好的代码给到别人的电脑去运行,人家不需要修改代码的。别人的电脑就需要具备:JVM虚拟机(代码真正运行的地方)、核心类库(是Java中写好的库文件)。一部分的开发工具就不需要了如:javac编译工具、jdb调式工具。JRE就是包含以上的运行环境。

课程学习来源于-B站@itheima!

相关推荐
Python私教17 小时前
GenericAgent PySide6 桌面应用深度解析:悬浮按钮 + 聊天面板的原生 Qt 方案
开发语言·数据库·qt
矢志航天的阿洪17 小时前
用 MATLAB 控制 STK Aviator:从零搭建一个 AWACS 支援作战场景
开发语言·matlab
一乐小哥17 小时前
坚持迭代一个 Chrome 插件半年后,我的同事问我:"这不是 Chrome 自带的功能吗?"
chrome·github·ai编程
澈20718 小时前
STL迭代器:容器遍历的万能钥匙
开发语言·c++
Smilezyl18 小时前
一个独立开发者,靠一份 markdown 驱动 Claude Code, 用 20 天跑通 9 个包的 monorepo 工程
前端·人工智能·github
峰向AI18 小时前
做小红书、画信息图、动漫图:这个skill太实用了
github
Cosolar18 小时前
封神级 TTS!VoxCPM2 凭连续表征,玩转多语言合成 + 创意音色 + 无损声纹克隆
人工智能·llm·github
码流怪侠18 小时前
【GitHub】andrej-karpathy-skills:让 AI 编程助手告别三大通病
人工智能·程序员·github
码流怪侠18 小时前
【GitHub】OpenClaw:开源个人AI助手的新标杆
人工智能·程序员·github
TeamDev18 小时前
JxBrowser 9.0.0 版本发布啦!
java·前端·混合应用·jxbrowser·浏览器控件·跨平台渲染·原声输入