Note/青空笔记/JavaSE 笔记 2023重制版/JavaSE笔记(一)重制版.md
2023-08-31 11:30:31 +08:00

33 KiB
Raw Blame History

image-20220916142151904

新手入门篇

**注意:**开始学习JavaSE之前建议学习的前置课程《C语言程序设计》《数据结构》《操作系统》《计算机组成原理》

欢迎各位小伙伴来到JavaSE视频教程期待与各位小伙伴共度这一旅程视频中所有的文档、资料都可以直接在视频下方简介中找到视频非培训机构出品纯个人录制不需要加任何公众号、小程序直接自取即可。

教程开始之前,提醒各位小伙伴:

  • 如果你对某样东西不熟悉,请务必保证跟视频中使用一模一样的环境、一模一样的操作方式去使用,不要自作主张,否则出现某些奇怪的问题又不知道怎么办,就会浪费很多时间。
  • 视频依然是基于Java 8进行讲解不要自己去安装一个其他的版本想要了解新版本特性可以在另一个视频里面观看。
  • 在学习过程中,尽可能避免出现中文文件夹,包括后面的环境安装、项目创建,都尽量不要放在中文路径下(因为使用中文常常出现奇奇怪怪的问题)建议使用对应的英文单词代替,或者是用拼音都可以,最好只出现英文字母和数字。
  • 本系列教程使用 IDEA社区版免费即可不需要申请终极版。

如果觉得本视频对你有帮助请一键三连支持一下UP主

计算机思维导论

计算机自1946年问世以来几乎改变了整个世界。

现在我们可以通过电脑来做很多事情比如我们常常听到的什么人工智能、电子竞技、大数据等等都和计算机息息相关包括我们现在的手机、平板等智能设备也是计算机转变而来的。各位可以看看最顶上的这张图片如果你在小时候接触过计算机那么一定对这张图片照片拍摄于1996年在美国加利福尼亚州加利福尼亚州的锁诺玛县印象深刻这张壁纸作为WindowsXP系统的默认壁纸曾经展示在千家万户的电脑屏幕上。

也许你没有接触过计算机也许你唯一接触计算机就是用来打游戏也有可能你曾经捣鼓过计算机在学习C语言之前先让我们来了解一下计算机的世界。

计算机的世界

**注意:**如果你已经完成了《C语言程序设计》视频教程的学习可以直接跳过此部分。

计算机虽然名字听着很高级,不过它也是由一个个简单电路组成的。

img

这是我们在初中就学习过的电路图,不过这种电路太过简单,只能完成一些很基础的的操作,比如点亮小灯泡等。

很明显想要实现计算机怎么高级的运算机器,肯定是做不到的,这时我们就需要引入更加强大的数字电路了。

用数字信号完成对数字量进行算术运算逻辑运算的电路称为数字电路,或数字系统。由于它具有逻辑运算和逻辑处理功能,所以又称数字逻辑电路。现代的数字电路由半导体工艺制成的若干数字集成器件构造而成。逻辑门是数字逻辑电路的基本单元

计算机专业一般会在大一开放《数字电路》这门课程,会对计算机底层的数字电路实现原理进行详细介绍。

数字电路引入了逻辑判断,我们来看看简单的数字电路:

img

数字电路中用电压的高低来区分出两种信号低电压表示0高电压表示1由于只能通过这种方式表示出两种类型的信号所以计算机采用的是二进制。

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2进位规则是“逢二进一”借位规则是“借一当二”。

比如我们一般采用的都是十进制表示比如9再继续加1的话就需要进位了变成10在二进制中因为只有0和1所以当1继续加1时就需要进位了就变成10了注意这不是十读成一零就行了

当然,仅仅有两种信号还不够,我们还需要逻辑门来辅助我们完成更多的计算,最基本的逻辑关系是与、或、非,而逻辑门就有相应的是与门或门非门,可以用电阻、电容、二极管、三极管等分立原件构成(具体咋构成的咱这里就不说了)

比如与操作因为只有两种类型我们一般将1表示为真0表示为假与操作用&表示)要求两个数参与进来,比如:

  • 1 & 1 = 1 必须两边都是真,结果才为真。

  • 1 & 0 = 0 两边任意一个或者都不是真,结果为假。

