深入Java基础(一)概述

8 篇文章 0 订阅

一、计算机简述

计算机宏观组成:硬件+软件

1、计算机硬件

是电子计算机的物理设备。系统软件存储在硬件内,包含固件(如BIOS)以及操作系统,系统软件使应用程序可以提供用户所需的功能。操作系统通常借由总线与设备沟通,这就需要驱动程序。

计算机硬件包括计算机的物理,有形部件或组件,例如机柜、中央处理器、监视器、键盘、数据存储器、图形卡、声卡、扬声器和主板。相比之下,软件是可以由硬件存储和运行的指令。硬件被认为是因为它在变化或修改方面“硬”或严格,而软件是“软”的,因为它很容易更新或更改。软件和硬件之间的中间是“固件”,它是与计算机系统的特定硬件强耦合的软件,因此最难以改变,但在界面的一致性方面也是最稳定的。计算机系统中从“硬度”到“柔软度”的级别的进展与计算中的抽象层的进展相似。

硬件通常由软件指示以执行任何命令或指令。硬件和软件的组合形成可用的计算系统,尽管存在仅具有硬件组件的其他系统。

硬件的主要部分是主板,它是一块大的方形板,上面有复杂的电路连接到电脑的其他部分,包含中央处理器(CPU)、随机存取存储器、硬盘、光盘驱动器(CD、DVD,或是其他的光盘),以及其他借由插孔或是端口而连接的设备。

1.1 中央处理器

中央处理器(英语:Central Processing Unit,缩写:CPU)处理电脑内大部分的计算,其被认为是电脑的大脑。它藉散热器和风扇来降温。新型的中央处理器包含图形处理器。

参考链接:https://zh.wikipedia.org/wiki/%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8

1.2 随机存取存储器

别名:内部存储器(内存)

随机存取存储器(英语:Random-access memory,缩写:RAM)是与中央处理器直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时资料存储介质。

主存(Main memory)即电脑内部最主要的存储器,用来加载各式各样的程序与资料以供中央处理器直接执行与运用。由于 DRAM 的性价比很高,且扩展性也不错,是现今一般电脑主存的最主要部分。2011 年生产电脑所用的主存主要是 DDR3 SDRAM,而 2016 年开始 DDR4 SDRAM 逐渐普及化,笔记本电脑厂商开始在笔记本电脑以 DDR4 存储器取代 DDR3L。

RAM 存储器可以进一步分为静态随机存取存储器(SRAM)和动态随机存取存储器(DRAM)两大类。SRAM 具有快速访问的优点,但生产成本较为昂贵,一个典型的应用是缓存。而 DRAM 由于具有较低的单位容量价格,所以被大量的采用作为系统的主存。

动态随机存取存储器(DRAM)的特点
  • 随机存取:指的是当存储器中的消息被读取或写入时,所需要的时间与这段信息所在的位置无关。相对地,有串行访问存储器包括顺序访问存储器(如:磁带)和直接访问存储器(如:磁盘)
  • 易失性:当电源关闭时 RAM 不能保留数据。如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)
  • 较高的访问速度:现代的随机存取存储器几乎是所有访问设备中写入和读取速度最快的,访问延迟也和其他涉及机械运作的存储设备(如硬盘、光盘驱动器)相比,也显得微不足道。但速度仍然不如作为 CPU 缓存用的 SRAM。

参考链接:https://zh.wikipedia.org/wiki/%E9%9A%8F%E6%9C%BA%E5%AD%98%E5%8F%96%E5%AD%98%E5%82%A8%E5%99%A8

总结:内存负责硬盘上的数据与CPU之间数据交换处理,保存从硬盘读取的数据,提供给CPU使用;保存CPU的一些临时执行结果,以便CPU下次使用或保存到硬盘。特点:断电后数据丢失。

1.3 硬盘

硬盘驱动器(英语:hard disk drive,缩写:HDD)简称硬盘(hard disk)或硬驱(hard drive),有时为了与后来出现的固态驱动器相区分而也称“机械硬盘”或“传统硬盘”,是电脑上使用坚硬的旋转磁性盘片为基础的非依电性存储器,它在平整的磁性表面存储和检索数字数据,数据通过离磁性表面很近的磁头由电磁流来改变极性的方式被写入到磁盘上,数据可以通过盘片被读取,原理是磁头经过盘片的上方时盘片本身的磁场导致读取线圈中电气信号改变。硬盘的读写是采用半随机存取的方式,可以以任意顺序读取硬盘中的资料,但读取不同位置的资料速度不相同。硬盘包括一至数片高速转动的盘片以及放在执行器悬臂上的磁头。

在这里插入图片描述

早期的硬盘存储介质是可替换的,不过现在硬盘的存储介质一般不能更换,盘片与磁头是一起被密封在硬盘驱动器内。硬盘有一个有着过滤措施的气孔,用来平衡工作时产生的热量导致的硬盘内外的气压差。

硬盘是由IBM在1956年开始使用,在1960年代初成为通用式电脑中主要的辅助存放设备,随着技术的进步,硬盘也成为服务器及个人电脑的主要组件。

计算机最主要的存储设备,容量大,断电数据不丢失。

分类如下:

  • 机械硬盘(HDD)

  • 固态硬盘(SSD)在开机速度和程序加载速度远远高于机械硬盘,缺点就是贵,无法完全取代机械硬盘

  • 混合硬盘(SSHD)

  • 内存(Memory):负责硬盘上的数据与CPU之间数据交换处理

    • 保存从硬盘读取的数据,提供给CPU使用
    • 保存CPU的一些临时执行结果,以便CPU下次使用或保存到硬盘
    • 断电后数据丢失

