Java基本概念与常识
# Java基本概念与常识
# 什么是JDK和JRE?
JDK:Java Development Kit,Java的SDK,拥有JRE所拥有的一切,还有编译器(javac)和工具(javadoc、jdb),它能够创建和编译程序。
JRE:Java运行时环境,它是运行已编译Java程序所需的所有内容的集合,包括JVM、Java类库、Java命令等。但是,它不能创建新程序。
如果只是运行Java程序的话,只需要安装JRE,如果需要Java编程方面的工作就需要安装JDK。
# 什么是JVM?
Java虚拟机,运行Java字节码的虚拟机,JVM有针对于不同系统的特定实现,目的是使相同的字节码,都会给出相同的结果,一次编译,随处可以运行。
JVM 并不是只有一种!只要满足 JVM 规范,每个公司、组织或者个人都可以开发自己的专属 JVM。 也就是说我们平时接触到的 HotSpot VM 仅仅是是 JVM 规范的一种实现而已。
# 什么是字节码?采用字节码的好处?
JVM可以理解的代码就是字节码(.class文件),它不面向任何特定的处理器,只面向于Java虚拟机。在一定程度上解决传统解释型语言执行效率低的问题,但又保留解释型语言可移植的特点。所以Java程序运行时比较高效,由于字节码并不针对一种特定的机器,因此,Java程序无需重新编译便可在不同操作系统上运行。
# Java和C++区别?
- 都是面向对象的语言,支持封装、继承、多态
- Java不提供指针访问内存,程序内存更安全。
- Java是单继承,C++支持多重继承;Java的接口可以多继承
- Java有自动内存管理机制,不需要程序员手动释放无用内存
- 在C中,字符串或字符数组最后都需要一个额外的字符
\0
来表示结束
Java可以使用Unsafe类提供的本地方法操作内存。
# 为什么说Java语言编译与解释并存?
高级编程语言按程序的执行方式分为:编译型语言、解释型语言
# 编译型语言
编译器针对特定的操作系统将源代码一次性翻译成可被该平台执行的机器码
优点:一次编译,无限次运行,效率高
缺点:可执行程序不可跨平台、源代码不可跨平台(C语言中long类型的长度在不同的平台不一样)
# 解释型语言
解释器对源程序逐行解释成特定平台的机器码并立即执行。
优点:可跨平台,一次编写,到处运行。
缺点:效率低
# JAVA语言特点
Java语言既具有编译型语言的跨平台特征,也具有解释型语言的一次编写到处运行特征,因此Java程序要经过先编译后解释两步骤,由Java编写的程序要经过编译器生成字节码文件*.class
,字节码文件必须由Java解释器来解释执行。
编译型语言:C、C++、Golang、Pascal
解释型语言:Python、JavaScript、PHP、Shell、MATLAB
解释与编译共存:Java、C#
# Java程序从源码到运行的过程?
- JDK中的javac编译器将
.java
文件编译为JVM可以理解的.class
文件。 - JVM加载字节码文件生成机器码。
- 操作系统运行机器码。
# 六大设计原则
单一职责原则:针对于类,一个类只负责一项职责。
如类T负责两个不同职责:职责P1,职责P2。当职责P1需求变更而改变T时,可能造成职责P2发生故障,所以需要将类T的粒度分解为T1,T2。
里氏替换原则
依赖倒转原则
接口隔离原则
迪米特法则
开闭原则:对扩展类开放,对修改类关闭。