或运算(用 | 表示):

  • 1 | 0 = 1 两边只要有一个为真,结果就为真

  • 0 | 0 = 0 两边同时为假,结果才是假

非运算实际上就是取反操作(可以是 ! 表示)

  • !1 = 0

  • !0 = 1 非运算会将真变成假,假变成真

有了这些运算之后,我们的电路不仅仅可以实现计算,也可以实现各种各样的逻辑判断,最终才能发展成我们的计算机。

前面我们大概介绍一下计算机的底层操作原理,接着我们来看看计算机的基本组成。

img

相信各位熟知的计算机都是一个屏幕+一个主机的形式,然后配上我们的键盘鼠标,就可以开始使用了,但是实际上标准的计算机结构并没有这么简单,我们来看看:

img

我们电脑最核心的部件当属CPU因为几乎所有的运算都是依靠CPU进行各种各样的计算电路已经在CPU中安排好了我们只需要发送对应的指令就可以进行对应的运算它就像我们人的大脑一样有了大脑才能进行思考。不过光有大脑还不行还要有一些其他的部分来辅助工作比如我们想向电脑里面打字那么就需要连接一个键盘才能输入我们想要点击桌面上的图标那么就需要一个鼠标来操作光标这些都是输入设备。我们的电脑开机之后显示器上会显示出画面实际上显示器就是输出设备。

当然除了这些内容之外我们的电脑还需要内存来保存运行时的一些数据以及外存来保存文件比如硬盘等。我们常说的iPhone13 512G这个512G并不是指的内存而是指的外存准确的说是用于存放文件硬盘大小而真正的内存是我们常说的4G/6G/8G运行内存内存的速度远高于外存的速度所以1G内存的价格远超1G硬盘的价格。

img

计算机包括五大部件:运算器、控制器、存储器、输入和输出设备。有了这一套完整的硬件环境,我们的电脑才算是有了一个完整的身体。

操作系统概述

**注意:**如果你已经完成了《C语言程序设计》视频教程的学习可以直接跳过此部分。

前面我们了解了一下计算机的大致原理和组成结构,但是光有这一套硬件可不行,如何让这一套硬件按照我们想要的方式运作起来,也是非常重要的,这时我们就需要介绍操作系统了。

操作系统operating system简称OS是管理计算机硬件软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互操作的界面。

一般在计算机专业大二,会开放《操作系统》课程,会详细讲解操作系统的底层运作机制和调度。

一般我们电脑上都安装了Windows操作系统苹果笔记本安装的是MacOS操作系统现在主流的电脑都已经预装Windows11了

img

有了操作系统,我们的电脑才能真正运行起来,我们就可以轻松地通过键盘和鼠标来操作电脑了。

不过操作系统最开始并不是图形化界面它类似于Windows中的命令提示符

img

img

没有什么图标这些概念,只有一个简简单单的黑框让我们进行操作,通过输入命令来进行一些简单的使用,程序的运行结果也会在黑框框(命令行)中打印出来,不过虽然仅仅是一个黑框,但是能运行的程序可是非常非常多的,只需要运行我们编写好的程序,就能完成各种各样复杂的计算任务,并且计算机的计算速度远超我们的人脑。

中国超级计算机系统天河二号计算速度达到每秒5.49亿亿次。

当然除了我们常见的Windows和MacOS系统之外还有我们以后需要经常打交道的Linux操作系统这种操作系统是开源的意思是所有的人都可以拿到源代码进行修改于是就出现了很多发行版

img

这些发行版有带图形化界面的也有不带图形化界面的不带图形化界面的Linux将是我们以后学习的重点。

不同操作系统之间的软件并不是通用的比如Windows下我们的软件一般是.exe后缀名称而MacOS下则不是并且也无法直接运行.exe文件这是因为不同操作系统的具体实现会存在一些不同程序编译我们之后会介绍到之后的格式也会不同所以是无法做到软件通用的。

正是因为有了操作系统才能够组织我们计算机的底层硬件包括CPU、内存、输入输出设备等进行有序工作没有操作系统电脑就如同一堆废铁只有躯壳没有灵魂。

计算机编程语言

**注意:**如果你已经完成了《C语言程序设计》视频教程的学习可以直接跳过此部分。

