• 2.24

1.java特点

  1. 平台无关性:java编译器将源代码转换为字节码,可以在任何一个安装jvm的系统上运行
  2. 面向对象:严格的面向对象编程语言,面向对象编程OOP,可以使代码更易维护和复用 类(class)、 对象(object)、 继承(inheritance)、 多态(polymorphism)、 抽象(abstraction) 和封装(encapsulation)
  3. 内存管理: 减少内存泄漏

2.优势劣势

  1. 特点三条

    1. 有安全模型,比如沙箱机制
    2. 强大的生态,spring,库,工具等
    3. 多线程机制,方便并发编程·
  2. 相比于rust,c++等原生编程语言,编译时间长,启动慢,内存占用大,性能不如他们

  3. 面向对象过于严格,有时候写简单代码反而麻烦(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才不会变
}