Java第一章
1 . 1 引 言
〆要点提示:本书的主旨是学习如何通过编写程序来解决问題。
本书是关于程序设计(又称编程)的。那么,什么是程序设计呢?程序设计就是创建(或者
开发)软件,软件也称为程序。简言之,软件包含了指令,告诉计算机(或者计算设备)做什么。
软件遍布我们的周围,甚至在一些你认为可能不需要软件的设备中。当然,你会希望在
个人计算机上找到和使用软件;但软件在运行中的飞机、汽车、手机甚至烤面包机中同样起
着作用。在个人计算机上,你会使用字处理程序编写文档,使用 Web 浏览器在互联网中冲
浪,使用电子邮件程序收发电子邮件。这些程序都是软件的实例。软件开发人员在称为程序
设计语言的强大工具的帮助下创建软件。
本书使用Java 程序设计语言来教授如何创建程序。程序设计语言有很多种,有些语言
已有几十年的历史。每种语言都是为了实现某个特定的目的而发明的,比如,构建在以前语
言的长处之上,或者为程序员提供一套全新和独特的工具。当知道有如此多可用的程序设计
语言后,你自然会困惑哪种程序设计语言是最好的。但是,事实上,没有 “最好” 的语言。
每种语言有它自己的长处和短处。有经验的程序员知道某种语言可能在某种场景下工作得很
好,但是在另外一个场景中可能另外一个语言会更加合适。因此,经验丰富的程序员将尽可
能掌握各种不同的程序设计语言,从而利用各种强大的软件开发工具。
如果你掌握了一种程序设计语言,应该会很容易学会其他程序设计语言。关键是学习如
何使用程序设计方法来解决问题,这是本书的主旨。
我们即将开始一段激动人心的旅程,学习如何进行程序设计。在开始之前,很有必要复
习一下计算机基础、程序和操作系统等内容。如果你已经很熟悉 CPU、内存、磁盘、操作
系统以及程序设计语言等术语,那么可以跳过 1.2 1.4 节中对这些内容的回顾。
2 第!幸
1 . 2 什么是计算机
〆要点提示:计算机是存储和处理数据的电子设备
计算机包括硬件( hardware ) 和软件( software) 两部分。一般来说,硬件包括计算机中
可以看得见的物理部分,而软件提供看不见的指令,这些指令控制硬件并且使得硬件完成特
定的任务。学习一种程序设计语言,并不一定要了解计算机硬件知识,但是如果你了解一些
硬件知识的话,它的确可以帮助你更好地理解程序中指令对于计算机及其组成部分的功效。
本节介绍计算机硬件组件及其功能。
一台计算机是由以下几个主要的硬件组件构成的(图 1-1 ):
中央处理器(CPU)
内存(主存)
存储设备(例如,磁盘和光盘)
输入设备(例如,鼠标和键盘)
输出设备(例如,显示器和打印机)
通信设备(例如,调制解调器和网卡)
总线
1 I #繼#丨 姑 1 丁
中央丨 处理器 1 丁
通信设备
~r
输人设备1 1#
出设彳
如磁盘、光盘 如调制解调器 如键盘和 如显示器
和磁带 和网卡 鼠标 和打印机
图 1-1 计算机由中央处理器、内存、存储设备、 输人设备、输出设备和通信设备组成
这些组件通过一个称为总线(bus ) 的子系统连接。你可以将总线想象成一个连接计算机
组件的道路系统,数据和电信号通过总线在计算机的各个部分之间传输。在个人计算机中,
总线搭建在主板上,主板是一个连接计算机各个部分的电路板。
1.2.1 中央处理器
中央处理器( Central Processing Unit, CPU) 是计算机的大脑。它从内存中获取指令,
然后执行这些指令。CPU 通常由两部分组成:控制单元(control unit) 和算术 / 逻辑单元
(arithmetic/logic unit)0 控制单元用于控制和协调其他组件的动作。算术 / 逻辑单元用于完成
数值运算(加法、减法、乘法、除法)和逻辑运算(比较)。
现在的 CPU 都是构建在一块小小的硅半导体芯片上,这块芯片上包含数百万称为晶体
管的小电路开关,用于处理信息。
每台计算机都有一个内部时钟,该时钟以固定速度发射电子脉冲。这些脉冲用于控制和
同步各种操作的步调。时钟速度越快,在给定时间段内执行的指令就越多。时钟速度的计量
单位是赫兹(hertz, Hz),丨赫兹相当于每秒 1 个脉冲。20 世纪 90 年代计算机的时钟速度
通常是以兆赫( MHz) 来表示的( 1MHz 就是 100 万 Hz)。随着 CPU 的速度不断提高,目
前计算机的时钟速度通常以千兆赫(GHz) 来表述。Intel 公司最新处理器的运行速度大约是
3GHz。
最初被开发出来的 CPU 只有一个核(core)。核是处理器中实现指令读取和执行的部分。
计算机、程序和Java 概述 3
为了提高 CPU的处理能力,芯片制造厂商现在生产包含多核的 CPU。一个多核 CPU 是一
个具有两个或者更多独立核的组件。现在的消费类计算机一般具有两个、三个甚至四个独立
的核。相信不久后,具有几十个甚至几百个核的 CPU将普及。
1.2.2 比特和字节
在讨论内存前,让我们看下信息(数据和程序)是如何存储在计算机中的。
计算机就是一系列的电路开关。每个开关存在两种状态:关(off) 和开(on)。简单而
言,在计算机中存储信息就是将一系列的开关设置为开或者关。如果电路是开的,它的值是
1。如果电路是关的,它的值是 0。这些 0 和 1 被解释为二进制数字系统中的数,并且将它
们 称 为 比 特(bit, 二进制数)。
计算机中字节(byte) 是最小的存储单元。每个字节由 8 个比特构成。像 3 这样的小
数字就可以存储在单个宇节中。为了存储单个字节放不下的大数字,计算机需要使用几个
字节。
各种类型的数据(例如,数字和字符)都被编码为字节序列。程序员不需要关心数据的
编码和解码,这些都是系统根据编码模式( schema) 来自动完成的。编码模式是一系列的规
则,控制计算机将字符、数字和符号翻译成计算机可以实际工作的数据。大多数模式将每个
字符翻译成预先确定的一个比特串。例如,在流行的 ASCII 编码模式中,字符 C 是用一个
字节 01000011 来表示的。
计算机的存储能力是以字节和多字节来衡量的,如下:
千 字 节(kilobyte, KB) 大约是 1000 字节。
兆 字 节(megabyte, MB) 大约是 100 万字节。
千 兆 字 节(gigabyte, GB) 大约是 10 亿字节。
万 亿 字 节(terabyte, TB)大约是 1 万亿字节。
一页 Word 文档可能有 20KB。因此,1MB 可以存储 50 页的文档,1GB 可以存储 50 000
页的文档。一部两小时的髙清电影可能有 8GB, 因此将需要 160GB 来存储 20 部电影。
1.2.3 内存
计算机的内存由一个有序的字节序列组成,用于存储程序及程序需要的数据。你可以将
内存想象成计算机执行程序的工作区域。一个程序和它
的数据在被 CPU 执行前必须移到计算机的内存中。
每个字节都有一个唯一的地址,如图丨
-2 所示。使
用这个地址确定字节的位置,以便于^^
储和获取数据。
因为可以按任意顺序存取字节,所以内存也被称为随机
访 问 存 播 器(Random-Access Memory, RAM)。
现在的个人计算机通常至少有 4GB 的 RAM,但是
它们一般装有 6 8GB 的内存。通常而言,一个计算
机具有的 RAM 越多,它的运行速度越快,但是这条简
单的经验法则是有限制的。
内存中字节的内容永远非空,但是它的原始内容可
能对于你的程序来说是毫无意义的。一旦新的信息被放
内存地址内存中的内容
宇符 “C” 的编码
宇符 “r” 的编码
字符 “e _’ 的编码
宇符 “ w” 的编码
数字 “3” 的编码
2001
2002
2003
01000011
01110010
01100101
01110111
00000011
图丨
-2 内存以唯一编码的内存位置来
存储数据和程序指令
4 第 1 幸
人内存,该字节的当前内容就会丢失。 同 CPU — 样,内存也是构建在一个表面上嵌有数百万晶体管的硅半导体芯片上。与
CPU 芯片相比,内存芯片更简单、更低速,也更便宜。
1.2.4 存储设备
计算机的内存( RAM)是一种易失的数据保存形式:断电时存储在内存中的信息就会丢
失。程序和数据被永久地存放在存储设备上,当计算机确实要使用它们时再移入内存,因为
从内存读取比从存储设备读取要快得多。
存储设备主要有以下三种类型:
磁盘驱动器
光盘驱动器(CD 和 DVD)
USB 闪存驱动器
驱动器(drive) 是对存储介质进行操作的设备,例如,磁盘和光盘。存储介质物理地存
储数据和程序指令。驱动器从介质读取数据并将数据写在介质上。 1.磁盘
每台计算机至少有一个硬盘驱动器。硬盘(harddisk) 用于永久地存储数据和程序。在
较新的个人计算机上,硬盘容量一般为 500GB 到 1TB。磁盘驱动器通常安装在计算机内。
此外,还有移动硬盘。 2.光盘和数字化视频磁盘
CD 的全称是致密的盘片(compact disc)。光盘驱动器的类型有两种:只读光盘(CD
-R)
和可读写光盘(CD
RW)。只读光盘上的信息只能用于读取,内容一旦记录到光盘上,用户
是不能修改它们的。可读写光盘可以像硬盘一样使用。也就是说,可以将数据写到光盘上,
然后用新的数据覆盖掉这些数据。单张光盘的容量可以达到 700MB。大多数新型的个人计
算机都安装了可读写光驱,它既支持只读光盘也支持可读写光盘。
DVD 的全称是数字化多功能碟片或者是数字化视频磁盘。DVD 和 CD 看起来很像,可
以使用任意一种来存储数据。一张 DVD 上可以保存的信息要比一张 CD 上可以保存的信息
多。一张标准 DVD 的存储容量是 4.7GB。如同 CD — 样,有两种类型的 DVD: DVD-R (K 读)和 DVD-RW (可重写)。 3.USB 闪存驱动器
通用串行总线(Universal Serial Bus, USB) 接口允许用户将多种外部设备连接到计算
机上。可以使用 USB 将打印机、数码相机、鼠标、外部硬盘驱动器,以及其他设备连接到
计算机上。
USB 闪存驱动器(flash drive)是用于存储和传输数据的设备。闪存驱动器很小— 大
约就是一包口香糖的大小。它就像移动硬盘一样,可以插入计算机上的 USB 端口。USB 闪
存驱动器目前可用的最大存储容量为 256GB。
1.2.5 输入和输出设备
输入设备和输出设备让用户可以和计算机进行通信。最常用的输人设备是键盘
(keyboard) 和氣标(mouse), 而最常用的输出设备是显示器(monitor) 和打印机(printer)。
计算机、程序和Java 概述 5 1.键盘
键盘是用于输人的设备。有一种便携式键盘,不带数字小键盘。
功能鍵( function key)位于键盘的最上边,而且都是以 F 为前缀。它们的功能取决于当
前所使用的软件。
修饰符键( modifier key) 是特殊键(例如,Shift、Alt 和 Ctrl), 当它和另一个键同时按
下时,会改变另一个键的常用功能。
数字小键盘(immeric keypad) 位于键盘的右下角,是一套独立的类似计算器风格的按
键集合,用于快速输入数字。
方向徤( arrow key) 位于主键盘和数字小键盘之间,在各种程序中用于上下左右地移动
光标。
插入键(Insert)、删除键( Delete)、向上翻页键( PageUp) 和向下翻页键(PageDown)
分别用于在字处理和其他程序中完成插人文本和对象、删除文本和对象以及向上和向下翻页
的功能。2.鼠标
鼠标( mouse) 是定点设备,用来在屏幕上移动一个称为光标的图形化的指针(通常以
一个箭头的形状),或者用于单击屏幕上的对象(如一个按钮)来触发它以执行动作。 3.显示器
显示器(monitor)显示信息(文本和图形)。屏幕分辨率和点距决定显示的质量。
屏幕分辨率( screen resolution)是指显示设备水平和垂直维度上的像素数。像索( “图
像元素” 的简称)就是构成屏幕上图像的小点。比如,对于一个 17 英寸的屏幕,分辨率一
般为宽 1024 像素、高 768 像素。分辨率可以手工设置。分辨率越高,图像越锐化、越清晰。 点 (dotpitch ) 是指像素之间以毫米为单位的距离。点距越小,显示效果越好。
1.2.6 通信设备
计算机可以通过通信设备进行联网,例如,拨号调制解调器( modulator/demodulator,
调制器 / 解调器 )、DSL、电缆调制解调器、有线网络接口卡,或者无线适配器。
拨号调制解调器使用的是电话线,传输数据的速度可以高达 56 000bps ( bps 表示每
秒比特)。
DSL ( Digital Subscriber Line, 數字用户线)使用的也是标准电话线,但是传输数据
的速度比标准拨号调制解调器快 20倍。
电纜调制解调器利用电缆公司维护的有线电视电缆进行数据传输,通常速度比 DSL快。
网络接口卡(NIC)是将计算机接入局域网(LAN)的设备。局域网通常用于大学、
商业组织和政府组织。一种称为 1000BaseT 的高速 NIC 能够以每秒 1000Mbps(Mbps
表示每秒百万比特)的速度传输数据。
无线网络现在在家庭、商业和学校中极其流行。现在,每台笔记本电脑都配有无线
适配器,计算机可以通过无线适配器连接到局域网和 Internet 上。
〆注意:复习題问題的答案在配套网站上。
复习题
1.1 什么是硬件和软件?
6 第1 幸
1.2 列举计算机的 5 个主要硬件组件。
1.3 缩写 “CPU” 代表什么含义?
1.4 衡童 CPU 速度的单位是什么?
1.5 什么是比特?什么是字节?
1.6 内存是用来做什么的? RAM 代表什么?为什么内存称为 RAM?
1.7 用于衡量内存大小的单位是什么?
1.8 用于衡量磁盘大小的单位是什么?
1.9 内存和永久存储设备的主要不同是什么?
1 . 3 编 程 语 言
t/ 要点提示:计算机程序(program) 称为软件(software), 是告诉计算机该做什么的栺令。
计算机不理解人类的语言,所以,计算机程序必须使用计算机可以使用的语言编写。现
在有数百种编程语言,对人们来说,开发它们使编程过程更容易。但是,所有的程序都必须
转换成计算机可以执行的指令。
1.3.1 机器语言
计算机的原生语言因计算机类型的不同而有差异,计算机的原生语言就是机器语言
( machine language), 即一套内嵌的原子指令集。因为这些指令都是以二进制代码的形式存
在,所以,为了以机器原生语言的形式给计算机指令,必须以二进制代码输人指令。例如,
为进行两数的相加,可能必须写成如下的二进制形式:
1101101010011010
1.3.2 汇编语言
用机器语言进行程序设计是非常单调乏味的过程,而且,所编的程序也非常难以读
懂和修改。为此,在计算的早期就创建了汇编语言,作为机器语言的替代品。汇编语言
(assembly language) 使用短的描述性单词(称为助记符)来表示每一条机器语言指令。例如,
助记符 add — 般表示数字相加,sub 表示数字相减。将数字 2 和数字 3 相加得到结果,可以
编写如下汇编代码:
add 2a B, result
汇编语言的出现降低了程序设计的难度。然而,由于计算机不理解汇编语言,所以_要
使用一种称为汇编器(assembler)的程序将汇编语言程序转换为机器代码,如图丨
-3 所示。
语言海文
add 2 , 3 , result
^
11011010100110X0 _ 1 TLSi’w |
图丨
-3 汇编器将汇编语言指令转换为机器代码
使用汇编语言编写代码比使用机器语言容易。然而,用汇编语言编写代码依然很不方
便。汇编语言中的一条指令对应机器代码中的一条指令。用汇编语言写代码需要知道 CPU
计算机、 程序和Java 概述 7
是如何工作的。汇编语言被认为是低级语言,因为汇编语言本质上非常接近机器语言,并且
是机器相关的。
1.3.3 高级语言
20 世纪 50 年代,新一代编程语言即众所周知的高级语言出现了。它们是平台独立的,
这意味着可以使用高级语言编程,然后在各种不同类型的机器上运行。高级语言很像英语,
易于学习和使用。高级语言中的指令称为语句。例如,下面是计算半径为 5 的圆面积的高级
语言语句:
area
- 5 * 5 * 3.14159;
有许多高级编程语言,每种都为特定目的而设计。表 1-1 列出了一些流行的高级编程
语言。 表 1-1 流行的高级编程语言
语言 描述
Ada
以 Ada Lovelace (她研究机械式的通用目的的计算机)命名,Ada 是为美国国防部幵发的,主要
用于国防项目
BASIC 初学者通用符号指令代码,是为了让初学者易学易用而设计的
C 由贝尔实验室开发,C 语言具有汇编语言的强大功能以及A级语言的易学性和可移植性
C++ 基于 C 语言开发,是一种面向对象程序设计语言
c# 读为 “ C Sharp”,由 Microsoft 公司开发的混合了 Java 和 CH»特征的语言
COBOL 面向商业的通用语言,是为商业应用而设计的
FORTRAN 公式翻译,广泛用于科学和数学应用
Java 由 Sun 公司(现在属于 Oracle)开发,广泛用于开发一些独立于平台的互联网应用程序
Pascal
以 Blaise Pascal ( Blaise Pasca丨是 17 世纪计算机器的先驱)命名,Pascal 是一个简单的、结构化的、
通用目的的语言,主要用于编程教学
Python 一种简单的通用目的的脚本语言,适合编写小程序
Visual Basic 由 Microsoft 公司开发,方便编程人员快速开发图形用户界面
用高级语言编写的程序称为源程序( source program) 或源代码( source code)。由于计
算机不能运行源程序,源程序必须被翻译成可执行的机器代码。翻译可以由另外一种称为解
释器或者编译器的编程T.具来完成。
解释器从源代码中读取一条语句,将其翻译为机器代码或者虚拟机器代码,然后立
刻运行,如图 l-4a 所示。请注意来自源代码的一条语句可能被翻译为多条机器指令。
编译器将整个源代码翻译为机器代码文件,然后执行该机器代码文件,如图丨>4b
所示。 —|解释器 h— a ) 解释器一次翮译并且执行程序的一条语句
图 14
输出
’
透一
语言源文件
area - 5 * 5 * 3.1415;
8 第 I 幸
级语言思文
— H 编译器 1~-
机器代码文
— H 执行器 h—
输出
area - 5 * 5 * 3.1415;
0101100011011100
1111100011000100
^ … b) 编译器将整个源程序翻译为机器语言文件以运行
图 14 (续)
复习题
1.10 CPU 能理解什么语言?
1.11 什么是汇编语言?
1.12 什么是汇编器?
1.13 什么是高级编程语言?
1.14 什么是源程序?
1.15 什么是解释器?
1.16 什么是编译器?
1.17 解释语言和编译语言之间的区别是什么?
1 . 4 操 作 系 统
要点提示:操作系统(Operating System, OS)是运行在计算机上的最重要的程序,它可
以管理和控制计算机的活动。
流行的操作系统有 Microsoft Windows、Mac OS以及 Linux。
如果没有在计算机上安装和运行操作系统,像 Web 浏览器或者
字处理程序这样的应用程序就不能运行。硬件、操作系统、应
用软件和用户之间的关系如图 1-5 所示。
操作系统的主要任务有:
控制和监视系统的活动
用户 H 1
应用程序
操作系统 h1 T
硬件
分配和调配系统资源 图丨
-5 用户和应用程序通过
调度操作 搡作系统访问计算机
1.4.1 控制和监视系统的活动 的硬件
操作系统执行基本的任务,例如,识别来自键盘的输入,向显示器发送输出结果,跟踪
存储设备中的文件和文件夹的动态,控制类似硬盘驱动器和打印机这样的外部设备。操作系
统还要确保不同的程序和用户同时使用计算机时不会相互干扰。另外,操作系统还负责安全
处理,以确保未经授权的用户和程序无权访问系统。
1.4.2 分配和调配系统资源
操作系统负责确定一个程序需要使用哪些计算机资源(例如,CPU、内存、磁盘、输人
和输出设备),并进行资源分配和调配以运行程序。
1.4.3 调度操作
操作系统负责调度程序的活动,以便有效地利用系统资源。为了提高系统的性能,目前
计算机、 程序和Java 概述 9
许多操作系统都支持像多道程序设计( multiprogramming)、多线程( multithreading) 和多处
理(multiprocessing)这样的技术。
多道程序设计允许多个程序通过共享 CPU 同时运行。CPU 的速度比其他组件快得多,
这样,多数时间它都处于空闲状态,例如,在等待数据从磁盘或其他资源传人,或者其他系
统资源响应时。多道程序设计操作系统利用这一特点,允许多个程序同时使用CPU,— 旦
CPU 空闲就让别的程序使用它。例如,在 Web 浏览器下载文件的同时,可以用字处理程序
来编辑文件。
多线程允许单个程序同时执行多个任务。例如,字处理程序允许用户在编辑文本的同
时,将其保存到文件。在这个例子中,编辑和保存是同一个应用程序的两个不同任务,这两
个任务可能并发运行。
多处理也称为并行处理(parallel processing), 是指使用两个或多个处理器共同并行执行
子任务,然后将子任务的结果合并以得到整个任务的结果。它就像在外科手术中多名医生同
时给一个病人做手术一样。
复习题
1.18 什么是操作系统?列出一些流行的操作系统。
1.19 操作系统的主要任务是什么?
1.20 什么是多道程序设计、多线程以及多处理?
1.5 Java、万维网以及其他
〆要点提示:Java 是一种功能强大和多用途的编程语言,可用于开发运行在移动设备、台式
计算机以及服务器端的软件。
本书介绍 Java 程序设计。Java 是由 James Gosling 在 Sun公司领导的小组开发的。(2010
年 Sun 公司被 Oracle 收购。)Java 最初被称为 Oak (橡树),是 1991 年为消费类电子产品的
嵌入式芯片而设计的。1995 年更名为 Java, 并重新设计用于开发 Web应用程序。关于 Java
的历史,参见 www.java.com/en/javahistory/index.jspo
Java 已极其流行。Java 的快速发展以及被广泛接受都应归功于它的设计特性,特别是它
的承诺:一次编写,任何地方都可以运行。就像它的设计者声称的,Java 是简单的(simple)、
面向对象的(object oriented )、分布式的(distributed )、解释型的(interpreted )、健壮的
(robust)、安全的(secure)、体系结构中立的(architectureneutral)、可移植的(portable)、高
性能的(high performance)、多线程的( multithreaded ) 和动态的(dynamic)。关于 Java 特
性的剖析,参见 www.cs.armstrong.edu/liang/ JavaCharacteristics.pdf。
Java 是功能完善的通用程序设计语言,可以用来开发健壮的任务关键的应用程序。现 在,它不仅用于 Web 程序设计,而且用于在服务器、台式计算机和移动设备上开发跨平台
的独立应用程序。用它开发过与火星探测器通信并控制其在火星上行走的代码。许多曾经认
为 Java 言过其实的公司现在使用Java 开发分布式应用程序,便于客户和合作伙伴在 Internet
上访问。现在,一旦开发新的项目,公司都会考虑如何利用Java 使工作变得更加容易。
万维网( World Wide Web, WWW)是从世界上任何地方的 Internet 都可以访问的电子
信息宝库。Internet 作为万维网的基础架构已经问世四十多年。丰富多彩的万维网和设计精
良的 Web 浏览器是 Internet 流行的主要原因。
Java 一开始富有吸引力是因为 Java 程序可以在 Web 浏览器中运行。这种能在 Web浏览
1 0 第 1 章
器中运行的 Java 程序称为 Java 小程序( applet)。applet 使用现代的图形用户界面与 Web 用
户进行交互,处理用户的要求,界面中包括按钮、文本字段、文本域、单选按钮等。applet
使得 Web 更加具有响应性、交互性和趣味性。applet内嵌在 HTML 文件中。HTML( Hypertext
Markup Language)是一种简单的脚本语言,用于对文档布局,链接因特网上的文档,并且
能够在万维网上提供生动的图像、声音和视频。现在,你可以使用Java 开发富因特网应用
( RIA)0 富因特网应用作为一种 Web 应用,被设计为可以提供通常桌面应用才具有的特性和
功能。
现在,Java 广泛用于开发服务器端的应用程序。这些应用程序处理数据、执行计算,并
生成动态网页。许多商用网站后端都是采用 Java 进行开发的。
Java 是一个功能强大的程序设计语言,可以用它来开发台式计算机、 服务器以及小的手
持设备上的应用程序。用于安卓手机的软件也是采用Java 进行开发的。
复习题
1.21 Java 是由谁发明的?哪个公司现在拥有 Java ?
1.22 什么是 Java applet ?
1.23 安卓使用的是什么编程语言?
1.6 Java 语言规范、API、JDK 和丨DE
〆要点提示:Java 语言规范定义了 Java 的语法,Java 库则在 Java AP丨中定义。JDK 是用于
开发和运行 Java 程序的软件。IDE 是快速开发程序的集成开发环境。
计算机语言有严格的使用规范。如果编写程序时没有遵循这些规范,计算机就不能理解
程序。Java 语言规范和 Java API定义 Java 的标准。
Java 语言规范(Java language specification) 是对语言的技术定义,包括 Java 程序设计语
言的语法和语义。完整的 Java 语言规范可以在 http://docs.oracle.com/javase/specs/ 上找到。
应用程序接o ( Application Program Interface, API)也称为库,包括为开发 Java 程序
而预定义的类和接口。API仍然在扩展,在网站 http://download.java.net/jdk8/docs/api/ 上,
可以査看和下载最新版的 Java API。
Java 是一个全面且功能强大的语言,可用于多种用途。Java 有三个版本:
Java 标准版(Java Standard Edition, Java SE) 可以用来开发客户端的应用程序。应
用程序可以独立运行或作为 applet 在 Web浏览器中运行。
Java 企业版( Java Enterprise Edition, Java EE) 可以用来开发服务器端的应用程序,
例如,Java servlet 和 JavaServer Pages (JSP),以及 JavaServer Faces (JSF )。
Java 微型版(Java Micro Edition, Java ME)用来开发移动设备的应用程序,例如手机。
本书使用Java SE 介绍 Java 程序设计。Java SE 是基础,其他 Java 技术都基于 Java SE。
Java SE 也有很多版本,本书采用最新的版本 Java SE 8。Oracle 发布 Java 的各个版本都带有
Java 开发工具包(Java Development Toolkit,JDK)。Java SE 8 对应的 Java 开发工具包称为
JDK 1.8 (也称为 Java 8 或者 JDK 8
JDK 是由一套独立程序构成的集合,每个程序都是从命令行调用的,用于开发和
测试 Java 程序。除了JDK, 还可以使用某种 Java 开发工具(例如,NetBeans、Eclipse
和 TextPad) 为了快速开发 Java 程序而提供集成开发环境(Integrated Development
Environment, IDE)的软件。编辑、编译、链接、调试和在线帮助都集成在一个图形用户界
计算机、 程序和Java 概述 11
面中,这样,只需在一个窗口中输入源代码或在窗口中打开已有的文件,然后单击按钮、菜
单选项或者使用功能键就可以编译和运行源代码。
复习题
1.24 什么是 Java 语言规范?
1.25 JDK 代表什么?
1.26 IDE 代表什么?
1.27 类似 NetBeans 和 Eclipse 的工具是和 Java 不同的语言吗?或者它们是 Java 的方言或者扩充?
1.7 — 个简单的 Java 程序
要点提示:Java 是从类中的 main 方法开始执行的。
我们从一个简单的 Java 程序开始,该程序在控制台上显示消息 “ Welcome to hval ”。控
制台(console) 是一个老的计算机词汇,指计算机的文本输入和显示设备。控制台榆入是指从
键盘上接收输人,而控制台输出是指在显示器上显示输出。该程序如程序清单丨
-1 所示。
程序清单
1 public class Welcome { 2 public static void main(String[] args) { 3 // Display message Welcome to ]ava ! on the console
4 System.out.println(“Weicome to 3ava!”); 5 } 6 }
Welcome to Java!
请注意,显示行号( line number) 是为了引用方便,它们并不是程序的一部分。所以,
不要在程序中敲入行号。 第 1 行定义了一个类。每个 Java 程序至少应该有一个类。每个类都有一个名宇。按照
惯例,类名都是以大写字母开头的。本例中,类名(class name) 为 Welcome。 第 2 行定义主方法( main method)。程序是从 main 方法开始执行的。一个类可以包含
几个方法。main 方法是程序开始执行的人口。
方法是包含语句的结构体。本程序中的 main 方法包括了 System.out.println 语句。该
语句在控制台上打印消息 “ Welcome to 3ava!"(第 4 行)。字符串(string) 是一个编程术语,
表示一个字符序列。一个字符串必须放人双引号中。Java 中的每条语句都以分号( ;)结束,
也称为语句结束符(statement terminator)。
保留字(reserved word) 或关键字(keyword) 对编译器而言都是有特定含义的,所以不
能在程序中用于其他目的。例如,当编译器看到字 class 时,它知道 class 后面的字就是这
个类的名字。这个程序中的其他保留字还有 Public、static 和 void。 第 3 行是注释(comment), 它标注该程序是干什么的,以及它是如何构建的。注释帮助
程序员进行相互沟通以及理解程序。注释不是程序设计语句,所以编译器编译程序时是忽略
注释的。在 Java 中,在单行上用两个斜杠(// )引导注释,称为行注释(line comment );在
一 行 或 多 行 用 和 V 括住注释,称为块注释(丨b ock comment)。当编译器看到 / / 时,就会
忽略本行 // 之后的所有文本。当看到 / * 时,它会搜索接下来的 V,并忽略掉 / 与 V 之间
的文本。下面是这两种注释的例子:
12 J K i t
// This application program displays Welcome to Java! /* This application program displays Welcome to Java! V /* This application program
displays Welcome to Java! V
程序中的一对花括号将程序的一些组成部分组合起来,形成一个块( block)。在 Java
中,每个块以左花括号( 0 开始,以右花括号(})结束。每个类都有一个将该类的数据和
方法放在一起的类块( class block)。每个方法都有一个将该方法中的语句放在一起的方法块
(method block)0 块是可以嵌套的,即一个块可以放到另一个块内,如下面代码所示。
public class Wei come { ◄ 1
public static void main(String[] args) { ◄ 类块
System.out.println("Weicome to Java!’.); 方宇块
〆提示:一个左括号必须匹配一个右括号。任何时候,当输入一个左括号时,应该立即榆入
一个右括号来防止出现遣漏括号的错误。大多数 Java IDE 都会自动地为每个左括号插入
一个右括号。
〆瞥告:Java 淥程序是区分大小写的。如果在程序中将 main 替换成 Main, 就会出错。
在这个程序中你可以注意到有些特殊的字符(比如,{}、//,« ), 它们几乎在每个程序
中都会使用。表 1-2 总结了它们的用途。表 1-2 特殊字符
字符 名称 描述
{} 左花括号和右花括号 表示一个包含语句的块
0 左圆括号和右圆括号 和方法一起使用
n 左方括号和右方括号 表示一个败组
// 双斜杠 表示后面是一行注释
左引用符号和右引用符号 包含一个字符串(即一系列的字符) ; 标识一个语句的结束
学习编程时最容易犯的错是语法错误。像其他任何一种程序设计语言一样,Java 也有自
己的语法,而且你必须按照语法规則编写代码。如果你的程序违反了语法规则,例如,忘记
了分号、忘记了花括号、忘记了引号,或者拼错了单词,Java 编译器会报告语法错误。可以
尝试编译带有这些错误的程序,看看编译器会报告些什么。
〆注意:你可能想知道为什么 main 方法要以这样的方式定义,为什么使用 System.out.
pr1ntln(…)在控制台上显示信息。在现阶段,你只需知道它们就是这么做的就可以。这
一问题将在后续的幸节中得到完整的解答。
程序清单丨
-1 中的程序会显示一条信息。一且你理解了这个程序,很容易将该程序扩展
为显示更多的信息。例如,可以改写该程序来显示三条信息,如程序清单 1-2 所示。
程序清单 WelcomeWithThreeMessages.java
1 public class WelcomeWithThreeMessages { 2 public static void main(String[] args) { 3 System.out.println(“Programning is fun!”); 4 System.out.println(“Fundamentals First”); 5 System.out.println(“Problem Driven”); 6
计算机、 程序和java 概述 13
Programming is fun!
Fundamentals First
Problem Driven
更进一步,你可以进行数学计算,并将结果显示到控制台上。程序清单 1-3 给出一个计
當 10.5+2x 3
45
3.5
的例子。
程序清单 1-3 ComputeExpression.java
1 public class ComputeExpression { 2 public static void main(String[] args){ 3 System.out.printlnCClO.5 + 2 * 3) / (45
3.5)); |0.397S9036144578314 |~~
Java 中的乘法操作符是 。如你所看到的,将一个数学表达式翻译成 Java 表达式是一
个非常直观的过程,我们将在第 2 章进一步讨论 Java 表达式。
复习题
1.28 什么是关键字?列举一些 Java 关键字。
1.29 Java 是大小写敏感的吗? Java 关键字是大写还是小写?
1.30 什么是注释?编译器会忽略注释吗?如何标识一行注释以及一段注释?
1.31 在控制台上显示一个字符串的语句是什么?
1.32 给出以下代码的输出:
public class Test {
public static void main(String[] args){
System.out.println("3.5 * 4 / 2 - 2.5 is ");
System.out.println(3.5 * 4 / 2 -
2.5);
1 . 8 创建、编译和执行 Java 程序
〆要点提示:Java 源程序保存为 .java 文件,编译为 .class 文件。.class 文件由 Java 虚拟机
(JVM)执行0
在执行程序之前,必须创建程序并进行编译。这个过程是反复执行的,如图 1-6 所示。
如果程序有编译错误,必须修改程序来纠正错误,然后重新编译它。如果程序有运行时错误
或者不能产生正确的结果,必须修改这个程序,重新编译,然后重新执行。
可以使用任何一个文本编辑器或者集成开发环境来创建和编辑 Java 源代码文件。本节
演示如何从命令窗口创建、编译和运行 Java 程序。1.10 节和 1.11 节将介绍使用 NetBeans 和
Eclipse 来开发 Java 程序。从命令窗口,可以使用文本编辑器比如记事本( NotePad) 来创建
Java 源代码文件,如图 1-7 所示。
〆注意:浠文件的扩展名必须是 .java, 而且文件名必须与公共类名完全相同。例如,程序
清单 1-1 中源代码的文件必须命名为 Welcomejava, 因为公共类的类名就是 Welcome。
Java 编译器将 Java 源文件翻译成 Java 字节码文件。下面的命令就是用来编译 Welcome,
java 的:
14 第 1 幸
源代码(由程序员开发)
public class Welcome {
public static void main(String[] args) {
System.out.pHntln(wWelcome to 3ava!w );
字节码(由编译器产生,不是让你来理解的,
是让 Java 虚拟机读取和解释的)
Method WelcomeC) 0 aload.O
Method void main(java.1ang.StHng[]) 0 getstatic #2 3 ldc #3 <String "Welcome to Java!% 5 invokevirtual #4 - 8 return
[Wei
在控制台上打印出 “ Welcome to Java ” » Java!
创建 / 修改源代码
存盘
源代码
[ 缠译攤代码,例如,
javac Welcome.java
存盘
如果出现编译错误
字节码
运行宇节码,例如,
java Welcome
〈 结 果 )
如果出现运行错误或不正碥的结果
图 1»6 Java 程序开发过程就是重复地创建 / 修改源代码、编译和执行程序
B
Fflnmt 你 »
public class welcome { ^1
public static void nain(String[] args) {
71
1
Systea.out.printlnCwelcome to Javal"); } _ M
图丨
-7 可以使用 Windows 记事本创建 Java 源程序文件
javac Weicome.java
(/ 注意:在编译和运行程序前必须先安装和配置 JDK。补充材料 I.B 介绍如何安装 JDK 8
以及如何设置 Java 程序的编译和运行环境。如果你在编译和运行 Java 程序的过程中遇
到问題,请参考补充材料 I.C, 这个补充材料还解释了如何使用基本的 DOS 命令,以
及如何使用 Windows 记事本来创建和编辑文件。所有补充材料都在本书配套网站 www.
cs.armstrong.edu/liang/intro1Oe/supplement.html 上。
如果没有语法错误,编译器(compiler) 就会生成一个扩展名为 .class 的宇节码文件。
所以,前面的命令会生成一个名为 Welcome.class 的文件,如图 l-8a 所示。Java 语言是高
级语言,而 Java 字节码是低级语言。字节码类似于机器指令,但它是体系结构中立的,是
可以在任何带 Java 虚拟机( JVM)的平台上运行的,如图 l-8b 所示。虚拟机不是物理机器,
而是一个解释 Java 字节码的程序。这正是 Java 的主要优点之一:Java 字节码可以在不同的
硬件平台和操作系统上运行。Java 源代码编译成 Java 字节码,然后 Java 字节码被 JVM 解
释执行。你的 Java 代码可能要用到 Java 库中的代码。JVM 将执行你的程序代码以及库中的
代码。
计算机、程序和Java 概述 15
送去编译
a)
执行 Java 程序就是运行程序的字节码,可以在任何一个装有 JVM 的平台上运行字节
码,解释 Java 字节码。解释的过程就是一次将字节码中单独的一步翻译为目标机器语言代
码,而不是将整个程序翻译成单独的一块。翻译完一步之后就立即执行这一步。
下述命令用来运行程序清单 M 中的字节码:
java Welcome
图 1-9 显示了用于编译 Welcome.java 的命令 javac。编译器生成 Welcome.class 文件,
使用命令 java 执行这个文件。 (/ 注意:为了简单性和一致性,除非特别指明,否則所有的源代码和类文件都放在 c:\book 下。
编译
显示文件
运行
图丨-9 程序清单 1-丨的输出显示消息 “ Welcome to Java!”
〆菁告:在命令行执行程序时,不要使用扩展名 .class。使用 java ClassName 来运行程序。
如果在命令行使用 java ClassName.class, 系统就会尝试读取 ClassName.class.class。
〆提示:如果要运行一个不存在的类,就会出现 NoClassDefFoundError 的错误。如果执行
的类文件中没有 main 方法或敲错了 main 方法(例如,将 main #敲成 Main), 則会出现提
示 NoSuchMethodError。 t/ 注意:在执行一个 Java 程序时,JVM 首先会用一个称为类加载器(class loader) 的程序将
类的字节码加栽到内存中。如果你的程序中使用其他类,类加栽程序会在需要它们之前动
态地加栽它们。当加栽该类后,JVM 使用一个称为字节码验证器( bytecode verifier) 的程
序来检验字节码的合法性,确保字节码不会违反 Java 的安全规范。Java S制执行严格的
安全规范,以确保来自网络的 Java 程序不会篡改和危害你的计算机。 B:Sbook>J«v«c ItolcoM.java | I e:\book>dir lie leone.« I
Uoluiw in drive C has no label.
Uolirne Serial Nunber is 2EF7-CA93
Directory
找溫i 君:SS 424 UelcoM.clas囂
176 Welcone.Java
2 Fil«<«> 6B0 by
Dir 70,200,397,824 淡:: :\book>J«u« Ifelc
eleone to
:Sbook^
Welcome.java
(Java 源代码
文件)
Java
编译器
产生 lcome.class
(Java 字节码
可执行文件〉
送去执行
库代码
JVM
Java 字节码
Java 虚拟机
广任意一台
V it 算机
、/ /a 源代码被翻译为字节码 b) Java 字节码可以在任意一个装有
Java 虚拟机的计算机上执行
图 1-8
16 弟 / 章
〆教学提示:教师可能需要学生使用包来组织程序。例如,你可能将本幸的所有程序都放在
,
一个名为 chapter丨的包里。要得到如何使用包的指南,请参考教材补充材料 I.F。
厂复习题
1.33 什么是 Java 源程序的文件后缀名,什么是 hva 宇节码文件后缀?
1.34 Java 编译器的输人和输出是什么?
1.35 编译 Java 程序的命令是什么?
1.36 运行 Java 程序的命令是什么?
1.37 什么是 JVM ?
1.38 Java 可以运行在任何机器上吗?在一台计算机上运行 Java需要什么?
1.39 如果运行程序的时候出现 NoClassDefFoundError 错误,是什么原因导致了这个错误?
1.40 如果运行程序的时候出现 NoSuchMethodError 错误,是什么原因导致了这个错误?
1 . 9 程序设计风格和文档
(/ 要点提示:良好的程序设计风格和正确的文档使程序更易阅读,并且能帮助程序员避免
触。
程序设计风格( programming style)决定程序的外观。如果把整个程序写在一行,它也
会被正确地编译和运行,但是这是非常不好的程序设计风格,因为程序的可读性很差。文档
( documentation)是关于程序的解释性评注和注释的一个结构体。程序设计风格与文档和编
写代码的作用一样重要。良好的程序设计风格和适当的文档可以减少出错的机率,并且提髙
程序的可读性。本节给出几条指导原则。关于 Java 程序设计风格和文档更详细的指南,可
以在本书配套网站上的补充材料 I.D中找到。
1.9.1 正确的注释和注释风格
在程序的开头写一个总结,解释一下这个程序是做什么的、其主要特点以及所用到的独
特技术。在较长的程序中还要加上注释,介绍每一个主要步骤并解释每个难以读懂之处。注
释写得简明扼要是很重要的,不能让整个程序都充满注释而使程序很难读懂。
除了行注释(以 // 开始)和块注释(以 /* 开始)之外,Java 还支持一种称为 Java 文档
注释(javadoc comment)的特殊注释形式。javadoc 注释以 / * * 开始,以 V结尾。它们能使
用JDK 的 javadoc 命令提取成一个 HTML文件。要获得更多信息,参见配套网站的补充材
料 III.Yo
使用javadoc 注释( /**…/)来注释整个类或整个方法。为了将这些注释提取出来放
在一个javadoc HTML 文件中,这些注释必须放在类或者方法头的前面。要注释方法中的某
一步骤,使用行注释(//)。
可以从 www.cs.armstrong.edu/liang/javadoc/Exercisel.html 看到一个javadoc HTML 文件
的示例。相应的 Java 代码在 www.cs.armstrong.edu/liang/javadoc/Exercisel.java 中。
1.9.2 正确的缩进和空白
保持一致的缩进风格会使程序更加清晰、易读、易于调试和维护。缩进(identation )用
于描述程序中组成部分或语句之间的结构性关系。即使将程序的所有语句都写在一行中,
Java 也可以读懂这样的程序,但是正确的对齐能够使人们更易读懂和维护代码。在嵌套结构
计算机、程序和 java 概述 17
中,每个内层的组成部分或语句应该比外层缩进两格。
二元操作符的两边应该各加一个空格,如下面语句所示:
System.out.println(3+44); 不好的风格
System,out.println(3 + 4 * 4); 良好的风格
1.9.3 块的风格
块是由花括号围起来的一组语句。块的写法有两种常用方式:次行(next
eleone to
:Sbook^
Welcome.java
(Java 源代码
文件)
Java
编译器
产生 lcome.class
(Java 字节码
可执行文件〉
送去执行
库代码
JVM
Java 字节码
Java 虚拟机
广任意一台
V it 算机
、/ /a 源代码被翻译为字节码 b) Java 字节码可以在任意一个装有
Java 虚拟机的计算机上执行
图 1-8
16 弟 / 章
〆教学提示:教师可能需要学生使用包来组织程序。例如,你可能将本幸的所有程序都放在
,
一个名为 chapter丨的包里。要得到如何使用包的指南,请参考教材补充材料 I.F。
厂复习题
1.33 什么是 Java 源程序的文件后缀名,什么是 hva 宇节码文件后缀?
1.34 Java 编译器的输人和输出是什么?
1.35 编译 Java 程序的命令是什么?
1.36 运行 Java 程序的命令是什么?
1.37 什么是 JVM ?
1.38 Java 可以运行在任何机器上吗?在一台计算机上运行 Java需要什么?
1.39 如果运行程序的时候出现 NoClassDefFoundError 错误,是什么原因导致了这个错误?
1.40 如果运行程序的时候出现 NoSuchMethodError 错误,是什么原因导致了这个错误?
1 . 9 程序设计风格和文档
(/ 要点提示:良好的程序设计风格和正确的文档使程序更易阅读,并且能帮助程序员避免
触。
程序设计风格( programming style)决定程序的外观。如果把整个程序写在一行,它也
会被正确地编译和运行,但是这是非常不好的程序设计风格,因为程序的可读性很差。文档
( documentation)是关于程序的解释性评注和注释的一个结构体。程序设计风格与文档和编
写代码的作用一样重要。良好的程序设计风格和适当的文档可以减少出错的机率,并且提髙
程序的可读性。本节给出几条指导原则。关于 Java 程序设计风格和文档更详细的指南,可
以在本书配套网站上的补充材料 I.D中找到。
1.9.1 正确的注释和注释风格
在程序的开头写一个总结,解释一下这个程序是做什么的、其主要特点以及所用到的独
特技术。在较长的程序中还要加上注释,介绍每一个主要步骤并解释每个难以读懂之处。注
释写得简明扼要是很重要的,不能让整个程序都充满注释而使程序很难读懂。
除了行注释(以 // 开始)和块注释(以 /* 开始)之外,Java 还支持一种称为 Java 文档
注释(javadoc comment)的特殊注释形式。javadoc 注释以 / * * 开始,以 V结尾。它们能使
用JDK 的 javadoc 命令提取成一个 HTML文件。要获得更多信息,参见配套网站的补充材
料 III.Yo
使用javadoc 注释( /**…/)来注释整个类或整个方法。为了将这些注释提取出来放
在一个javadoc HTML 文件中,这些注释必须放在类或者方法头的前面。要注释方法中的某
一步骤,使用行注释(//)。
可以从 www.cs.armstrong.edu/liang/javadoc/Exercisel.html 看到一个javadoc HTML 文件
的示例。相应的 Java 代码在 www.cs.armstrong.edu/liang/javadoc/Exercisel.java 中。
1.9.2 正确的缩进和空白
保持一致的缩进风格会使程序更加清晰、易读、易于调试和维护。缩进(identation )用
于描述程序中组成部分或语句之间的结构性关系。即使将程序的所有语句都写在一行中,
Java 也可以读懂这样的程序,但是正确的对齐能够使人们更易读懂和维护代码。在嵌套结构
计算机、程序和 java 概述 17
中,每个内层的组成部分或语句应该比外层缩进两格。
二元操作符的两边应该各加一个空格,如下面语句所示:
System.out.println(3+44); 不好的风格
System,out.println(3 + 4 * 4); 良好的风格
1.9.3 块的风格
块是由花括号围起来的一组语句。块的写法有两种常用方式:次行(next
line) 风格和
行尾(end
of
line) 风格,如下所示。
public class Test public class Test { { public static void main(String[] args) {
public static void main(String[] args) System,out.pri ntl n("Bl ock Styl es’* ); \ l
System.out.println(“Block Styles”); } } / }
次行风格 行尾风格
次行风格将括号垂直对齐,因而使程序容易阅读,而行尾风格更节省空间,并有助于避
免犯一些细小的程序设计错误。这两种风格都是可以采纳的。选择哪一种完全依赖于个人
或组织的偏好。应该统一采用一种风格,建议不要将这两种风格混合使用。本书与 Java API
源代码保持一致,都采用行尾风格。
复习题
1.41 使用行尾括号风格,将下面的程序根据程序设计风格和文档指南进行重新格式化。
public class Test
{ // Main method
public static void main(String[] args) { /** Display output V
System.out.println(“Weicome to Java”);
1 . 1 0 程序设计错误
要点提示:程序设计错误可以分为三类:语法媒误、运行时样误和逻辑错误。
1.10.1 语法错误
在编译过程中出现的错误称为语法错误( syntax error) 或编译媒误(compile error)。语
法错误是由创建代码时的错误引起的,例如:拼错关键字,忽略了一些必要的标点符号,或
者左花括号没有对应的右花括号。这些错误通常很容易检测到,因为编译器会告诉你这些错
误在哪儿,以及是什么原因造成的。例如:编译下面程序清单中的程序会出现语法错误,
如图 1-
10 所示。
程序清单 ShowSyntaxErrors.java
1 public class ShowSyntaxErrors { 2 public static main(String[] args) { 3 System.out.println("Weicome to Java); 4 > 5 >
18 第 / 聿 😗
xErroi
Sbo«#8yntaxErrors.Java
r«.J«wa:2:error:inv^ !:error:invalid
:rintll 魏>9雪 > < d«cl
ration; :\book>,
howSynt ^
public static Min<Str
:ho«iSyntaxErrprs.Jav*:3:馨CMI*: unclosed 雪 triitg literal
SysteH.out.printlnt^
lfeIcon*
to J«v«>; :howSyntaxErrors.Jv«:3: •rror: * : * expected
Systen.out.println< "V0 lcoM to Jw*>;
mtmir«d *
图丨
10 编译器报告语法错误
四个错误被报告,但实际上程序有两个错误: 第 2 行 main 方法前遗漏关键字 void。 _ 第 3 行的字符串 Welcome to Java 应该加上引号。
由于一个错误常常会显示很多行的编译错误,因此,从最上面的行开始向下纠正错误是
一个很好的习惯。解决程序前面出现的错误,可能就改正了程序后面出现的其他错误。
提示:如果你不知道如何纠正错误,将你的程序一个字符一个字符地仔细对照教材中的类
似示例。在课程的前面几周,你可能要花许多时间纠正语法错误,但是很快你将熟悉 Java
语法,并快速纠正语法错误。
1.10.2 运行时错误
运行时错误( runtime error) 是引起程序非正常中断的错误。运行应用程序时,当环境
检测到一个不可能执行的操作时,就会出现运行时错误。输入错误是典型的运行时错误。当
程序等待用户输入一个值,而用户输人了一个程序不能处理的值时,就会发生输入错误。例 如:如果程序希望读入的是一个数值,而用户输人的却是一个字符串,就会导致程序出现数
据类型错误。
另一个常见的运行时错误是 0 作除数<= 当整数除法中除数为 0时可能引发这种情况。例 如:下面程序清单 1-5 中的程序将会导致运行时错误,如图 Nil 所示。
程序清单
1 public class ShowRuntimeErrors { 2 public static void main(String[] args) { 3 System.out.println(l / 0);
运行 jaua ShowRunt1MERRORS
n in thread 'Win" java.lana.AritlmeticExcaption: /
at ShowRunt1MERRORS.Min<ShoMRunt ineErrors.
图丨
丨丨运行时错误导致程序非正常中断
1.10.3 逻辑错误
当程序没有按预期的方式执行时就会发生逻辑错误( logic error ):这种错误发生的原因
计算机、 程序和Java 概述 19
有很多种。例如,假设你编写如程序清单 1-6 中的程序,将摄氏 35 度转换为华氏度
程序清单 ShowLogicErrors.java
1 public class ShowLogicErrors { 2 public static void main(String[] args) { 3 System•out.println("Celsius 35 is Fahrenheit degree ”); 4 System.out.println((9 / 5) * 35 + 32); 5 }
Celsius 35 is Fahrenheit degree
你将得到结果华氏 67 度,而这是错误的,结果应该是 95.0。Java 中,整数相除是返回
除法的整数部分,即小数部分被截掉,因此 Java 中 9/5 的结果是丨。要得到正确的结果,需
要使用 9.0/5, 这样得到结果 1.8。
通常情况下,因为编译器可以明确指出错误的位置以及出错的原因,所以语法错误是很
容易发现和纠正的。运行时错误也不难找,因为在程序异常中止时,错误的原因和位置都会
显示在控制台上。然而,査找逻辑错误就很富有挑战性。在下面的章节中,我们将学习跟踪
程序以及找到逻辑错误的技巧。
1.10.4 常见错误
对于编程新手来说,遗漏右括号、遗漏分号、遗漏字符串的引号、命名拼写错误,都是
常见的错误。
常见错误 1: 遗漏右括号
括号用来标识程序中的块。每个左括号必须有一个右括号匹配。常见的错误是遗漏右括
号。为避免这个错误,任何时候输入左括号的时候就输入右括号,如下面的例子所示:
public class Wei come { > ◄— 立刻输人右括号匹配左括号
如果使用NetBeans 和 Eclipse 这样的 IDE, IDE 将自动为每个输人的左括号插人一个右
括号。
常见错误 2: 遗漏分号
每个语句都以一个语句结束符( ;)结束。通常,编程人门者会忘了在一个块的最后一
行语句后加上语句结束符,如下面例子所示:
public static void mainCString[] args) {
System.out.println(“Progranwiing is fun!”);
System.out •println(“FundaMenta1s First”);
System•out •println(“Problem Driven”) > t
遗漏一个分号
常见错误 3: 遗漏引号
字符串必须放在引号中。通常,编程人门者会忘记在字符串结尾处加上一个引号,如下
面例子所示:
20 J K i t
System.out
_ pr1ntln("Problem Driven^);
遗漏一个引号
如果使用 NetBeans 和 Eclipse 这样的 IDE, IDE 将自动为每个输入的左引号插人一个右
引号。
常见错误 4: 命名拼写错误
Java 是大小写敏感的。编程人门者常将名称拼写错误。例如,下面的代码中 main 错误
拼写成 Main, String 错误拼写成 string。 1 public class Test { 2 public static void Ha1n(string[] args){ 3 System.out.println((10.5 + 2 * 3) / (45
3.5)); 4 } 5 }
复习题
1.42 什么是语法错误(编译错误)、运行时错误以及逻辑错误?
1.43 给出语法错误、运行时错误以及逻辑错误的示例。
1.44 如果忘记为字符串加引号了,将产生哪类错误?
1.45 如果程序需要读取整数,而用户输人了字符串,运行该程序的时候将产生什么错误?这是哪类
错误?
1.46 假设编写一个计算矩形周长的程序,但是错误地写成了计算矩形面积的程序。这属于*
类错误?
1.47 指出和修改下面代码中的错误: 1 public class Welcome { 2 public void Main(String[] args){ 3 System.out.println('Wei come to Java!); 4 } 5 }
1.11 使用 NetBeans 开发 Java 程序
(/ 要点提示:可以使用 NetBeans 来编辑、编译、运行和调试 Java 程序。
NetBeans 和 Eclipse 是两个开发 Java 程序的免费的流行集成开发环境。如果按照简单的
指南学习,可以很快掌握。我们建议你采用其中之一来开发 Java 程序。本节对于初学者给出
基本的指南,在 NetBeans 环境中创建一个工程,创建类,以及编译和运行类。Eclipse 的使
用将在下节中介绍。参考补充材料 II.B 以得到如何下载以及安装最新版本 NetBeans 的指南。
1.11.1 创建 Java 工程
创建 Java 程序前,首先需要创建一个工程。工程类似于一个文件夹,用于包含 Java 程
序以及所有的支持文件。你只需要创建工程一次。这里是创建 Java 工程的步骤: 1 ) 选择 File New Project 来显示 New Project 对话框,如图 M2 所示。 2 )在 Categories 部分选择 Java, Projects 部分选择 Java Application, 然后单击 Next 来
显示 New Java Application 对话框,如图 1-
13 所示。 3 ) 在 Project Name 域中输入 demo, 在 Project Location 域中输入 c:\michael。去掉 Use
Dedicated Folder for Storing Libraries 的勾选,并且去掉 Create Main Class 的勾选。 4 )单击 Finish 来创建工程,如图丨
14 所示。
计算机、程序和Java 概述 21
mmmmm-sr: XJ
\m cuts Ubrary ,I JM Project wMi Easting Sources
Mutes »J»«ft«fFwmPro)»cl
: »¥■Sf agpBotton m a stand»d IDE proitct
’ fouctn
‘I «n class In the project Staodanl projects use an
11 N«*
zzzz > I Cancel Help
图 1-12 使用 New Project 对话框来创建一个新的工程,并且指定工程类别
xl
■— ■wdlooMon
- OW0M Project
- IIMB*
and loc
PrejKt Ham: |dc
ProiKtiAcaden:Ic- |
acmo
|c:\mich*«l
Pn»)»ctR>««r |c^
Mchw!Vf«fnr
厂 D^
catod Md«rr«r Stoimg UkrariM
•ml project*
can Bhai
onttirsnu (M« ttei^
in
^r 图 1-13 New Java Application 对话框用于确定工程名称和位置
:r
tfew H9«igate »>urae Ref«lof ftm Qebug Erofie Team loots 嫌ndow
am?旧__ zi 紅 - @- !
mLP[ jmr
^ KISBII
«dtfaut packao
- ^
Ubrants
ms
图 1-14 创建一个新的命名为 demo的 Java 工程
1.11.2 创建 Java 类
工程创建后,可以采用以下步骤在工程中创建 Java 程序: 1 )右键单击工程面板的 demo 节点,显示一个上下文菜单。选择 New
Java Class 来
显示 New Java Class 对话框,如图 M5 所示。 2 ) 在 Class Name 域输人 Welcome , 在 Location 域中选择 Source Packages。Package 域
保留为空白,这样将在默认包中创建一个类。 3 ) 单击 Finish 来创建 Welcome 类。源代码文件 Welcome.〗ava 放置在〈default package〉
节点下面。
22 $ 1*
xj
Step* 1. Choos« Rk Type
2. Ram« and Locatl
|wnlcom« £ro)»ct: |d«mo
|Sourct Packages ^1 ^1
Ovalad Rto: )C:VntchMlVd«mo\src>Milcom«.)ava
^
LWAming:BitMgMf
tftack I Me*f '|| 图 1-
1 5 使 用 New Java Class 对话框来创建一个新的 Java 类 4 )修改 Welcome 类中的代码与程序清单 N1 — 样,如图 1 -
16 所示。
编辑面板
输出面板
图丨
16 可以在 NetBeans 中编辑和运行程序
Pte Wt ^
cw Navigate Source Rpfactor &in Debug &of »e Team Ioote Window Help
二 tjJ i— — > mo • -JQJXJ
丨如Pag• 篇 - j i Source Packages
fia package
Sourf HM>ry 殳 电 分 也 ^ ^^ # U . m i s applicattion program prints We ic
public class Wmlaomm (
public static void Mia(String"
args)(
System. :. .println(“Weicome t«_ ;^v ^ :”); <dgfaut packag* 似iLULaj
mbtr, |二J 一- 6 L ) 1^
ng — *) s
zi
— vV <|2 ms
1.11.3 编译和运行类
要运行 Welcome.java, 右键单击 Welcome.java 以显示一个上下文菜单,选择 Run File,
或者简单地按下 Shift+F6。输
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" | “Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
创建一个自定义列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