现在我们大致了解了我们的电脑的运作原理,实际上是一套完整的硬件+一个成形的操作系统共同存在的。接着我们就可以开始了解一下计算机的编程语言了。我们前面介绍的操作系统也是由编程语言写出来的,操作系统本身也算是一个软件。

img

那么操作系统是如何让底层硬件进行工作的呢实际上就是通过向CPU发送指令来完成的。

计算机指令就是指挥机器工作的指示和命令程序就是一系列按一定顺序排列的指令执行程序的过程就是计算机的工作过程。指令集就是CPU中用来计算和控制计算机系统的一套指令的集合而每一种新型的CPU在设计时就规定了一系列与其他硬件电路相配合的指令系统。而指令集的先进与否也关系到CPU的性能发挥它也是CPU性能体现的一个重要标志。

我们电脑中的CPU有多种多样的不同的CPU之间可能也会存在不同的架构比如现在最常用的是x86架构还有我们手机平板这样的移动设备使用的arm架构不同的架构指令集也会有不同。

我们知道计算机底层硬件都是采用的0和1这样的二进制表示所以指令也是一样的比如这里随便写的

  • 000001 - 代表开机

  • 000010 - 代表关机

  • 000011 - 代表进行加法运算

当我们通过电路发送给CPU这样的二进制指令CPU就能够根据我们的指令执行对应的任务而我们编写的程序保存在硬盘中也是这样的二进制形式我们只需要将这些指令组织好按照我们的思路一条一条执行对应的命令就能够让计算机计算任何我们需要的内容了这其实就是机器语言。

不过随着时代的进步指令集越来越大CPU支持的运算类型也越来越多这样的纯二进制编写实在是太累了并且越来越多的命令我们根本记不住于是就有了汇编语言。汇编语言将这些二进制的操作码通过助记符来替换

  • MOV 传送字或字节。

  • MOVSX 先符号扩展,再传送。

  • MOVZX 先零扩展,再传送。

  • PUSH 把字压入堆栈。

把这些原有的二进制命令通过一个单词来代替,这样是不是就好记多了,在程序编写完成后,我们只需要最后将这些单词转换回二进制指令就可以了,这也是早期出现的低级编程语言。

img

不过虽然通过这些助记符就能够很轻松地记住命令但是还是不够方便因为可能我们的程序需要完成一个很庞大的任务但是如果还是这样一条一条指令进行编写是不是太慢了点有时候可能做一个简单的计算都需要好几条指令来完成。于是高级编程语言——C语言终于诞生了。

C语言诞生于美国的贝尔实验室,由丹尼斯·里奇Dennis MacAlistair Ritchie以肯尼斯·蓝·汤普森Kenneth Lane Thompson设计的B语言为基础发展而来在它的主体设计完成后汤普森和里奇用它完全重写了UNIX操作系统且随着UNIX操作系统的发展C语言也得到了不断的完善。

高级语言不同于低级语言低级语言的主要操作对象是指令本身而高级语言却更加符合我们人脑的认知更像是通过我们人的思维去告诉计算机你需要做什么包括语法也会更加的简单易懂。下面是一段简单的C语言代码

int main() {
  	int a = 10;   //定义一个a等于10
  	int b = 10;   //定义一个b等于10
  	int c = a + b;   //语义非常明确c就是a加上b计算出来的结果。
  	return 0;
}

不过现在看不懂没关系,我们后面慢慢学。

C语言虽然支持按照我们更容易理解的方式去进行编程但是最后还是会编译成汇编指令最后变成计算机可以直接执行的指令不过具体的编译过程我们不需要再关心了我们只需要去写就可以了而对我们代码进行编译的东西称为编译器。

img

当然除了C语言之外还有很多其他的高级语言比如Java、Python、C#、PHP等等相比其他编程语言C算是比较古老的一种了但是时隔多年直至今日其他编程语言也依然无法撼动它的王者地位

img

可以看到在2021年9月依然排在编程语言排行榜的第一名Python和Java紧随其后可见这门语言是多么的不可撼动很多操作系统、高级编程语言底层实现几乎都是依靠C语言去编写的包括Java的底层也是C/C++实现的所以学习这一门语言对于理工科尤其是计算机专业极为重要学好C语言你甚至可以融汇贯通到其他语言学起来也会轻松很多。

