JAVA知识大总结(持续更新)
目录
1.JDK、JRE、JVM的关系详解
JVM(java virtual machine,Java虚拟机)
就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
只有JVM还不能成.class的执行,因为在解释.class的时候JVM需要调用解释所需要的类库lib,即jre包含的Java程序所需的核心类库。
JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。(跨平台的核心)
JRE(Java Runtime Environment,Java开发环境)
是运行基于Java语言编写的程序所不可缺少的运行环境。
JRE中包含了JVM和Java程序所需要的核心类库等,与大家熟知的JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户,如果只是想过要运行一个开发好的Java程序可以只安装JRE,不需要安装JDK。
JDK(Java Development Kit,Java开发工具包)
JDK是Java开发工具包,JDK是整个JAVA的核心,包括了JRE、Java开发工具和Java基础的类库(即Java API包括rt.jar)。
JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是Java程序所需要的核心类库,而jvm和 lib和起来就称为jre。
具体关系如下图:
2.Java运行机制
Java的运行机制可以分为三个部分:1.编写程序 2.编译程序 3.运行程序。
1.编写程序:编写程序就是源代码,我们自己敲的代码。
2.编译程序:JAVA和大多数语言一样是一种高级语言,我们编写好的代码都被保存成为一个.java的文件,然而计算机并不认识(不能运行)这些文件,这就需要把我们编写好的文件(源代码)变成计算机可以运行的机器码(二进制码),这个过程就叫做编译。简单讲就是通过javac指令,将.Java文件编译成.class文件(字节码,一种与平台无关的文件),这个过程称为编译程序。
3.运行程序:.class文件是一种与平台无关的文件,它也不可直接运行,需要通过JVM将.class文件解释成计算机可以运行的二进制,然后运行。
3.Java跨平台的原理
首先我们要理解什么是跨平台,所谓的跨平台就是JAVA写的一份代码可以在任意的操作系统平台上运行。
为什么跨平台会成为一个问题呢?因为每一个操作系统平台支持不同的指令集我们所写的代码经过编译之后只能适用于一个平台,换一个平台就不支持了。而JAVA完美的解决了这个问题。
1.因为编译后的class文件只能被jvm所解释
2.任何平台只要有jvm(JAVA运行环境)就可以解释这个class文件
3.无论什么平台解释同一个class文件最后的结果都是一样的
也就是说我用Windows系统编译好的class文件,拿来Android(前提要有环境)上运行也是一样的。
参考:https://www.cnblogs.com/menghujava/p/9587844.html
4. Java和c++的区别
1. Java 是纯粹的面向对象语言,所有的对象都继承自 java.lang.Object,C++ 为了兼容 C 即支持面向对象也支持面向过程 。
2. Java 通过虚拟机从而实现跨平台特性,但是 C++ 依赖于特定的平台。
3. Java 没有指针,它的引用可以理解为安全指针,而 C++ 具有和 C 一样的指针。
4. Java支持自动垃圾回收,而 C++ 需要手动回收。
5. Java不支持多重继承,只能通过实现多个接口来达到相同目的,而 C++ 支持多重继承。
6. Java不支持操作符重载,虽然可以对两个 String 对象执行加法运算,但是这是语言内置支持的操作,不属于操作符重载,而C++可以。
7. Java的 goto 是保留字,但是不可用,C++ 可以使用 goto。
8. Java不支持自动类型转换,必须强制类型转换。
9. Java经过编译连接后生成字节码,C++经过编译连接后生成二进制代码。
10. Java不支持条件编译,C++ 通过 #ifdef #ifndef 等预处理命令从而实现条件编译。
5.计算机中的bit、Byte等基础知识
bit就是位,也称作比特位,是计算机表示数据最小的单位。
Byte就是字节。
1bit = 1b
1Byte = 1B
1B = 8b
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
字:一组或者一串bit。
字长:字的位数叫做字长。
字节:8个二进制位为一个字节。