Java基础常识

文章详细阐述了JDK、JRE和JVM之间的关系,解释了字节码的概念及其对Java跨平台能力的影响。Java程序从源代码到运行的过程包括编译成字节码,然后通过JVM解释和JIT编译器优化。此外,文章对比了Java、C++和Go语言的优缺点,强调了Java的可移植性和自动内存管理,C++的性能以及Go语言的并发支持。
摘要由CSDN通过智能技术生成

目录

JDK和JRE和JVM分别是什么?有什么关系?

什么是字节码,采用字节码的好处是什么 ? 

Java 程序从源代码到运行的过程

为什么 Java语言"编译与解释并存"

Java 和 C++、Go 语言的区别,各自的优缺点?


JDK和JRE和JVM分别是什么?有什么关系?

首先JVM是Java虚拟机,专门用来运行字节码文件,JVM是实现Java跨平台的关键所在,JVM屏蔽了各种不同的操作系统之间的差异,使得同样的Java程序可以在不同的操作系统上运行出相同的结果.

JRE 是 Java运行时环境包含Java已经编译好必备的软件环境,包含了JVM,JRE只能运行程序,不能创建Java程序.

JDK 是Java开发者工具包,包含了JRE,JVM,调试分析等工具,用来创建和编译Java程序,如果想使用Java进行开发,那么就需要安装JDK.

三者的关系就是 : JRE包含JVM, JDK包含了 JRE,JVM

什么是字节码,采用字节码的好处是什么 ? 

JVM能够理解并且能够运行的代码就是字节码. 字节码只面向虚拟机,不针对特定的一种机器.

字节码解决了传统解释性语言效率低的问题,同时也保留了传统解释性语言的可移植性,使得Java可移植性强实现跨平台,其次,不同的操作系统对应着不同的JVM,但是字节码是通用的,可以使得Java程序无需重新编译,就可以在不同操作系统上/平台上运行. 也就是所谓的 "一次编译,到处运行".

main方法可以被其他方法调用么 ? 

Java 程序从源代码到运行的过程

 我们写的Java程序也就是.java文件会先使用Javac进行编译生成.class文件也就是字节码文件,然后会通过解释器逐行进行解释,但是当我们的方法/代码块多次执行这时这段代码会被认为是热点代码,于是就会交给Java即时编译器JIT来进行运行,经过JIT编译后会将字节码文件保存起来,当下一次使用的时候可以直接使用,这样的速度就会提升很多, JIT编译器属于运行时编译,经过解释器 & JIT即时编译器 进行解释/编译 最终会生成机器可以理解的机器码,然后交给机器来运行.

为什么 Java语言"编译与解释并存"

首先解释一下 什么是 "编译型语言"  和 "解释型语言"

"编译型语言" : 编译型语言是一次性的将源代码翻译成 机器所能理解的机器码,执行速度非常的快,但是开发效率比较低, 比如 C, C++, Rust

"解释型语言" : 解释型语言是每执行代码,一句一句的将源代码翻译成机器所能理解的机器码,执行速度满, 但开发效率比较高, 比如 JS, python.

为什么Java语言是 "解释与编译并存的" ?  

Java语言是会先将源代码经过Javac进行编译成.class文件,也就是字节码,然后在通过 解释器&JIT来解释/编译生成平台所能理解的机器码,所以Java语言是解释与编译并存的.

Java 和 C++、Go 语言的区别,各自的优缺点?

  • Java
    • 优点
      • Java语言使用起来简单,语法简便
      • Java可以实现跨平台,一次编译,到处运行
      • Java可移植性高,强大的生态
      • 面向对象程序,具有 继承,封装,多态的特征
      • Java无需手动释放内存,自动内存管理,减少了内存泄漏的风险
    • 缺点
      • 由于JVM的存在,运行速度比较慢
      • 对于实时性比较高的场景,不如C++,Go这样的编程语言.
  • C/C++
    • 优点
      • 速度快,适合编写需要高性能的应用程序
      • 应用广泛,特别是在游戏开发、操作系统和嵌入式系统开发方面
      • 灵活性高,可以直接访问硬件和内存
    • 缺点
      • 学习难度较高,需要掌握指针、内存管理等底层知识
      • 容易出现内存泄漏和指针错误等问题
      • 编写代码过程中需要更多的手动管理,相比Java更容易出错
  • Go
    • 优点
      • 高并发,天生支持协程,能够轻松编写高效的并发程序
      • 简单易学,语法简洁,上手容易
      • 静态类型语言,可以避免一些潜在的运行时错误
      • 快速编译,可以快速构建和部署应用程序
    • 缺点
      • 缺乏丰富的类库,与Java和C++相比有些不足
      • 在一些性能要求极高的场景中可能不如C++表现
      • 语言本身还比较年轻,相关生态和工具还需要进一步完善

参考 : Java基础常见面试题总结(上) | JavaGuide(Java面试+学习指南)

编程导航面试题部分 : 编程导航 - 做您编程路上的导航员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值