从0学习Java系列教程
希望能成为全网最好的Java教程,B站视频教程地址:https://www.bilibili.com/video/BV19q4y1M7PX/
1. 计算机组成
计算机组成是学编程前,必须了解的内容,可以帮助你更好的理解编程
制造计算机的三个基本原则,冯·诺依曼体系结构:
- 计算机的数制采用二进制 (以二进制的方式实现数字运算和逻辑运算,以保证运算精度)
- 计算机应该按照程序顺序执行
- 计算机由五个部分组成
- 运算器
- 控制器
- 存储器
- 输入设备
- 输出设备
- 现在计算机组成
- CPU (运算器,控制器,寄存器组)
- 存储器
- 输入设备
- 输出设备
- 总线(计算机各种功能部件之间传送信息的公共通信干线)
- 数据总线
- 地址总线
- 控制总线
1.1 重点
- CPU是干活的,所有的活都必须经过CPU来执行
- CPU的运算效率远远大于内存的存取效率
- 内存的存取效率远远大于磁盘的存取效率
2. 为什么要有编程语言
不知道编程语言的来源,没法玩~
- CPU是根据指令干活的
- 指令是由程序写出来的
- 计算机指令是由0和1组成的,称为机器码
- 机器码不好辨识和记忆,无法准确写出来,所以诞生了汇编语言
- push、mov、add、pop这种就是汇编代码,代表了对应的机器码
- 算术类指令:add ,示例:add $s1 $s2 $s3 含义 $s1=$s2+$s3
- 通过上面的例子,发现,汇编好像有点难,编写也不太容易
- 这就诞生了更易于编写和理解的编程语言,比如C,C++, Java,Python等
- 例如编写Java程序,将其编译为汇编语言,在由汇编器将汇编语言翻译为机器码,交给计算机执行
3. Java简介
Java最早是由SUN公司(已被Oracle收购)的詹姆斯·高斯林(高司令,人称Java之父)在上个世纪90年代初开发的一种编程语言,最初被命名为Oak,目标是针对小型家电设备的嵌入式应用,结果市场没啥反响。谁料到互联网的崛起,让Oak重新焕发了生机,于是SUN公司改造了Oak,在1995年以Java的名称正式发布,原因是Oak已经被人注册了,因此SUN注册了Java这个商标。随着互联网的高速发展,Java逐渐成为最重要的网络编程语言。
Java介于编译型语言和解释型语言之间。
编译型语言如C、C++,代码是直接编译成机器码执行,但是不同的平台(x86、ARM等)CPU的指令集不同,因此,需要编译出每一种平台的对应机器码。
解释型语言如Python、Ruby没有这个问题,可以由解释器直接加载源码然后运行,代价是运行效率太低。
而Java是将代码编译成一种“字节码”,它类似于抽象的CPU指令,然后,针对不同平台编写虚拟机,不同平台的虚拟机负责加载字节码并执行,这样就实现了“一次编写,到处运行”的效果。
当然,这是针对Java开发者而言。
对于虚拟机,需要为每个平台分别开发。
为了保证不同平台、不同公司开发的虚拟机都能正确执行Java字节码,SUN公司制定了一系列的Java虚拟机规范。
从实践的角度看,JVM的兼容性做得非常好,低版本的Java字节码完全可以正常运行在高版本的JVM上。
3.1 版本
随着Java的发展,SUN给Java又分出了三个不同版本:
- Java SE:Standard Edition
- Java EE:Enterprise Edition
- Java ME:Micro Edition
这三者之间有啥关系呢?
┌───────────────────────────┐
│Java EE │
│ ┌────────────────────┐ │
│ │Java SE │ │
│ │ ┌─────────────┐ │ │
│ │ │ Java ME │ │ │
│ │ └─────────────┘ │ │
│ └────────────────────┘ │
└───────────────────────────┘
2
3
4
5
6
7
8
9
简单来说,Java SE就是标准版,包含标准的JVM和标准库,而Java EE是企业版,它只是在Java SE的基础上加上了大量的API和库,以便方便开发Web应用、数据库、消息服务等,Java EE的应用使用的虚拟机和Java SE完全相同。
Java ME就和Java SE不同,它是一个针对嵌入式设备的“瘦身版”,Java SE的标准库无法在Java ME上使用,Java ME的虚拟机也是“瘦身版”。
毫无疑问,Java SE是整个Java平台的核心,而Java EE是进一步学习Web应用所必须的。我们熟悉的Spring等框架都是Java EE开源生态系统的一部分。
Java ME不需要学习。
3.1.1 发展史
从1995年发布1.0版本开始,到目前为止,最新的Java版本是Java 16:
时间 | 版本 |
---|---|
1995 | 1.0 |
1998 | 1.2 |
2000 | 1.3 |
2002 | 1.4 |
2004 | 1.5 / 5.0 |
2005 | 1.6 / 6.0 |
2011 | 1.7 / 7.0 |
2014 | 1.8 / 8.0 |
2017/9 | 1.9 / 9.0 |
2018/3 | 10 |
2018/9 | 11 |
2019/3 | 12 |
2019/9 | 13 |
2020/3 | 14 |
2020/9 | 15 |
2021/3 | 16 |
3.2 名词解释
初学者学Java,经常听到JDK、JRE这些名词,它们到底是啥?
- JDK:Java Development Kit
- JRE:Java Runtime Environment
简单地说,JRE就是运行Java字节码的虚拟机。
但是,如果只有Java源码,要编译成Java字节码,就需要JDK,因为JDK除了包含JRE,还提供了编译器、调试器等开发工具。
二者关系如下:
┌─ ┌──────────────────────────────────┐
│ │ Compiler, debugger, etc. │
│ └──────────────────────────────────┘
JDK ┌─ ┌──────────────────────────────────┐
│ │ │ │
│ JRE │ JVM + Runtime Library │
│ │ │ │
└─ └─ └──────────────────────────────────┘
┌───────┐┌───────┐┌───────┐┌───────┐
│Windows││ Linux ││ macOS ││others │
└───────┘└───────┘└───────┘└───────┘
2
3
4
5
6
7
8
9
10
11
要学习Java开发,当然需要安装JDK了。
那JSR、JCP……又是啥?
- JSR规范:Java Specification Request
- JCP组织:Java Community Process
为了保证Java语言的规范性,SUN公司搞了一个JSR规范,凡是想给Java平台加一个功能,比如说访问数据库的功能,大家要先创建一个JSR规范,定义好接口,这样,各个数据库厂商都按照规范写出Java驱动程序,开发者就不用担心自己写的数据库代码在MySQL上能跑,却不能跑在PostgreSQL上。
所以JSR是一系列的规范,从JVM的内存模型到Web程序接口,全部都标准化了。而负责审核JSR的组织就是JCP。
3.2.1 JVM
Java虚拟机(Java virtual machine)
JVM屏蔽了与具体平台相关的信息,使Java语言编译程序只需要生成在JVM上运行的目标字节码(.class),就可以在多种平台上不加修改地运行。
Java 虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。