Java基础概念
Java语言的特点
平台无关性:“编写一次,运行无处不在”,Java编译器将源代码编译成字节码(bytecode),该字节码可以在任何安装了Java虚拟机
(JVM)的系统上运行。面向对象:Java是一门严格的面向对象编程语言,几乎一切都是对象。面向对象编程(OOP)特性使得代码更易于维护和重用,包括
类(class)、对象(object)、继承(inheritance)、多态(polymorphism)、抽象(abstraction)和封装(encapsulation)内存管理:Java有自己的垃圾回收机制,自动管理内存和回收不再使用的对象。无需手动管理内存,从而减少内存泄漏和其他内存相关的问题
JIT 编译:它可以在程序运行时将字节码转换为热点机器码来提高程序的运行速度

Java跨平台的实现原理
编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件
Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行
编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行
不同平台下编译生成的字节码是一样的,但是由JVM翻译成的机器码却不一样
注意
跨平台的是Java程序,不是JVM。JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM
JVM、JDK 和 JRE的区别
JVM:Java虚拟机,是Java程序运行的环境。它负责将Java字节码(由Java编译器生成)解释或编译成机器码,并执行程序。JVM提供了内存管理、垃圾回收、安全性等功能,使得Java程序具备跨平台性。
JRE:Java运行时环境,是Java程序运行所需的最小环境。它包含了JVM和一组Java类库,用于支持Java程序的执行。JRE不包含开发工具,只提供Java程序运行所需的运行环境。
JDK:Java开发工具包,是开发Java程序所需的工具集合。它包含了JVM、编译器(javac)、调试器(jdb)等开发工具,以及一系列的类库(如Java标准库和开发工具库)。JDK提供了开发、编译、调试和运行Java程序所需的全部工具和环境。

什么是字节码
所谓的字节码,就是 Java 程序经过编译后产生的 .class 文件。
Java 程序从源代码到运行需要经过三步:
- 编译:将源代码文件 .java 编译成 JVM 可以识别的字节码文件 .class
- 解释:JVM 执行字节码文件,将字节码翻译成操作系统能识别的机器码
- 执行:操作系统执行二进制的机器码

为什么Java解释和编译都有
- 编译型语言:在程序执行之前,整个源代码会被编译成机器码或者字节码,生成可执行文件。执行时直接运行编译后的代码,速度快,但跨平台性较差。
- 解释型语言:在程序执行时,逐行解释执行源代码,不生成独立的可执行文件。通常由解释器动态解释并执行代码,跨平台性好,但执行速度相对较慢。
举个例子
我想读一本国外的小说,我有两种选择:
- 编译型:找个翻译,等翻译将小说全部都翻译成汉语,一次性读完
- 解释型:找个翻译,翻译一段我读一段,慢慢把书读完
在Java经过编译之后生成字节码文件,接下来进入JVM中,就有两个步骤编译和解释。 如下图:

编译性:
- Java源代码首先被编译成字节码,JIT 会把编译过的机器码保存起来,以备下次使用。
解释性:
- JVM中一个方法调用计数器,当累计计数大于一定值的时候,就使用JIT进行编译生成机器码文件。否则就是用解释器进行解释执行,然后字节码也是经过解释器进行解释运行的
提示
所以Java既是编译型也是解释性语言,默认采用的是解释器和编译器混合的模式。