在这里插入图片描述

2、计算机软件

软件(英语:software)是一系列按照特定顺序组织的电脑数据和指令,是电脑中的非有形部分。电脑中的有形部分称为硬件,由电脑的外壳及各零件及电路所组成。电脑软件需有硬件才能运作,反之亦然,软件和硬件都无法在不互相配合的情形下进行实际的运作。

一般来说,计算机软件划分为编程语言、系统软件、应用软件和介于这两者之间的中间件。其中系统软件为计算机使用提供最基本的功能,但是并不针对某一特定应用领域。而应用软件则恰好相反,不同的应用软件根据用户和所服务的领域提供不同的功能。

软件包括所有在电脑执行的程序,和其架构无关,例如可执行文件、库及脚本语言都属于软件。软件不分架构,有其共通的特性,在执行后可以让硬件执行依设计时要求的机能。软件存储在存储器中,软件不是可以碰触到的实体,可以碰触到的都只是存储软件的零件(存储器)或是介质(光盘或磁片等)。

软件并不一定只包括可以在计算机上运行的计算机程序,有些定义中,与计算机程序相关的文档,一般也被认为是软件的一部分。简单的说软件就是程序加文档的集合体。软件被应用于世界的各个领域,对人们的生活和工作都产生了深远的影响。

Pascal之父Nicklaus Wirth: “Programs = Data Structures + Algorithms”

2.1 系统软件

指用来运行或控制硬件所开发的计算机软件,如操作系统、解释器、编译器、数据库管理系统、公用程序等面向开发者的软件。负责管理计算机系统中各种独立的硬件,使得它们可以协调工作,提供基本的功能,并为正在运行的应用软件提供平台。系统软件使得计算机用户和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。而各个硬件工作的细节则由驱动程序处理。

常见的系统软件包含:

  • 操作系统(operating system):负责控制与管理计算机硬件与软件资源,并提供用户操作接口,让用户可与计算机交互的系统软件,例如:UNIX、Linux、OS X、Microsoft Windows。

在这里插入图片描述

  • 编译器(compiler):将编程语言撰写的代码,转换成计算机可识读的机器语言,产生可执行文件,例如:GNU C Compiler(GCC)、LLVM,现今许多编译器包含了编译、汇编与链接等多种系统程序功能。
  • 解释器(interpreter):能够把高级编程语言逐行直接转译运行,而非将所有内容都转译后才运行。
  • 链接器(linker):将由编译器或汇编器产生的目标文件和外部程序库链接为一个可执行文件。
  • 加载器(loader):负责将程序加载到存储器中,并配置存储器与相关参数,使之能够运行,现今许多集成开发环境(IDE)集成了编译器与加载器,使的开发人员可以在编译后立即运行测试结果。
  • 汇编器(assembly):将用汇编语言编写,或是编译器转换过程中产生的汇编语言文件,转换成机器语言文件。
  • 调试器(debugger):用于调试其它程序,能够让代码在指令组模拟器(ISS)中可以检查运行状况以及选择性地运行(例如设置中断点)。
  • 硬件驱动程序(driver):它提供了一个软硬件接口,让电脑软件可以与硬件交互的程序。
  • 公用程序(utility software):管理电脑的许多任务具程序,如:文件管理程序、格式化工具、磁盘管理。

2.2 应用软件

简称应用(application或app),应用程序是指为针对用户的某种特殊应用目的所撰写的程序,例如文本处理器、QQ、B站、表格、会计应用、浏览器、媒体播放器、航空飞行模拟器、命令行游戏、图像编辑器等。

应用软件是为了某种特定的用途而被开发的软件。它可以是一个特定的程序,比如一个图像浏览器。也可以是一组功能联系紧密,可以互相协作的程序的集合,比如微软的Office软件。也可以是一个由众多独立程序组成的庞大的软件系统,比如数据库管理系统。

计算机中操作系统及应用软件层次的示意图,图中的箭头表示信息流动方向。

在这里插入图片描述

2.3 中间件

中间件(英语:Middleware),又译中间件、中介层,是一类提供系统软件和应用软件之间连接、便于软件各部件之间的沟通的软件,应用软件可以借助中间件在不同的技术架构之间共享信息与资源。中间件位于客户机服务器的操作系统之上,管理着计算资源和网络通信。

中间件在现代信息技术应用框架如Web服务、面向服务的体系结构等中应用比较广泛,如数据库、Apache的Tomcat,IBM公司的WebSphere,BEA公司的WebLogic应用服务器,金蝶的Apusic系列产品,东方通的Tong系列中间件等都属于中间件。

严格来讲,中间件技术已经不局限于应用服务器、数据库服务器。围绕中间件,Apache组织、IBM、Oracle(BEA)、微软各自发展出了较为完整的软件产品体系。(Microsoft Servers微软公司的服务器产品)。

目前主流操作系统主要为Unix、Linux、苹果公司的系统以及微软视窗系列。微软阵营的主要技术提供商来自微软及其商业伙伴,Java阵营则来自IBM、Sun(已被Oracle收购)、Oracle、BEA(已被Oracle收购)、东方通(Tong系列中间件)、金蝶(Kingdee Apusic)及其合作伙伴,开源阵营则主要来自诸如Apache,SourceForge等组织的共享代码。

1)概念

中间件的概念是随着技术的发展而发展的。

中国科学院软件所研究员仲萃豪把中间件定义为“平台+通信”。这个定义限定了只有用于分布式系统中的此类软件才能被称为中间件,同时此定义也把中间件与实际应用的应用软件区分开来。

