我学习到的Java概念

0 阅读3分钟

两套运行时的内部构成(浏览器 / Node.js)

并列、独立的两套 JavaScript 运行环境;它们都内置了 V8 引擎

1. 浏览器的内部构成

  • 核心执行引擎:V8 引擎,只负责解析、执行 JS 代码
  • 专属能力:Web API(DOM、BOM、fetch、定时器、事件循环等浏览器特有接口)
  • 额外组件:HTML/CSS 渲染引擎、GUI 界面、安全沙箱
  • 定位:面向网页的客户端运行环境

2. Node.js 的内部构成

  • 核心执行引擎:V8 引擎(和浏览器同源,负责执行 JS)
  • 专属能力:Node 内置 API(文件读写 fs、网络服务 http、进程管理、路径处理等服务端能力)
  • 配套工具:npm、npx、CommonJS/ESM 模块系统等开发工具链
  • 定位:面向服务端 / 工程化的服务端运行环境

Node.js 运行时本体 和 Node.js 完整安装包 区别

1. Node.js 运行时本体(V8 + Node 内置 API)

这是 Node.js 最核心的部分,唯一职责就是运行 JS 代码,除此之外什么都不做。

  • 底层执行引擎:V8,负责解析执行 JS 语法
  • 上层能力库:Node 内置 API(fs 文件读写、http 建服务、path 路径处理等)
  • 对应命令:node xxx.js
  • 类比 Java:等同于 JRE(JVM + Java 核心类库) ,只提供运行能力,不提供开发、打包、依赖管理工具。

举个例子:你写一个 test.js,只用了 fs.readFile 读文件,执行 node test.js 能跑通 —— 这一步只用到了「运行时本体」,没有用到任何额外工具链。

2. Node.js 完整安装包

就是你从官网下载、一键安装的那个安装程序,它 = 运行时本体 + 全套开发工具链。除了能跑 JS 的运行时,还额外附带了:

  • npm:包管理工具,下载第三方依赖、执行脚本命令(对应 Java 的 Maven)
  • npx:一键执行远程 npm 包的工具
  • 核心模块源码、调试工具、性能分析工具等
  • 对应命令:npm installnpm run buildnpx vite
  • 类比 Java:等同于 JDK(JRE + javac/jar 等开发工具)

举个例子:你执行 npm install axios 安装依赖、npm run dev 启动 Vite 开发服务 —— 这些用的是安装包里的工具链,和「运行 JS 代码」本身没有直接关系。

Java核心定位

1. javac(Java Compiler)

  • 本质:Java 源码编译器,一个独立的命令行程序
  • 唯一工作:把你写的 .java 纯文本源代码,翻译成 JVM 能识别的 .class 字节码文件
  • 特点:只做「语法检查 + 代码翻译」,不执行任何业务逻辑,不会运行你的 main 方法、不会打印输出

2. jar 命令

  • 本质:Java 打包归档工具
  • 工作:把编译好的一堆 .class 文件、配置文件、资源文件,打包压缩成一个 .jar 包,方便部署、分发
  • 特点:纯文件打包工具,类似高级版 zip,和代码执行完全无关

3. JVM(Java Virtual Machine)

  • 本质:Java 字节码执行引擎,一个独立的虚拟机进程
  • 唯一工作:加载 .class / .jar 字节码文件,逐行翻译成当前操作系统能识别的机器指令,交给 CPU 执行
  • 特点:真正执行业务代码,你写的循环、判断、接口逻辑、数据库调用,全都是 JVM 在运行时执行

以一个 HelloWorld 程序从编写到运行为例:

  1. 你手写 HelloWorld.java 源代码
  2. 执行 javac HelloWorld.java:javac 编译器检查语法,生成 HelloWorld.class 字节码
  3. (可选)执行 jar 命令:把 class 文件、配置文件打包成 demo.jar
  4. 执行 java HelloWorld(或 java -jar demo.jar):启动 JVM 进程
  5. JVM 加载字节码,翻译成机器码,真正执行 main 方法,控制台打印输出

前端类比记忆

  • javac ≈ tsc / babel:把高级源码(TS/ES6+ / Java)翻译成运行环境能识别的低版本代码(JS / 字节码)
  • jar 命令 ≈ vite/webpack 打包:把零散的编译产物、资源文件打包成一个可部署的产物(dist 文件夹 /jar 包)
  • JVM ≈ V8 引擎:真正执行代码的核心引擎,负责把编译后的代码跑起来,产生实际运行效果