走进Java语言

前面我们介绍了C语言它实际上就是通过编译将我们可以看懂的代码翻译为计算机能够直接执行的指令这样计算机就可以按照我们想要的方式去进行计算了。当然除了C语言之外也有其他的语言比如近几年也很火的Python它跟C语言不同它并不会先进行编译而是直接交给解释器解释执行

print("Hello World!")

image-20220916150119407

可见,这种方式也可以让计算机按照我们的想法去进行工作。

一般来说,编程语言就分为两大类:

  • **编译型语言:**需要先编译为计算机可以直接执行的命令才可以运行。优点是计算机直接运行性能高缺点是与平台密切相关在一种操作系统上编译的程序无法在其他非同类操作系统上运行比如Windows下的exe程序在Mac上就无法运行。
  • **解释型语言:**只需要通过解释器代为执行即可,不需要进行编译。优点是可以跨平台,因为解释是解释器的事情,只需要在各个平台上安装对应的解释器,代码不需要任何修改就可以直接运行;缺点是需要依靠解释器解释执行,效率肯定没直接编译成机器指令运行的快,并且会产生额外的资源占用。

image-20220916151925672

那么我们来看看我们今天要介绍的主角Java语言Java之父James Gosling詹姆斯·高斯林

Write Once, Run Anywhere.

这是Java语言的标语它的目标很明确一次编写到处运行它旨在打破平台的限制让Java语言可以运行在任何平台上并且不需要重新编译实现跨平台运行。

Java自1995年正式推出以来已经度过了快28个春秋而基于Java语言我们的生活中也有了各种各样的应用

image-20220916151604563

  • 诺基亚手机上的很多游戏都是使用Java编写的。
  • 安卓系统中的各种应用程序也是使用Java编写的。
  • 著名沙盒游戏《Minecraft》也有对应的Java版本得益于Java跨平台特性无论在什么操作系统上都可以玩到这款游戏。
  • ...

有关Java的详细发展历程可以参考《Java核心技术·卷I》第一章

可见Java实际上早已在我们生活中的各个地方扎根。那么Java语言是什么样的一个运行机制呢

实际上我们的Java程序也是需要进行编译才可以运行的这一点与C语言是一样的Java程序编译之后会变成.class结尾的二进制文件:

image-20220916153102763

不过不同的是这种二进制文件计算机并不能直接运行而是需要交给JVMJava虚拟机执行。

image-20220916152514450

JVM是个什么东西呢简单来说它就像我们前面介绍的解释器一样我们可以将编译完成的.class文件直接交给JVM去运行而程序中要做的事情也都是由它来告诉计算机该如何去执行。

在不同的操作系统下都有着对应的JVM实现我们只需要安装好就可以了而我们程序员只需要将Java程序编译为.class文件就可以直接交给JVM运行无论是什么操作系统JVM都采用的同一套标准读取和执行.class文件,所以说我们编译之后,在任何平台都可以运行,实现跨平台。

由于Java又需要编译同时还需要依靠JVM解释执行所以说Java既是编译型语言,也是解释型语言。

Java分为很多个版本

  • **JavaSE**是我们本教程的主要学习目标它是标准版的Java也是整个Java的最核心内容在开始后续课程之前这是我们不得不越过的一道坎这个阶段一定要认真扎实地将Java学好不然到了后面的高级部分会很头疼。
  • **JavaME**微缩版Java已经基本没人用了。
  • **JavaEE**企业级Java比如网站开发它是JavaSE阶段之后的主要学习方向。

从下节课开始我们就正式地进行Java环境的安装和IDE的使用学习。


环境安装与IDE使用

前面我们介绍了Java语言以及其本身的一些性质这一部分我们就开始进行学习环境安装这一部分请务必跟着操作不要自作主张地去操作一开始就出问题其实是最劝退新手的

JDK下载与安装

首先我们来介绍一下JDK和JRE各位小伙伴一定要能够区分这两者才可以。

  • JREJava Runtime EnvironmentJava的运行环境安装了运行环境之后Java程序才可以运行一般不做开发只是需要运行Java程序直接按照JRE即可。
  • JDKJava Development Kit包含JRE并且还附带了大量开发者工具我们学习Java程序开发就使用JDK即可。

