从0学习Java系列教程

希望能成为全网最好的Java教程,B站视频教程地址:https://www.bilibili.com/video/BV19q4y1M7PX/

1. 计算机组成

计算机组成是学编程前,必须了解的内容,可以帮助你更好的理解编程

制造计算机的三个基本原则,冯·诺依曼体系结构:

  1. 计算机的数制采用二进制 (以二进制的方式实现数字运算和逻辑运算,以保证运算精度)
  2. 计算机应该按照程序顺序执行
  3. 计算机由五个部分组成
    1. 运算器
    2. 控制器
    3. 存储器
    4. 输入设备
    5. 输出设备
  4. 现在计算机组成
    1. CPU (运算器,控制器,寄存器组)
    2. 存储器
    3. 输入设备
    4. 输出设备
    5. 总线(计算机各种功能部件之间传送信息的公共通信干线)
      1. 数据总线
      2. 地址总线
      3. 控制总线

1.1 重点

  1. CPU是干活的,所有的活都必须经过CPU来执行
  2. CPU的运算效率远远大于内存的存取效率
  3. 内存的存取效率远远大于磁盘的存取效率

2. 为什么要有编程语言

不知道编程语言的来源,没法玩~

  1. CPU是根据指令干活的
  2. 指令是由程序写出来的
  3. 计算机指令是由0和1组成的,称为机器码
  4. 机器码不好辨识和记忆,无法准确写出来,所以诞生了汇编语言
  5. push、mov、add、pop这种就是汇编代码,代表了对应的机器码
  6. 算术类指令:add ,示例:add $s1 $s2 $s3 含义 $s1=$s2+$s3
  7. 通过上面的例子,发现,汇编好像有点难,编写也不太容易
  8. 这就诞生了更易于编写和理解的编程语言,比如C,C++, Java,Python等
  9. 例如编写Java程序,将其编译为汇编语言,在由汇编器将汇编语言翻译为机器码,交给计算机执行

3. Java简介

Java最早是由SUN公司(已被Oracle收购)的詹姆斯·高斯林open in new window(高司令,人称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   │ │ │
│    │    └─────────────┘ │ │
│    └────────────────────┘ │
└───────────────────────────┘
1
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:

时间版本
19951.0
19981.2
20001.3
20021.4
20041.5 / 5.0
20051.6 / 6.0
20111.7 / 7.0
20141.8 / 8.0
2017/91.9 / 9.0
2018/310
2018/911
2019/312
2019/913
2020/314
2020/915
2021/316

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 │
        └───────┘└───────┘└───────┘└───────┘
1
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 虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。