中间件技术创建在对应用软件部分常用功能的抽象上,将常用且重要的过程调用、分布式组件、消息队列、事务、安全、链接器、商业流程、网络并发、HTTP服务器、Web Service等功能集于一身或者分别在不同品牌的不同产品中分别完成。一般认为在商业中间件及信息化市场主要存在微软阵营、Java阵营、开源阵营。阵营的区分主要体现在对下层操作系统的选择以及对上层组件标准的制订。

基于中间件技术构建的商业信息软件广泛的应用于能源、电信、金融、银行、医疗、教育等行业软件,降低了面向行业的软件的开发成本。

2)特点
  • 中间件是软件,而且是一大类具有不同功能的软件,而不是一种具备某具体功能的软件;
  • 中间件是伴随着网络而应运而生的;
  • 中间件是应用软件与系统软件之间的“中介件”“介中软件”,起到支撑与连接作用;
  • 中间件不是开发工具,但它具有开发、管理和部署的功能;
  • 中间件是为应用软件服务的,应用软件是为最终用户服务的,最终用户并不直接使用中间件;
  • 中间件不是大众消费类软件产品,除非是一个行业内的专业人士,普通消费者是不会接触中间件的;
  • 在基础软件(操作系统、数据库、中间件)中,中间件是最不为人所了解的;
3)作用
  1. 集成运行环境:中间件能够屏蔽、弥合底层运行环境中的差异性与异构性,确保整个系统在异构平台间能够稳定运行;
  2. 提高开发效率:中间件能够提高开发效率,大幅缩短开发周期;
  3. 软件质量:中间件能够明晰系统内的不同层级,对接不同的可插拔方式,从而保障软件的质量;
  4. 节约成本:中间件可大幅节省应用系统内的系统资源,并减少运行成本。

3、计算机程序

计算机本身就是一坨废铁,但是我们是编写计算机程序让我们的计算机“动起来”,用另一个比喻想与人更顺畅的交流我们有了中文、英文、日语、德语等等,同理我们想与计算机交流就要编写计算机程序。

计算机程序(英语:Computer Program)是指一组指示电子计算机或其他具有消息处理能力的电子设备每一步动作的指令,通常用某种程序设计语言编写,运行于某种目标体系结构上。打个比方,一个程序就像一个用汉语(程序设计语言)写下的红烧肉菜谱(程序源代码),用于指导懂汉语的人(体系结构)来做这个菜。 计算机程序是软件的一个组成部分,它还包括文档和其他无形组成部分。通常,以英文文本为基础的计算机程序要经过编译和链接而成为一种人们不易看清而计算机可解读的一连串数字的格式,然后放入运行。这种程序也叫作编译语言。未经编译就可运行的程序,通常称之为脚本程序(script)或解释型语言。

3.1 程序的运行

为了一个程序运行,计算机加载程序代码,可能还要加载数据,从而初始化成一个开始状态,然后调用某种启动机制。在最低层上,这些是由一个加载器开始的。

在大多数计算机中,操作系统例如Windows等,加载并且执行很多程序。在这种情况下,一个计算机程序是指一个单独的可执行的映射,而不是当前在这个计算机上运行的全部程序。

程序里的指令都是基于机器语言。程序通常由一个计算机程序设计语言编写,然后由改语言的编译器(或者,有时由汇编程序)编译为机器语言。

3.2 冯诺依曼体系结构

在这里插入图片描述
存储程序计算机在体系结构上主要特点有:

  • 以运算单元为中心
  • 采用存储程序原理
  • 存储器是按地址访问、线性编址的空间
  • 控制流由指令流产生
  • 指令由操作码和地址码组成
  • 数据以二进制编码

冯·诺伊曼结构又做普林斯顿结构,在一台基于最常见的冯诺依曼体系结构的计算机上,程序从某种外部设备,通常是硬盘,被加载到计算机之内。 如果计算机选择冯诺依曼体系结构,那么程序就被加载入内存。 指令序列顺序执行,直到一条跳转或转移指令被执行,或者一个中断出现。所有这些指令都会改变指令寄存器的内容。

基于这种体系的计算机,如果没有程序的支持,将无法工作。一个计算机程序是一系列指令的集合。

程序里的指令都是基于机器语言;程序通常首先用一种计算机程序设计语言编写,然后用编译器或者解释器翻译成机器语言。 有时,也可以用汇编语言编程,汇编语言实质就是表示机器语言的一组记号-在这种情况下,用于翻译的程序叫做汇编程序。

3.3 程序和数据

数据可以被定义为被程序处理的信息。当我们考虑到整个计算机系统时,有时程序和数据的区别就不是那么明显了。中央处理器有时有一组微指令控制硬件,数据可以是一个有待执行的程序(参见脚本编程语言),程序可以编写成去编写其它的程序;所有这些例子都使程序和数据的比较成为一种视角的选择。有人甚至断言程序和数据没有区别。

编写一个程序去生成另外一个程序的过程被称之为元编程。它可以被应用于让程序根据给定数据生成代码。单单一个程序可能不足以表示给定数据的所有方面。让一个程序去分析这个数据并生成新的程序去处理数据所有的方面可能会容易一些。Lisp就是一例支持这种编程模式的程序语言。

在神经网络里储存的权重是一种数据。正是这些权重数据,跟网路的拓扑结构一起,定义了网络的行为。人们通常很难界定这些数据到底表示什么或者它们是否可以由程序来代替。这个例子以及跟人工智能相关的其它一些问题进一步考验程序和数据的区别。

3.4 算法