它们的关系如下:

image-20220916154906732

那么现在我们就去下载JDK吧这里推荐安装免费的ZuluJDKhttps://www.azul.com/downloads/?version=java-8-lts&package=jdk

在这里选择自己的操作系统对应的安装包:

image-20220916155142546

比如Windows下我们就选择.msi的安装包即可MacOS、Linux下同样选择对应的即可

image-20220916155242814

下载完成后,我们直接双击安装:

image-20220916160027645

**注意,这里不建议各位小伙伴去修改安装的位置!**新手只建议安装到默认位置不要总担心C盘不够该装的还是要装尤其是这种环境实在装不下就去将其他磁盘的空间分到C盘一部分如果是因为没有安装到默认位置出现了任何问题你要是找不到大佬问的话又得重新来一遍就很麻烦。

剩下的我们只需要一路点击Next即可安装完成之后我们打开CMD命令窗口MacOS下直接打开“终端”来验证一下要打开CMD命令窗口Windows11可以直接在下面的搜索框搜索cmd即可或者直接在文件资源管理器路径栏输入cmd也可以

我们直接输入java命令即可

image-20220916160756046

如果能够直接输出内容,说明环境已经安装成功了,正常情况下已经配置好了,我们不需要手动去配置什么环境变量,所以说安装好就别管了。

输入java -version可以查看当前安装的JDK版本

image-20220916161050161

只要是1.8.0就没问题了,后面的小版本号可能你们会比我的还要新。

这样我们就完成了Java环境的安装我们可以来体验一下编写并且编译运行一个简单的Java程序我们新建一个文本文档命名为Main.txt(如果没有显示后缀名,需要在文件资源管理器中开启一下)然后用记事本打开,输入以下内容:

public class Main{
		public static void main(String[] args){
				System.out.println("Hello World!");
		}
}

现在看不懂没关系,直接用就行,我们后面会一点一点讲解的。

编辑好之后,保存退出,接着我们将文件的后缀名称修改为.java这是Java源程序文件的后缀名称

image-20220916161607822

此时我们打开CMD注意要先进入到对应的路径下比如我们现在的路径

image-20220916161720722

我们使用cd命令先进入到这个目录下:

image-20220916161802753

要编译一个Java程序我们需要使用javac命令来进行:

image-20220916161857278

执行后,可以看到目录下多出来了一个.class文件:

image-20220916161923814

这样我们就成功编译了一个Java程序然后我们就可以将其交给JVM运行了我们直接使用java命令即可:

image-20220916162048405

注意不要加上后缀名称,直接输入文件名字即可,可以看到打印了一个 Hello World! 字样我们的第一个Java程序就可以运行了。

IDEA安装与使用

前面我们介绍了JDK开发环境的安装以及成功编译运行了我们的第一个Java程序。

但是我们发现如果我们以后都使用记事本来进行Java程序开发的话是不是效率太低了点我们还要先编辑然后要改后缀还要敲命令来编译有没有更加方便一点的写代码的工具呢这里我们要介绍的是IntelliJ IDEA这里不推荐各位小伙伴使用Eclipse因为操作上没有IDEA这么友好

IDEA准确来说是一个集成开发环境IDE它集成了大量的开发工具编写代码的错误检测、代码提示、一键完成编译运行等非常方便。

下载地址:IntelliJ IDEAJetBrains 功能强大、符合人体工程学的 Java IDE如果你之前学习C语言程序设计篇使用过CLion你会发现界面一模一样这样就能方便你快速上手

image-20220916162544360

我们直接点击下载即可:

image-20220916162830260

这个软件本身是付费的比较贵而且最近还涨价了不过这里我们直接下载面的社区版本就行了JavaSE学习阶段不需要终极版但是建议有条件的还是申请一个因为后面JavaWeb开始就需要终极版了学生和教师可以直接免费申请一年的使用许可并且每个学期都可以续一年

下载好之后直接按照即可这个不强制要求安装到C盘自己随意但是注意路径中不要出现中文

image-20220916163329410

这里勾选一下创建桌面快捷方式就行:

image-20220916163401880

安装完成后,我们直接打开就可以了:

