1.1 什么是计算机
计算机包括硬件(hardware)和软件(software)两部分。
一台计算机由以下几个主要的硬件组件构成:
中央处理器CPU
内存(主存)
存储设备(如,磁盘、光盘)
输入设备(如,鼠标、键盘)
输出设备(如,显示器和打印机)
通信设备(如,调制解调器和网卡)
这些组件通过一个称为总线(bus)的子系统连接。在个人计算机上,总线搭建在主板上,主板是一个连接计算机各个部分的电路板。
1.1.1 中央处理器
中央处理器(Central Processing Unit)从内存中获取指令,然后执行这些指令。CPU通常由两部分组成:控制单元(control unit)和算术/逻辑单元(arithmetic/logic unit)。控制单元用于控制和协调其他组件的动作。算逻单元用于完成数值运算(加减乘除)和逻辑运算(比较)。
每台计算机都有一个内部时钟,该时钟以固定速度发射电子脉冲。这些脉冲用于控制同步各种操作的步调。时钟速度越快,在给定时间段内执行的指令就越多。时钟的速度单位是赫兹Hz,1赫兹相当于每秒1个脉冲。
核是处理器中实现指令读取和执行的部分。
1.1.2 比特和字节
计算机就是一系列的电路开关。其状态用二进制数字系统中的0和1表示,并将它们称为比特(bit,二进制数)。
计算机中字节(byte)是最小的存储单元,每个字节由8个比特构成。
各种类型的数据(如数字和字符)都被编码为字符序列。程序员不需要关心数据的编码和解码,这些都是系统根据编码模式(schema)来自动完成的。编码模式是一系列的规则,控制计算机将字符、数字和符号翻译成计算机可以实际处理的数据。大多数模式将每个字符翻译成预先确定的一个比特串。
计算机的存储能力是以字节和多字节来衡量的,如下:
千字节(kilobyte)大约是1000字节。
兆字节(megabyte)大约是100万字节。
千兆字节(gigabyte)大约是10亿字节。
万亿字节(terabyte)大约是1万亿字节。
1.1.3 内存
计算机的内存由一个有序的字节序列组成,用于存储程序及程序需要的数据。一个程序和它的数据在被CPU执行前必需移到计算机的内存中。
每个字节都有一个唯一的地址,使用这个地址确定字节的位置,以便于存储和获得数据。因为可以按任意顺序存取字节,所以内存也被称为随机访问存储器(Random-Access Memory)。
内存中字节的内容永远非空,但是它的原始内容可能对于你的程序来说是毫无意义的。一旦新的信息被放入内存,该字节的当前内容就会丢失。
1.1.4 存储设备
计算机的内存是一种易失的数据保存形式:断电时存储在内存中的信息就会丢失。程序和数据被永久地存放在存储设备上,当计算机确实要使用它们时再移入内存,因为从内存读取比从存储设备读取要快得多。
存储设备主要有以下三种类型:
磁盘驱动器
光盘驱动器
USB闪存驱动器
驱动器(drive)时对存储介质(如磁盘和光盘)进行操作的设备。存储介质物理地存储数据和程序指令。驱动器从介质读写数据。
通用串行总线(Universal Serial Bus)接口允许用户将多种外部设备连接到计算机上。
USB闪存驱动器(flash drive)是用于存储和传输数据的设备。
1.1.5 输入输出设备
输入设备和输出设备让用户可以和计算机进行通信。
1.1.6 通信设备
计算机可以通过通信设备进行联网,如拨号调制解调器(modulator/demodulator)、数字用户先(Digital Subscriber Line)、电缆调制解调器、有线网络接口卡或者无线适配器。
1.2 编程语言
计算机程序(program)成为软件(software),是告诉计算机该做什么的指令。
1.2.1 机器语言
计算机的原生语言就是机器语言(machine language),即一套内嵌的基本指令集,以二进制代码的形式存在。
1.2.2 汇编语言
汇编语言(assembly language)使用短的描述行单词(称为助记符)来表示每一条机器语言指令。汇编语言通过汇编器(assembler)转换为计算机可以理解的机器代码。
1.2.3 高级语言
高级语言中的指令称为语句。用高级语言编写的程序称为源程序(source program)或源代码(source code)。源程序通过解释器或编译器,被翻译成可执行的机器代码。
解释器从源代码中读取一条语句,将其翻译为机器代码或者虚拟机器代码,然后立刻运行。来自源代码的一条语句可能被翻译为多条机器指令。
编译器将整个源代码翻译为机器代码文件,然后执行该机器代码文件。
1.3 操作系统
操作系统(Operating System)是运行在计算机上最重要的程序,它可以管理和控制计算机的活动。
操作系统的主要任务有:
控制和监视系统活动
分配和调配系统资源
调度操作
1.3.1 控制监视系统活动
除控制外部设备等基本的任务外,操作系统还要确保不同的程序和用户同时使用计算机时不会互相干扰;负责安全处理,以确保未经授权的用户和程序无权访问系统。
1.3.2 分配和调配系统资源
操作系统负责确定一个程序需要使用哪些计算机资源,并进行资源分配和调配以运行程序。
1.3.3 调度操作
操作系统负责调度程序的活动,以便有效地利用系统资源。
多道程序设计(multiprogramming)允许多个程序通过共享同一个CPU同时运行。
多线程(multithreading)允许单个程序同时执行多个任务。
多处理(multiprocessing)类似于多线程,区别在于多线程是在单个程序中并行运行多个线程,而多处理是采用多个处理器来并行运行多个程序。
1.5 Java语言规范、API、JDK、JRE和IDE
Java语言规范是对Java程序设计语言的语法和语义的技术定义。
应用程序接口(Application Program Interface)也称为库,包含了为开发Java程序而预定义的类和接口。
Java开发工具包(Java Development Toolkit)由一组独立程序构成,每个程序都是从命令行调用,用于编译、运行和测试Java程序。
运行Java程序的程序称为JRE(Java Runtime Environment)。
为快速开发Java程序而提供的集成开发环境(Integrated Development Environment)的软件。编辑、编译、构建、调试和在线帮助都集成在一个图形用户界面中。
1.6 创建、编译和执行Java程序
执行Java程序就是运行程序的字节码,可以在任何一个装有JVM的平台上运行字节码,JVM就是解释器。它一次只将字节码中的一个指令翻译为目标机器语言代码,而不是将整个程序作为一个单元。翻译完一步之后就立即执行这一步。
在运行一个Javawen程序时,JVM首先会用一个称为类加载器(class loader)的程序将类的字节码加载到内存中。如果你的程序中还使用了其他类,类加载程序会在需要它们之前动态地加载它们。当加载该类后,JVM使用一个称为字节码验证器(bytecode verifier)的程序来检验字节码的合法性,确保字节码没有违反Java的安全规范。
1.7 程序设计风格和文档
程序设计风格(programming style)决定程序的外观。
文档(documentation)是一个关于程序的解释性备注和注释的结构体。
1.7.1 正确的注释和注释风格
在程序的开头写一个总结,解释一下这个程序是做什么的、其主要特点以及所用到的特定技术。在较长的程序中还要加上注释,介绍每一个主要步骤并解释每个难以读懂之处。
除了行注释(以//开头)和块注释(以/开始)之外,Java还支持一种称为Java文档注释(Javadoc comment)的特殊注释形式(以/**开始,以/结尾)。它们能使用JDK的javadoc命令提取成一个HTML文件。
1.7.2 正确的缩进和空白
缩进(identation)用于展示程序中组成部分或语句之间的结构性关系。
在嵌套结构中,每个内层的组成部分或语句应该比外层缩进至少两格;二元操作符的两边应该各加一个空格。
1.7.3 块的风格
块是由花括号括起来的一组语句。块的写法有两种常用风格:次行(next-line)风格和行尾(end-of-line)风格。
1.8 程序设计错误
程序设计错误可以分为三类:语法错误、运行时错误和逻辑错误。
1.8.1 语法错误
在编译过程中由编译器检测出来的错误称为语法错误(syntax error)或编译错误(compile error)。
1.8.2 运行时错误
运行时错误(runtime error)是引起程序非正常终止的错误。运行应用程序时,当环境检测到一个不可能执行的操作时,就会出现运行时错误。
1.8.3 逻辑错误
当程序没有按预期的方式执行时就会发生逻辑错误(logic error)。