1. Java的特点
跨平台性:
Java的 “编写一次,运行无处不在” 是其最大的特点之一。Java编译器将源代码编译成字节码(bytecode),该字节码可以在任何安装了Java虚拟机(JVM)的系统上运行。
面向对象:
Java是一门严格的面向对象编程语言,几乎一切都是对象。面向对象编程(0OP)特性使得代码更易于维护和重用,包括类(class)、对象(object)、继承(inheritance)、多态(polymorphism)、抽象(abstraction)和封装(encapsulation)。
内存管理:
Java有自己的垃圾回收机制,自动管理内存和回收不再使用的对象。这样,开发者不需要手动管理内存,从而减少内存泄漏和其他内存相关的问题。
2. Java的优劣势
优势:
- 跨平台:因为JVM的存在,可以实现一次编写到处运行。
- 面向对象:虽然现在很多语言都支持面向对象,但是Java的设计从一开始就是OOP的。
- 生态系统强大:比如Spring框架,Hibernate,各种库和工具,社区支持大,企业应用广泛。
- 内存管理:自动垃圾回收机制,减少了内存泄漏的问题,对开发者友好。
- 多线程:内置的线程机制,方便并发编程。
- 安全性:Java有安全模型,比如沙箱机制,适合网络环境。
- 稳定性:企业级应用长期使用,版本更新也比较注重向后兼容。
劣势:
- 性能方面:虽然JVM优化了很多,但相比C++或者Rust这种原生编译语言,还是有一定开销。特别是启动时间,比如微服务场景下,可能不如Go之类的快。
- 语法方面:比如样板代码多,之前没有lambda的时候更麻烦,现在有了但比起Python还是不够简洁。
- 内存消耗方面:JVM本身占内存,对于资源有限的环境可能不太友好。
- 面对对象过于严格:有时候写简单程序反而麻烦,虽然Java8引入了函数式编程,但不如其他语言自然。
- 开发效率:相比动态语言如Python,Java需要更多代码,编译过程也可能拖慢开发节奏。
3. Java为什么是跨平台的
Java能支持跨平台,和JVM有密不可分的关系
JVM也是一个软件,不同的平台有不同的版本。我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件。Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。
而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一"中间层",就能在不同平台上运行,真正实现了"一次编译,到处运行"的目的。
所以,运行Java程序必须有JVM的支持,因为编译的结果不是机器码,必须要经过JVM的再次翻译才能执行。即使你将Java程序打包成可执行文件(例如.exe),仍然需要JVM的支持。
跨平台的是Java程序,不是JVM。JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM。
4. JVM、JRE、JDK三者的关系
JVM:JVM是Java虚拟机,是Java程序运行的环境。它负责将Java字节码(由Java编译器生成)解释或编译成机器码,并执行程序。JVM提供了内存管理、垃圾回收、安全性等功能,使得Java程序具备跨平台性。
JRE:JRE是Java运行时环境,是Java程序运行所需的最小环境。它包含了JVM和一组Java类库,用于支持Java程序的执行。JRE不包含开发工具,只提供Java程序运行所需的运行环境。
JDK:JDK是Java开发工具包,是开发Java程序所需的工具集合。它包含了JVM、编译器(javac)、调试器(jdb)等开发工具,以及一系列的类库(如Java标准库和开发工具库)。JDK提供了开发、编译、调试和运行Java程序所需的全部工具和环境。
5. Python和Java的区别
python是一种解释语言,翻译时会在执行程序的同时进行翻译。
Java是一种已编译的编程语言,Java编译器将源代码编译为字节码,而字节码则由Java虚拟机执行
6. 编译型语言和解释型语言的区别
它们的核心区别在于代码执行前是否需要整体翻译为机器码。
编译形语言:在程序运行前,需通过编译器将整个源代码一次性翻译成机器码(可执行文件),然后运行。执行时直接运行编译后的代码,速度快,但跨平台性较差。
解释型语言:源代码在运行时通过解释器逐行翻译并执行,无需事先编译为机器码。跨平台性好,但执行速度相对较慢。
常见的编译形语言有,C、C++、Rust
常见的解释型语言有,Python、JavaScript
值得注意的是,Java属于混合型语言,Java:先编译为字节码(.class),由 JVM 解释或 JIT 编译执行。
总结一下,编译型语言就像是将整本书翻译成目标语言再出版;解释型语言就像是一边读一边口头翻译。