image-20220916163726690

此时界面是全英文如果各位小伙伴看得惯可以直接使用全英文的界面使用英文界面可以认识更多的专业术语词汇但是可能看起来没中文那么直观而且IDEA本身功能就比较多英语不好的小伙伴就很头疼这里还是建议英语不好的小伙伴使用中文界面要使用中文只需要安装中文插件即可

image-20220916164025426

我们打开Plugins插件这一栏然后直接在插件市场里面搜索Chinese可以找到一个中文语言包的插件我们直接Install安装即可安装完成后点击重启现在就是中文页面了

image-20220916164235648

如果各位小伙伴不喜欢黑色主题,也可以修改为白色主题,只需要在自定义中进行修改即可,一共四种主题。

如果你之前使用过其他IDE编写代码这里还支持按键映射采用其他IDE的快捷键方案有需要的可以自己修改一下

image-20220916164415447

接下来我们来看看如何使用IDEA编写Java程序IDEA是以项目的形式对一个Java程序进行管理的所以说我们直接创建一个新的项目点击新建项目

image-20220916164906998

此时来到创建页面:

image-20220916164941663

  • **名称:**你的Java项目的名称随便起就行尽量只带英文字母和数字不要出现特殊字符和中文。
  • **位置:**项目的存放位置,可以自己根据情况修改,同样的,路径中不要出现中文。
  • **语言:**IDEA支持编写其他语言的项目但是这里我们直接选择Java就行了。
  • **构建系统:**在JavaSE阶段一律选择IntelliJ就行了Maven我们会在JavaWeb之后进行讲解Gradle会在安卓开发教程中介绍。
  • **JDK**就是我们之前安装好的JDK如果是默认路径安装这里会自动识别所以说不要随便去改不然这些地方就很麻烦

当然如果JDK这里没有自动识别到那么就手动添加一下

image-20220916165351016

没问题之后,我们直接创建项目:

image-20220916165926205

进入之后,可以看到已经自动帮助我们创建好了一个java源文件跟我们之前的例子是一样的。要编译运行我们的Java程序只需要直接点击左边的三角形启动按钮即可

image-20220916170119203

点击之后,会在下方自动开始构建:

image-20220916170201943

完成之后,就可以在控制台看到输出的内容了:

image-20220916170231090

我们可以看到新增加了一个out目录,这里面就是刚刚编译好的.class文件:

image-20220916170358904

IDEA非常强大即使是编译之后的二进制文件也可以反编译回原代码的样子

image-20220916170442922

如果我们想写一个新的Java项目可以退出当前项目重新创建

image-20220916170558720

此时项目列表中就有我们刚刚创建的Java项目了

image-20220916170654353

如果你还想探索IDEA的其他功能可以点击欢迎页最下方的学习

image-20220916164837599

会有一个专门的引导教程项目,来教你如何使用各项功能:

image-20220916164703111

IDEA新UI介绍和外观设置

IDEA在2022年开启了界面新UI的测试并将在年底前实装所以说我们将老UI界面改为新的UI界面进行介绍如果已经是新UI的样式那么就不需要像下面一样开启了

我们随便进入一个项目然后双击Shift出现搜索框这个搜索框很好用什么都能搜输入registry

image-20220916171015360

找到ide.experimental.ui将其勾选上然后重启IDEA就变成新的UI样式了你不说这是IDEA我还以为是VS呢

image-20220916171139281

这里介绍一下新UI的各个功能首先是运行项目依然是点击左侧三角形

image-20220916171251054

在第一次运行后,会自动生成一个运行配置,我们也可以直接点击右上角的运行:

image-20220916171324195

效果是一样的都可以编译运行Java项目。上面一排工具栏被丢到了一个菜单里面

image-20220916171421975

如果各位小伙伴觉得代码字体太小了,可以在设置中进行调整:

image-20220916171604891

IDEA的所有通知都可以在通知中查看

image-20220916171736462

我们来看右下角,第一个三角形图标是运行的结果:

image-20220916171806992

第二栏是终端其实就是内嵌的一个CMD命令窗口可以自由敲命令默认是位于项目根目录下

image-20220916171854171

至此学习前准备就完成了从下节课开始我们将正式进入到Java语言的学习中。