算法指解决某个问题的严格方法,通常还需辅以某种程度上的运行性能分析。算法可以是纯理论的,也可以由一个计算机程序实现。理论算法通常根据复杂性分为不同类别;实现的算法通常经过剖析以测试其性能。请注意虽然一个算法在理论上有效可行,但是一个糟糕的算法仍会浪费宝贵的计算机资源。

4、编程语言

编程语言:用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令,一种能够让程序员准确地定义计算机所需要使用数据的计算机语言,并精确地定义在不同情况下所应当采取的行动。简单来说编程语言就是人与计算机之间进行信息交流沟通的一种特殊语言(也叫做编程语言)

最早的编程语言其实是在电脑发明之前产生的,当时是用来控制提花织布机及自动演奏钢琴的动作。在电脑领域已发明了上千不同的编程语言,而且每年仍有新的编程语言诞生。很多编程语言需要用指令方式说明计算的程序,而有些编程语言则属于宣告式编程,说明需要的结果,而不说明如何计算。

编程语言的描述一般可以分为语法及语义。语法是说明编程语言中,哪些符号或文字的组合方式是正确的,语义则是对于编程的解释。有些语言是用规格文件定义,例如C语言的规格文件也是ISO标准中一部分,2011年后的版本为ISO/IEC 9899:2017,而其他语言(例如Ada或者Perl)有一份编程语言实现文件,视为参考实现。

源代码:是指以编程语言所撰写的一系列人类可阅读的电脑指令,以实现出软件的行为和功能。

4.1 简史

以最低端的角度来看,可执行文件中包括了针对特定微处理器(一般会是CPU)的机器代码,机器代码包括了一连串二进制的数值,使处理器从目前的状态变换到下一个状态。例如指令可能会修改电脑内一特定位置中的数值,其效果是用户无法直接观测到的,指令也可能让屏幕上显示特定资料,这种状态变换是用户可以看到的。处理器会依照顺序处理收到的指令,不过处理器的处理也可能受到中断,或是因为流程控制指令而改变其要处理的指令。

机器代码是许多二进制的数值,不方便工程师阅读及开发程序,因此有汇编语言,将机器代码转换为人可以看懂的助忆码。不过现在多半的软件是用高级语言撰写,比较类似自然语言,对人类而言比机器代码或汇编语言要简单,方便人类使用。高级语言一般会用直译或编译的方式,将软件的源代码转换为机器代码。

1)机器语言

机器语言(machine language)是一种指令集的体系。这种指令集称为机器代码(machine code),是计算机的CPU或GPU可直接解读的资料。

机器代码有时也被称为原生码(Native Code),这个名词比较强调某种编程语言或库与执行平台相关的部分。
在这里插入图片描述

机器语言是用二进制代码表示的、计算机能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。不同种类的计算机其机器语言是不兼容的,按某种计算机的机器指令编制的程序不能在另一种计算机上执行。

要用机器语言编写程序,编程人员需首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员要自己处理每条指令和每一数据的存储分配和输入输出,还需记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作,编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,这样编写出的程序完全是0与1的指令代码,可读性差且容易出错。在现今,除了计算机生产厂家的专业人员外,绝大多数程序员已经不再学习机器语言。

在这里插入图片描述

2)汇编语言

汇编语言(英语:assembly language:汇编语言)是任何一种用于电子计算机、微处理器、微控制器,或其他可编程器件的低级语言。在不同的设备中,汇编语言对应着不同的机器语言指令集。一种汇编语言专用于某种计算机系统结构,而不像许多高级语言,可以在不同系统平台之间移植。

使用汇编语言编写的源代码,然后通过相应的汇编程序将它们转换成可执行的机器代码。这一过程被称为汇编过程

汇编语言使用助记符(Mnemonics)来代替和表示特定低级机器语言的操作。特定的汇编目标指令集可能会包括特定的操作数。许多汇编程序可以识别代表地址和常量的标签(Label)和符号(Symbols),这样就可以用字符来代表操作数而无需采取写死的方式。普遍地说,每一种特定的汇编语言和其特定的机器语言指令集是一一对应的。

许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。有的汇编语言编写工具经常会提供宏,它们也被称为宏汇编器。

现在汇编语言已不像其他大多数的程序设计语言一样被广泛用于程序设计,在今天的实际应用中,它通常被应用在底层硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序中都会需要汇编语言。

典型的现代汇编器(assembler)建造目标代码,由解译组语指令集的助记符(Mnemonics)到操作码,并解析符号名称(Symbolic names)成为存储器地址以及其它的实体。使用符号参考(symbolic references)是汇编器的一个重要特征,它可以节省修改程序后人工转址(manual address updates)的乏味耗时计算。基本就是把机器码变成一些字母而已,编译的时候再把输入的指令字母替换成为晦涩难懂的机器码。

在这里插入图片描述

随着现代软件系统越来越庞大复杂,大量经过了封装的高级语言如C/C++,Pascal/Object Pascal也应运而生。这些新的语言使得程序员在开发过程中能够更简单,更有效率,使软件开发人员得以应付快速的软件开发的要求。而汇编语言由于其复杂性使得其适用领域逐步减小。但这并不意味着汇编已无用武之地。由于汇编更接近机器语言,能够直接对硬件进行操作,生成的程序与其他的语言相比具有更高的运行速度,占用更小的内存,因此在一些对于时效性要求很高的程序、许多大型程序的核心模块以及工业控制方面大量应用。

总结:汇编语言就是使用英文缩写的助记符来表示基本的操作,这些助记符构成了汇编语言的基础。

优点:运行速度约等于机器机器

缺点:也是因为面向机器的,不同计算机机型特点不同,因此会有不同的汇编语言,彼此之间指令集不同不能通用。程序不易移植,较难调试。

