- 2.24
1.java特点
- 平台无关性:java编译器将源代码转换为字节码,可以在任何一个安装jvm的系统上运行
- 面向对象:严格的面向对象编程语言,面向对象编程OOP,可以使代码更易维护和复用 类(class)、 对象(object)、 继承(inheritance)、 多态(polymorphism)、 抽象(abstraction) 和封装(encapsulation)
- 内存管理: 减少内存泄漏
2.优势劣势
-
特点三条
- 有安全模型,比如沙箱机制
- 强大的生态,spring,库,工具等
- 多线程机制,方便并发编程·
-
相比于rust,c++等原生编程语言,编译时间长,启动慢,内存占用大,性能不如他们
-
面向对象过于严格,有时候写简单代码反而麻烦(Everything is an Object),例如最简单的helloword也得写成
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}3.java为什么能跨平台
JVM由C/C++开发,他是一个软件,有不同的版本,我们编译源代码时,将源代码转成字节码(.class),而JVM就能将其转换为机器能看懂的机器码
-
JVM算是一个“中间件”,注意:不同平台生成的字节码是一样的,但是有JVM翻译到不同平台的机器码是不一样的,如下图

-
即使你将Java程序打包成可执行文件(例如 .exe),仍然需要JVM的支持
-
跨平台的是java程序,而不是jvm,不同的平台下需要下载不同的jvm
4.JVM、JDK、JRE三者关系?

- JVM是Java虚拟机,是Java程序运行的环境
- JRE是Java运行时环境,是Java程序运行所需的最小环境。
- JDK是Java开发工具包,是开发Java程序所需的工具集合。提供了开发、编译、调试和运行Java程序所需的全部工具和环境。
5.*为什么Java解释和编译都有?
默认采用的是解释器和编译器混合的模式

| 阶段 | 做什么 | 谁来干 |
|---|---|---|
| 编译阶段 | .java → .class 字节码 | javac 编译器 |
| 运行阶段 | 字节码 → 机器码(解释 + JIT 编译) | JVM |
- 当你运行 Java 程序时,JVM 会一行一行“解释”这些字节码, 转成当前电脑能懂的“机器语言”来执行。
- 但如果某段代码被运行得特别频繁,JVM 里的 **JIT(即时编译器)** 会说:“哎,这段太常用了,我直接把它编译成本地机器码,下次直接用!”
6.编译型语言和解释型语言?
- 运行前(c,c++)
- 执行时直接运行编译时的代码,速度快,跨平台性差
- 运行时(py.js)
- 逐行解释代码,不生成独立可运行文件,通常由解释器动态解释并完成代码,速度慢,跨平台性好
7.Python和Java区别是什么?
python时解释型语言,> 程序边翻译边执行,不像编译型语言那样一次性全部翻译完。见6.编译型语言和解释型语言?
8.JVM是什么
JVM是 java 虚拟机,主要工作是解释自己的指令集(即字节码)并映射到本地的CPU指令集和OS的系统调用。补3.java为什么能跨平台
9.值传递和引用传递的区别?
💬 Java 永远是值传递。 基本类型:传的是值。 对象类型:传的是“引用的值”。
public static void changeReference(Person obj) {
obj = new Person("Charlie"); // obj 指向新对象时,外部那个p才不会变
}