3)高级语言

高级编程语言(High-level programming language)是高度封装了的编程语言,与低级语言相对。它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示,有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。由于早期电脑业的发展主要在美国,因此一般的高级语言都是以英语为蓝本。在1980年代,当东亚地区开始使用电脑时,在日本、台湾及中国大陆都曾尝试开发用各自地方语言编写的高级语言,当中主要都是改编BASIC或专用于数据库资源访问的语言,但是随着编程者的外语能力提升,现时的有关开发很少。

总计:高级语言独立于机器,有一定的通用性;但是计算机不能直接识别和执行用高级语言编写的程序,还是需要使用编译器或者解释器,转换为机器语言才能被识别和执行。

在这里插入图片描述

在这里插入图片描述

4.2 概述

编程语言原本设计是专用于计算机,也用来定义算法或者数据结构。故而程序员试图使程序代码容易阅读。

编程语言往往使程序员能够比使用机器语言更准确地表达他们所想表达的目的。对那些从事计算机科学的人来说,懂得程序设计语言是十分重要的,因为在当今所有的计算都需要程序设计语言才能完成。

之所以有那么多种不同的编程语言存在的原因是,编写程序的初衷其实也各不相同;新手与老手之间技术的差距非常小,而且有许多语言对新手来说太容易学;还有,不同程序之间的运行成本各不相同。

有许多用于特殊用途的语言,只在特殊情况下使用。例如,PHP专门用来显示网页;Perl适合文本处理;C语言被广泛用于操作系统和编译器的开发(所谓的系统编程)

高级语言的出现使得计算机程序设计语言不再过度地依赖某种特定的机器或环境。这是因为高级语言在不同的平台上会被编译成不同的机器语言,而不是直接被机器执行。最早出现的编程语言FORTRAN的一个主要目标,就是实现平台独立。

虽然大多数的语言既可被编译又可被解译,但大多数仅在一种情况下能够良好运行。在一些编程系统中,程序要经过几个阶段的编译,一般而言,后阶段的编译往往更接近机器语言。这种常用的使用技巧最早在1960年代末用于BCPL,编译程序先编译一个叫做“0代码”的转换程序,然后再使用虚拟器转换到可以运行于机器上的真实代码。这种成功的技巧之后又用于Pascal和P-code,以及Smalltalk和二进制码,在很多时候,中间过渡的代码往往是解译,而不是编译的。

如果所使用的翻译的机制是将所要翻译的程序代码作为一个整体翻译,并之后运行内部格式,那么这个翻译过程就被称为编译。因此,一个编译器是一个将人可阅读的程序文本(叫做源代码)作为输入的数据,然后输出可执行文件。所输出的可执行文件可以是机器语言,由计算机的中央处理器直接运行,或者是某种模拟器的二进制代码。

如果程序代码是在运行时才即时翻译,那么这种翻译机制就被称作直译。经直译的程序运行速度往往比编译的程序慢,但往往更具灵活性,因为它们能够与执行环境互相作用。

4.3 特点

每一种程序设计语言可以被看作是一套包含语法、词汇和含义的正式规范。

这些规范通常包括:

  • 数据和数据结构
  • 指令及流程控制
  • 引用机制和重用
  • 设计哲学

编程语言不成文规定:标识符(Identifier)命名常规

标志符(英文对应词:identifier,缩写为ID),又称为识别码,是一个用来识别物件的名称,识别对象可能是概念、具体可数的物体或是不可数的物质。标志符可能是字、编号、字母、符号,也可能是由上述元素所组成。
在编程语言中,标志符就是程序员自己规定的具有特定含义的词,比如类名称,属性名称,变量名等。

大多数被广泛使用或经久不衰的编程语言,拥有负责标准化的组织,经常会晤来创造及发布该编程语言的正式定义,并讨论扩展或贯彻现有的定义。

1)数据和数据结构

现代计算机内部的数据都只以二元方式储存,即开-关模式(on-off)。现实世界中代表信息的各种数据,例如名字、银行账号、度量以及同样低端的二元数据,都经由程序设计语言整理,成为高阶的概念。

一个程序中专门处理数据的那个系统被称为程序语言的型态系统(type system);对型态系统的研究和设计被称为型态理论(type theory)。语言可以被分为静态型态系统(statically typed systems),例如C++和Java,和动态型态系统(dynamically typed systems),例如Lisp,JavaScript,Tcl和Prolog。前者可被进一步分为包含宣告型态(manifest type)的语言,即每一个变量和函数的型态都清楚地宣告,或type-inferred语言(例如MUMPS,ML)。

大多数语言还能够在内置的型态基础上组合出复杂的数据结构型态(使用数组,列表,堆栈,文件等等)。面向对象语言(Object Oriented Language,又译作“对象导向语言”)允许程序员定义新的数据型态,即对象(objects),以及运行于该对象的函数(functions)和方法(methods)。

除了何时以及如何确定表达式和型态的联系,另外一个重要的问题就是语言到底定义了哪些型态,以及允许哪些型态作为表达式的值。诸如C编程语言之类的低端语言允许程序命名内存位置、内存区域以及编译时的常量;ANSI C甚至允许表达式返回结构值(struct values)。功能性的语言一般允许变量直接使用运行时计算出的值,而不是指出该值可能储存的内存地址。

常见的数据结构:

  • 数组
  • 记录/结构体
  • 链表
  • 堆栈
  • 队列
  • 散列
2)指令及流程控制

一旦数据被确定,机器必须被告知如何对这些数据进行处理。较简单的指令可以使用关键字或定义好的语法结构来完成。不同的程序语言利用序列系统来获取或组合这些语句。除此之外,一个程序语言中的其他指令也可以用来控制处理的过程(例如分支、循环等)

3)引用机制和重用

引用的中心思想是必须有一种间接设计储存空间的方法。最常见的方法是通过命名变量。根据不同的语言,进一步的引用可以包括指向其他储存空间的指针。还有一种类似的方法就是命名一组指令。大多数程序设计语言使用宏调用、过程调用或函数调用。使用这些代替的名字能让程序更灵活,并更具重用性。

4.4 功能

编程语言可借助机械、电机、电子、电脑、手机完成人类需求的计算、功能与目的。

1)实体的传输链接

透过低级编程语言或高级编程语言,将实体间接达成传输链接或控制实体。

2)应用程序的发展

高阶编程语言可发展多功能的应用程序软件,例如工程计算、操作系统、文件处理、播放软件、网页设计、手机应用程序(App)等。

编程语言排行榜:https://www.tiobe.com/tiobe-index/

二、人机交互

人机交互通常有两种方式:图形化界面交互与命令行界面交互。通常认为,命令行界面(CLI)没有图形用户界面(GUI)那么方便用户操作。因为,命令行界面的软件通常需要用户记忆操作的命令,但是,由于其本身的特点,命令行界面要较图形用户界面节约计算机系统的资源。在熟记命令的前提下,使用命令行界面往往要较使用图形用户界面的操作速度要快。所以,在现在的图形用户界面的操作系统中,通常都保留着可选的命令行界面。

虽然现在许多计算机系统都提供了图形化的操作方式,但是却都没有因而停止提供文字模式的命令行操作方式,相反的,许多系统反而更加强这部分的功能,例如Windows就不只加强了操作命令的功能和数量,也一直在改善Shell Programming的方式。而之所以要加强、改善,自然是因为不够好;操作系统的图形化操作方式对单一客户端计算机的操作,已经相当方便,但如果是一群客户端计算机,或者是24小时运作的服务器计算机及路由器、交换器等电信设备,图形化操作方式有时会力有未逮,所以需要不断增强命令行界面的脚本语言和宏语言来提供丰富的控制与自动化的系统管理能力,例如Linux系统的Bash或是Windows系统的Windows PowerShell。

1、CMD的介绍

Windows命令提示符(cmd.exe)是Windows NT下的一个用于运行Windows控制台程序或某些DOS程序的壳层程序;或在Windows CE下只用于运行控制台程序的壳层程序。它被用于替代Windows 9x系统中所提供的COMMAND.COM和“MS-DOS提示符”。命令提示符的最初版本由Therese Stowell开发。

命令提示符就是为用户提供了一个命令行界面,该功能通过Win32控制台实现。用户可通过命令行运行程序和批处理文件,从而进行系统管理等。此外,命令提示符还支持管道和重定向功能。

简单来说cmd就是在windows操作系统中,利用命令行的方式去操作计算机。

我们可以利用cmd命令去操作计算机,比如:打开文件,打开文件夹,创建文件夹等。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

前面我们说过Windows PowerShellcmd有什么关系呢?事实上,我们通常说的cmd指的是cmdlet指令。cmdlet是Windows PowerShell的指令,发音念法为command-let。这相当于DOS或其他壳程序的内置指令,指令名称的格式都是以连字号(-)隔开的一对动词和名词,并且通常都是单数名词;例如在线查询说明的cmdlet指令为get-help,名称的动词部分大致有get、set、add、remove等等(字母都不分大小写)

在这里插入图片描述

打开CMD窗口

  1. 按下快捷键:win + R,此时会出现运行窗口

  2. 在运行窗口中输出cmd

  3. 输出回车

在这里插入图片描述

cmd 默认操作C盘下的users文件夹下的XXX文件夹(XXX就是计算机名)

2、常用CMD命令

操作说明
盘符名称:盘符切换。E:回车,表示切换到E盘。
dir查看当前路径下的内容。
cd 目录进入单级目录。cd itheima
cd …回退到上一级目录。
cd 目录1\目录2…进入多级目录。cd itheima\JavaSE
cd \回退到盘符目录。
cls清屏。
exit退出命令提示符窗口。

3、CMD举例

需求:利用cmd命令打开自己电脑上的QQ

完成步骤:

1、确定自己电脑上的QQ安装在哪里
2、启动cmd
3、进入到启动程序QQ.exe所在的路径。
4、输出qq.exe加回车表示启动qq。

在windows操作系统当中,文件名或者文件夹名是忽略大小写的。

4、环境变量

环境变量是一个动态命名的值,可以影响计算机上进程的行为方式。例如一个正在运行的进程可以查询TEMP环境变量的值,以发现一个合适的位置来存储临时文件,或者查询HOME或USERPROFILE变量,以找到运行该进程的用户所拥有的目录结构。

作用:在CMD的任意目录下,都可以启动某一个软件。

步骤:把这个软件的路径配置到环境变量中的PATH里面。

然后我们启动软件的时候,操作系统会先在当前路径下找,如果在当前目录没有再到环境变量的路径中去找。如果都找不到就提示无法启动。

详细步骤:

  • 右键我的电脑,选择属性。
  • 点击左侧的高级系统设置
  • 选择高级,再点击下面的环境变量。
  • 找系统变量里面的PATH
  • 把软件的完整路径,配置到PATH当中就可以了。
  • 把自己配置的路径,移动到最上面(选做)

图解示例如下:

第一步:右键点击我的电脑并选择属性

(如果无法出现第二步界面,可以打开我的电脑之后右键点击空白处)

在这里插入图片描述

第二步:点击高级系统设置

在这里插入图片描述

第三步:选择高级,再点击下面的环境变量

在这里插入图片描述

第四步:找系统变量里面的PATH

在这里插入图片描述

第五步:点击新建,把软件的完整路径,配置到PATH当中,再点击确定即可。

第六步:点击上移,把当前配置的路径移动到最上面(选做)

移动的好处:在CMD中打开软件时,会先找当前路径,再找环境变量,在环境变量中是从上往下依次查找的,如果路径放在最上面查找的速度比较快。

在这里插入图片描述

三、Java概述

Java官方教程:https://docs.oracle.com/javase/tutorial/

1、Java简介

Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

任职于Sun微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的编程语言,应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun微系统放弃了该项计划。随着1990年代互联网的发展,Sun微系统看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

Java编程语言的风格十分接近C++语言。继承了C++语言面向对象技术的核心,舍弃了容易引起错误的指针,以引用取代;移除了C++中的运算符重载和多重继承特性,用接口取代;增加垃圾回收器功能。在Java SE 1.5版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。Sun微系统对Java语言的解释是:“Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全、与系统无关、可移植、高性能、多线程和动态的语言”。

Java不同于一般的编译语言或解释型语言。它首先将源代码编译成字节码,再依赖各种不同平台上的虚拟机来解释执行字节码,从而具有“一次编写,到处运行”的跨平台特性。在早期JVM中,这在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的执行速度有了大幅提升。

与传统类型不同,Sun微系统在推出Java时就将其作为开放的技术。全球的Java开发公司被要求所设计的Java软件必须兼容。“Java语言靠群体的力量而非公司的力量”是Sun微系统的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同,此外,微软公司后来推出了与之竞争的.NET平台以及模仿Java的C#语言。后来Sun微系统被甲骨文公司并购,Java也随之成为甲骨文公司的产品。

在这里插入图片描述

  • 詹姆斯·高斯林(James Gosling)先生以“Java 技术之父”而闻名于世。他是Java 技术的创始人,他亲手设计了Java语言,并开发了Java编译器和Java虚拟机,使Java成为了世界上最流行的开发语言。
  • James Gosling于1984 年加入Sun公司,并一直服务于Sun公司,直至2010年前后,Sun被Oracle并购而加入Oracle,担任客户端软件集团的首席技术官; 2010年4月从Oracle离职。

1.1 Java的三大平台

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wfejX4Gk-1679844245515)(https://oss.lixiaoxu.cn/halo/image-20211218093009884.png)]

  • Java SE(Java Standard Edition)标准版,是其他两个版本的基础

    • 支持面向桌面级应用(如Windows下的应用程序)的Java平台,即定位个人计算机的应用开发。
    • 包括用户界面接口AWT及Swing,网络功能与国际化、图像处理能力以及输入输出支持等。
    • 此版本以前称为J2SE
  • Java ME(Java Micro Edition)小型版,用于嵌入式消费类电子设备或者小型移动设备的开发。

    • 支持Java程序运行在移动终端(手机、机顶盒)上的平台,即定位在消费性电子产品的应用开发
    • JavaME是JavaSE的内伸,精简了JavaSE 的核心类库,同时也提供自己的扩展类。增加了适合微小装置的类库:javax.microedition.io.*等。
    • 此版本以前称为J2ME
  • Java EE(Java Enterprise Edition)企业版,用于Web方向的网站开发

    • 为开发企业环境下的应用程序提供的一套解决方案,即定位在服务器端的Web应用开发
    • JavaEE是JavaSE的扩展,增加了用于服务器开发的类库。如:Servlet能够延伸服务器的功能,通过请求-响应的模式来处理客户端的请求;JSP是一种可以将Java程序代码内嵌在网页内的技术。
    • 版本以前称为J2EE
    • 2018年3月更名为Jakarta EE

1.2 Java的主要特性

  • 面向对象
  • 安全性
  • 多线程
  • 简单易用
  • 开源
  • 跨平台
  • 自动垃圾回收

1.3 Java语言跨平台的原理

  • 操作系统本身其实是不认识Java语言的。
  • 但是针对于不同的操作系统,Java提供了不同的虚拟机。

虚拟机会把Java语言翻译成操作系统能看得懂的语言。

在这里插入图片描述

同时JVM虚拟机也是跨语言的平台,只要源代码能编译形成class文件,就能丢进JVM运行!

在这里插入图片描述

1.4 JVM、JRE、JDK的关系

在这里插入图片描述

JVM(Java Virtual Machine),Java虚拟机

JRE(Java Runtime Environment),Java运行环境,包含了JVM和Java的核心类库(Java API)

JDK(Java Development Kit)称为Java开发工具,包含了JRE和开发工具

在这里插入图片描述

总结:我们只需安装JDK即可,它包含了java的运行环境和虚拟机

1.5 Java语言的主要版本

Java截至目前总共更新了20个版本,但是最主要的还是四个版本:

  • Java 5.0:这是Java的第一个大版本更新
  • Java 8.0:最稳定的长期支持版本,也是目前绝大数公司正在使用的版本
  • Java 11.0:长期支持版本
  • Java 17.0:最新的长期支持版本,官方极力推荐的版本!

看一下JRebel 于2022年4月前后发布了《2022 年Java生态系统状况报告》,报告中提到使用Java11 的占比最多,Java 8 紧随其后,如下图。而此前2020年的报告显示,Java8占比达到了84.48%

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hVHQsaKp-1679844245523)(https://oss.lixiaoxu.cn/halo/d315.jpeg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IztoSpQs-1679844245524)(https://oss.lixiaoxu.cn/halo/image-20220428151952049.png)]

在这里插入图片描述

在这里插入图片描述

Java版本是向下兼容的,新的版本只是在原有的基础上添加了一些新的功能而已。

2、下载和安装

注意:针对不同的操作系统,需要下载对应版本的JDK。

  • 安装:傻瓜式安装,下一步即可。默认的安装路径是在C:\Program Files

建议:

  1. 安装路径不要有中文,不要有空格等一些特殊的符号
  2. 以后跟开发相关的所有软件建议都安装在同一个文件夹中,方便管理

JDK的安装目录介绍

目录名称说明
bin该路径下存放了JDK的各种工具命令。javac和java就放在这个目录。
conf该路径下存放了JDK的相关配置文件。
include该路径下存放了一些平台特定的头文件。
jmods该路径下存放了JDK的各种模块。
legal该路径下存放了JDK各模块的授权文档。
lib该路径下存放了JDK工具的一些补充JAR包。

配置环境变量

  • 配置环境变量原因:开发Java程序,需要使用JDK提供的开发工具(比如javac.exe、java.exe等命令),而这些工具在JDK的安装目录的bin目录下,如果不配置环境变量,那么这些命令只可以在bin目录下使用,而我们想要在任意目录下都能使用,所以就要配置环境变量。

注意:现在最新从官网上下载的JDK安装时会自动配置javac、java命令的路径到Path环境变量中去 ,所以javac、java可以直接使用。

  • 配置方式:
    在这里插入图片描述

以前下载的老版本的JDK是没有自动配置的,而且自动配置的也只包含了4个工具而已,所以我们需要删掉已经配置完毕的,再次重新配置Path环境变量。

JAVA_HOME:告诉操作系统JDK安装在了哪个位置(未来其他技术要通过这个找JDK)

在这里插入图片描述

Path:告诉操作系统JDK提供的javac(编译)、java(执行)命令安装到了哪个位置

在这里插入图片描述

8、HelloWorld

“Hello, World!”程序通常指一类输出或显示“Hello, World!”(你好,世界!)字符串的计算机程序。在大多数通用编程语言中,这样的程序只有一小段代码,因此可以用来展示该编程语言的基本语法。“Hello, World!”往往是初学者学习某种编程语言所接触的第一个程序内容,同时它也是用来确认源代码编译器、程序开发或运行环境是否已经安装妥当并被操作者理解的常用手段。

1)Java程序开发运行流程:编写程序,编译程序,运行程序

2)HelloWorld案例的编写

新建文本文档文件,修改名称为HelloWorld.java

public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("HelloWorld");
	}
}

3)保存:未保存的文件在左上角会有*符号标记

4)编译文件,编译后会产生一个class文件

  • java文件:程序员自己编写的代码
  • class文件:交给计算机执行的文件

5)运行代码:运行的是编译之后的class文件

用到两个命令:

  • javac+ 文件名 + 后缀名 (就是编译java文件)
  • java + 文件名(运行编译之后的class文件)

Hello World程序样例:https://zh.wikipedia.org/wiki/Hello_World%E7%A8%8B%E5%BA%8F%E6%A0%B7%E4%BE%8B

HelloWorld案例常见问题

BUG

在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题统称为bug(漏洞)

BUG就是指软件运行时因程序本身有错误而造成功能不正常、死机、数据丢失、非正常中断等现象。有些程序错误会造成计算机安全隐患,此时叫漏洞。

一些有趣的隐错有时也会成为一种乐趣。在电脑游戏中,假如一些隐错不令游戏出现大错误的话,经常会变成一种玩游戏时的秘技(秘技有时是游戏设计者故意加入,用于检查程序设计,绕过不需要的步骤直接检验需要的地方时所使用的代码)

有严重后果的错误会受到广泛关注。修补、改正软件程序错误的过程称为调试。
在这里插入图片描述

BUG的解决
  1. 具备识别BUG的能力:多看
  2. 具备分析BUG的能力:多思考,多查资料
  3. 具备解决BUG的能力:多尝试,多总结
HelloWorld常见问题

1、非法字符问题:Java中的符号都是英文格式的

2、大小写问题:Java语言对大小写敏感(区分大小写)。

3、扩展名问题:在系统中显示文件的扩展名,避免出现HelloWorld.java.txt文件

4、编译问题:编译命令后的java文件名需要带文件后缀.java

5、运行问题:运行命令后的class文件名(类名)不带文件后缀.class

  • 常见错误代码1:
publicclass HelloWorld{
    public static void main(String[] args){
        System.out.println("HelloWorld");
    }
}

问题:publicclass之间缺少一个空格

一般来讲在单词之间的空格是不能省略的,如果是单词和符号之间的空格是可以省略的

  • 常见错误代码2:
public class HelloWorld{
    public static void main(String[] args){
        system.out.println("HelloWorld");
    }
}

问题:system首字母必须大写!!!

Java代码中,是严格区分大小写的。
所以该大写的地方一定要大写,该小写的地方一定要小写。

  • 常见错误代码3:
public class HelloWorld{
    public static void main(String[] args){
        System.out.println(HelloWorld);
    }
}

问题:第三行代码中的HelloWorld必须用双引号引起来,否则就会出现问题。

  • 常见错误代码4:
public class HelloWorld{
    public static void main(String[] args){
        System.out.println("HelloWorld")}
}

问题:在代码当中,所有的标点符号必须是英文状态下的。

参考链接:
尚硅谷视频教程
黑马视频教程
https://zh.wikipedia.org/wiki/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80
https://zh.wikipedia.org/wiki/Java

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值