Java程序设计基础
罗恩韬 李 文 扈乐华 主 编
黄丽韶 郭力勇 杜 敏 副主编
段华斌 黄伟国
普通高等院校计算机基础教育“十三五”规划教材
副主编
Java程序设计基础
罗恩韬 李 文 扈乐华 主 编
黄丽韶 郭力勇 杜 敏 副主编
段华斌 黄伟国
普通高等院校计算机基础教育“十三五”规划教材
副主编
内 容 简 介
本书使用开发环境是 JDK 1.8+Eclipse 4.7,主要针对 Java 语言开发初学者,重点讲解
Java 语言的基础知识。全书共 10 章,主要介绍 Java 基本语法知识,控制语句,方法,数组
与字符串,类和对象,封装、继承和多态,抽象类和接口,异常处理机制,GUI 编程。内容
由浅入深,并辅以实例说明,逐步引领读者学习 Java 语言程序设计的各个知识点。
本书适合作为普通高等院校 Java 程序设计课程的教材,也可作为 Java 入门者的参考
用书。
图书在版编目(CIP)数据
Java 程序设计基础/罗恩韬, 李文, 扈乐华主编. — 北京: 中国铁道
出版社, 2017.9
普通高等院校计算机基础教育“十三五”规划教材
ISBN 978-7-113-23598-7
Ⅰ.①J… Ⅱ.①罗… ②李… ③扈… Ⅲ.①JAVA 语言-程序设计-高等
学校-教材 Ⅳ.①TP312.8
中国版本图书馆 CIP 数据核字(2017)第 215317 号
书 名:Java 程序设计基础
作 者:罗恩韬 李 文 扈乐华 主编
策 划:包 宁 读者热线:(010)63550836
责任编辑:刘丽丽 徐盼欣
封面设计:刘 颖
责任校对:张玉华
责任印制:郭向伟
出版发行:中国铁道出版社(100054,北京市西城区右安门西街 8 号)
网 址:http://www.tdpress.com/51eds/
印 刷:三河市宏盛印务有限公司
版 次:2017 年 9 月第 1 版 2017 年 9 月第 1 次印刷
开 本:787 mm×1 092 mm 1/16 印张:13.75 字数:328 千
书 号:ISBN 978-7-113-23598-7
定 价:38.00 元
版权所有 侵权必究
凡购买铁道版图书,如有印制质量问题,请与本社教材图书营销部联系调换。电话:(010)63550836
打击盗版举报电话:(010)51873659
Java 是当今最为流行的程序开发语言之一,具有与平台无关、简单高效、多线程、
安全和健壮等特点,广泛应用于企业级 Web 应用开发和移动应用开发。
要学好程序设计,首先要有兴趣。本书在结构上作了精心安排,以知识点和具体实
例相结合的方式介绍所有内容。在对细节的逐步深入过程中,通过对问题的求解提升读
者的学习兴趣。
本书在对知识点进行分析和归纳的同时,对引例作扩展或改变,逐步形成更全面、
复杂的实例,让读者通过对比加强对概念的理解,从而达到举一反三的学习效果。考虑
到知识的连贯性,各章节会在内容和实例上有所联系,以涵盖各知识点并拓宽读者思路。
本书的编写目的在于,进一步深化读者对基本概念的理解,提高读者综合应用能力,
使读者在掌握 Java 面向对象程序设计核心理论与编程思想、技巧的同时,养成良好的编
程习惯。本书所配备的例题清晰直观、循序渐进,并通过通俗易懂且逻辑性强的讲解巩
固知识点。
本书编者长期从事教学工作,积累了丰富的经验,其“实战教学法”取得了很好的
效果。本书具有以下特点:
1.注重基础性
本书内容注重基础性,深入浅出,并在每章后面安排了大量的习题,帮助学生学习
每一个知识点。
2.兼顾流行性
本书讲解的是 Java 开发过程中最流行的方法,可培养学生良好的编程风格和编程
习惯。
3.适合教学
书中每章内容安排适当,符合教学要求,教师可以根据具体情况选用,也可以进行
适当增减。
本书共分 10 章:第 1 章为 Java 概述,介绍 Java 的基本知识(包括 Java 发展历史,
Java 的特点和基本原理);第 2 章为 Java 基本语法知识,重点介绍标识符及关键词、数
据类型、常量与变量,以及运算符与表达式;第 3 章为 Java 控制语句,介绍 Java 的三
大基本结构化程序;第 4 章为方法,重点介绍方法的基本概念,包括方法声明、方法调
用、参数传递、方法重载、局部变量和包;第 5 章为数组与字符串,首先介绍数组的基
本概念,包括一维数组和二维数组,其次介绍字符串相关类;第 6 章为类和对象,主要
前 言
介绍类和对象的基本概念;第 7 章为封装、继承和多态,介绍封装、继承和多态三大特
征之间的概念以及联系;第 8 章为抽象类和接口,重点介绍抽象类和接口的特点以及主
要作用,应灵活掌握其在程序中的使用;第 9 章为 Java 异常处理机制,重点介绍异常处
理机制的基本原理、异常处理的过程,以及异常处理的三种方式,最后介绍自定义异常
的实现;第 10 章为 GUI 编程,重点介绍图形用户界面编程,利用编程人员对图形用户
界面编程的兴趣,将前面 9 章的内容结合起来,将所有内容融合成一个实例。
本书由罗恩韬、李文、扈乐华任主编,黄丽韶、郭力勇、杜敏、段华斌、黄伟国任
副主编。具体编写分工如下:第 1、2 章由李文编写,第 3、4 章由罗恩韬编写,第 5
章由黄丽韶编写,第 6 章由扈乐华编写,第 7 章由郭力勇编写,第 8 章由杜敏编写,
第 9 章由段华斌编写,第 10 章由黄伟国编写。全书由罗恩韬、李文、扈乐华统稿。本
书在编写过程中参阅了许多优秀的同类教材以及网上资料,在此向其作者表示衷心的
感谢。
由于时间仓促和编者水平有限,书中疏漏和不妥之处在所难免,敬请读者批评指正。
编 者
2017 年 7 月
第1章 Java概述...................................................................................... 1
1.1 Java简介...................................................................................................................1
1.1.1 Java的历史.........................................................................................................1
1.1.2 Java的特点........................................................................................................2
1.1.3 Java运行基本原理 ............................................................................................4
1.1.4 Java程序的类型 ................................................................................................4
1.2 Java中的OOP...........................................................................................................5
1.2.1 OOP的基本思想 ...............................................................................................5
1.2.2 OOP的发展过程................................................................................................6
1.2.3 OOP的特点 ....................................................................................................... 7
1.3 Java开发环境 ..........................................................................................................9
1.3.1 JDK环境配置 ....................................................................................................9
1.3.2 JDK常用命令....................................................................................................12
1.3.3 Eclipse配置.......................................................................................................16
1.3.4 Eclipse主界面...................................................................................................18
1.3.5 用Eclipse开发Java应用程序...........................................................................20
小结................................................................................................................................ 22
习题................................................................................................................................ 22
第2章 Java基本语法知识........................................................................24
2.1 标识符及关键词 ....................................................................................................24
2.1.1 标识符 ............................................................................................................24
2.1.2 关键词.............................................................................................................25
2.1.3 语句及注释.....................................................................................................25
2.2 数据类型 ...............................................................................................................25
2.2.1 基本数据类型................................................................................................25
2.2.2 引用数据类型 ................................................................................................26
2.3 常量与变量 ...........................................................................................................26
2.3.1 常量 ...............................................................................................................26
2.3.2 变量................................................................................................................28
2.4 运算符与表达式....................................................................................................29
目 录
2
Java 程序设计基础
2.4.1 算术运算符及表达式 ....................................................................................29
2.4.2 关系运算符及表达式......................................................................................31
2.4.3 逻辑运算符及表达式......................................................................................31
2.4.4 位运算符及表达式.........................................................................................32
2.4.5 赋值运算符及表达式.....................................................................................32
2.4.6 其他运算符及表达式.....................................................................................33
2.4.7 运算符的优先级与结合性 .............................................................................33
2.4.8 数据类型转换 ................................................................................................34
小结................................................................................................................................ 35
习题................................................................................................................................ 36
第3章 Java控制语句 ..............................................................................40
3.1 顺序结构语句 .......................................................................................................40
3.1.1 表达式语句.....................................................................................................40
3.1.2 块语句.............................................................................................................40
3.2 选择结构语句 ........................................................................................................41
3.2.1 if语句...............................................................................................................41
3.2.2 switch语句......................................................................................................47
3.2.3 选择结构语句的嵌套.....................................................................................50
3.3 循环结构语句 .......................................................................................................53
3.3.1 while循环语句 ...............................................................................................53
3.3.2 do...while循环语句 ........................................................................................54
3.3.3 for循环语句....................................................................................................56
3.4 其他控制语句 .......................................................................................................58
3.4.1 break语句 ......................................................................................................58
3.4.2 continue语句..................................................................................................58
小结................................................................................................................................ 59
习题................................................................................................................................ 60
第4章 方法...........................................................................................69
4.1 方法声明...............................................................................................................69
4.2 方法调用 ............................................................................................................... 70
4.3 参数传递 ................................................................................................................71
4.4 方法重载 ............................................................................................................... 72
4.5 局部变量 ............................................................................................................... 73
4.6 包........................................................................................................................... 74
4.6.1 package语句 ................................................................................................. 74
4.6.2 import语句 ..................................................................................................... 75
3
目 录
小结................................................................................................................................ 75
习题................................................................................................................................ 76
第5章 数组与字符串..............................................................................81
5.1 数组........................................................................................................................81
5.1.1 一维数组 .........................................................................................................81
5.1.2 多维数组.........................................................................................................83
5.2 字符串相关类 .......................................................................................................86
5.2.1 String类 ..........................................................................................................86
5.2.2 StringBuffer类 .................................................................................................89
5.2.3 StringBuilder类 ...............................................................................................90
小结................................................................................................................................ 90
习题................................................................................................................................ 91
第6章 类和对象 ....................................................................................99
6.1 引入实例................................................................................................................99
6.2 类..........................................................................................................................100
6.2.1 类的定义.......................................................................................................100
6.2.2 成员变量.......................................................................................................100
6.2.3 成员方法....................................................................................................... 101
6.3 对象...................................................................................................................... 101
6.3.1 对象的声明和创建 .......................................................................................102
6.3.2 对象的使用 ...................................................................................................103
6.4 类的封装 ..............................................................................................................104
6.4.l 访问控制属性................................................................................................104
6.4.2 设置类的访问控制属性................................................................................104
6.4.3 设置类成员的访问控制属性 ........................................................................104
6.5 静态成员 ..............................................................................................................106
6.5.1 静态变量.......................................................................................................106
6.5.2 静态方法.......................................................................................................108
小结.............................................................................................................................. 109
习题.............................................................................................................................. 110
第7章 封装、继承和多态.....................................................................119
7.1 封装...................................................................................................................... 119
7.2 继承......................................................................................................................120
7.2.1 继承的基本概念 ...........................................................................................120
7.2.2 子类对象的构造过程.................................................................................... 121
7.2.3 继承中的构造方法........................................................................................ 121
4
Java 程序设计基础
7.2.4 方法重写 ....................................................................................................... 121
7.2.5 this关键字 .....................................................................................................122
7.2.6 super关键字..................................................................................................124
7.3 多态......................................................................................................................126
7.3.1 多态的概念...................................................................................................126
7.3.2 多态的实现 ...................................................................................................126
7.3.3 对象转型 .......................................................................................................127
7.4 equals()方法 .........................................................................................................128
小结.............................................................................................................................. 129
习题.............................................................................................................................. 130
第8章 抽象类和接口............................................................................139
8.1 抽象类..................................................................................................................139
8.2 接口......................................................................................................................142
8.2.1 接口的定义...................................................................................................142
8.2.2 实现接口.......................................................................................................142
8.2.3 继承接口.......................................................................................................143
8.2.4 接口的特征 ...................................................................................................143
8.2.5 比较抽象类与接口........................................................................................144
8.3 final关键字 ...........................................................................................................145
8.4 常用类..................................................................................................................146
8.4.1 基本数据类型包装类 ...................................................................................146
8.4.2 Math类 ..........................................................................................................147
8.4.3 Random类.....................................................................................................148
8.4.4 System类 .......................................................................................................149
8.4.5 Runtime类 .....................................................................................................149
8.4.6 Date类...........................................................................................................150
8.4.7 SimpleDateFormat类 .....................................................................................150
8.4.8 Calendar类....................................................................................................150
小结.............................................................................................................................. 152
习题.............................................................................................................................. 153
第9章 Java异常处理机制......................................................................163
9.1 Java异常的基础知识...........................................................................................163
9.2 Java异常类类图...................................................................................................164
9.3 Java异常处理机制 ...............................................................................................165
9.4 定义和使用异常类...............................................................................................167
9.5 运行时异常和受检查异常 ...................................................................................168
5
目 录
9.6 Java异常处理的原则和技巧................................................................................169
小结.............................................................................................................................. 169
习题.............................................................................................................................. 170
第10章 GUI编程.................................................................................175
10.1 Swing介绍...........................................................................................................175
10.2 Swing控件...........................................................................................................176
10.2.1 JApplet .........................................................................................................176
10.2.2 ImageIcon和JLabel ......................................................................................177
10.2.3 JTextField......................................................................................................179
10.2.4 AbstractButton ............................................................................................. 181
10.2.5 JButton ......................................................................................................... 181
10.2.6 JCheckBox....................................................................................................182
10.2.7 JRadioButton ................................................................................................184
10.2.8 JComboBox ..................................................................................................186
10.2.9 JTabbedPane ...............................................................................................187
10.2.10 JScrollPane..................................................................................................189
10.2.11 JTree ............................................................................................................ 191
10.2.12 JTable .........................................................................................................192
10.3 Swing事件处理 ...................................................................................................192
10.4 Swing事件监听器 ...............................................................................................195
10.5 Swing Layout布局 ...............................................................................................196
10.5.1 BorderLayout................................................................................................196
10.5.2 FlowLayout ...................................................................................................198
10.5.3 GridLayout....................................................................................................199
10.5.4 GridBagLayout..............................................................................................201
10.5.5 CardLayout..................................................................................................204
10.5.6 BoxLayout....................................................................................................205
小结.............................................................................................................................. 206
习题.............................................................................................................................. 207
参考文献..............................................................................................210
1
第 1 章 Java 概述
Java 是 20 世纪 90 年代出现的完全面向对象的程序设计语言,体现了计算机编程的新方法、
新思想。本章首先介绍面向对象程序设计的基本概念、特点和基本思想;然后介绍面向对象的
Java 程序设计语言的发展概况、特点、运行机制和运行环境;最后简单介绍 Java 集成编程工具
Eclipse。
1.1 Java 简介
Java 是美国 Sun 公司(已于 2009 年被 Oracle 公司收购)研制的一种程序设计语言。在高
级语言已经非常丰富的背景下,Java 脱颖而出,独树一帜,在瑞士 TIOBE 公司每月发布的程序
开发语言排行榜中,Java 连续多年名列榜首,说明了人们对 Java 的喜爱程度。
1.1.1 Java 的历史
1994 年,美国 Sun 公司成立了 Green 项目开发小组,旨在研制一种能对家用电器进行控制
和通信的分布式代码系统,当时这套系统被命名为 Oak,这就是 Java 的前身。
1994 年前后,正是 Internet 特别是 Web 的大发展时期,Sun 公司的研究人员发现 Oak 的许
多特性更适合网络编程,于是在这方面进行了一系列改进和完善,并获得了成功。 1995 年初,
Sun 公司要给这种语言申请注册商标,由于 Oak 已经被人注册,必须要为这种语言找到一个新
的名字。在公司召开的命名征集会上,Mark Opperman 提出 Java 这个名字。据说,Mark Opperman
是因品尝咖啡时得到灵感的。Java 是印度尼西亚爪哇岛的英文名称,该岛因盛产高质量的咖啡
而闻名,常被用来当做优质咖啡的代名词。Mark Opperman 的这个提议,得到了所有人的认可
和律师的通过,Sun 公司用 Java 这个名字进行了注册,并以一杯热气腾腾的咖啡作为标志,Java
由此诞生。
Java 从诞生到今天,不断进行改进和更新。其发展历程大致可以分成以下几个阶段。
1.诞生期——Java 1.0 和 Java 1.1
Java 1.0 的出现是为了帮助开发人员建立运行环境并提供开发工具。1996 年 1 月 23 日,Sun
公司发布了第一个 Java 开发工具 JDK 1.0,JDK(Java Development Kit),JDK 1.0 由运行环境(Java
Runtime Enviroment,JRE)及开发工具(即 JDK)组成,其中运行环境又包括 Java 虚拟机(Java
Virtual Machine,JVM)、API(Application Programming Interface,应用程序接口)和发布技术。
1997 年,Sun 公司对 1.0 版本进行了较大的改进,推出了 JDK 1.1 版本,其中增加了 JIT
第1章 Java概述
2
Java 程序设计基础
(Just-In-Time)编译器。
2.发展期——Java 1.2 和 Java 1.3
1998 年 12 月,Java 1.0 诞生近三年后,Sun 公司推出 Java 1.2,并将其改名为 Java2,且把
Java 1.2 以后的版本统称为 Java2,同时将 JDK 1.2 改名为 J2SDK(SDK 的全称为 Software
Development Kit,意为软件开发工具),从此 Java 进入了快速发展的阶段。1999 年,Sun 公司
发布 Java 的三个版本:标准版(Java2 Standard Edition,J2SE)、企业版(Java2 Enterprise Edition,
J2EE)和微型版(Java2 Micro Edition,J2ME),以适应不同的应用开发要求。2000 年,JDK 1.3
发布。Java 1.3 在 Java 1.2 取得成功的基础上进行了一些改进,主要是对 API 做了改进和扩展。
3.成熟期——Java 1.4、Java 1.5 和 Java 1.6
自 Java2 平台开始,Java 的发展日趋成熟稳定,此后的 Java 1.4、Java 1.5 和 Java 1.6 主要
在分布式、稳定性、可伸缩性、安全性和管理方面进行了改进和提高。Java 1.4 比 Java 1.3 的运
行效率提高了一倍。而从 Java 1.5 版本开始,Java 1.5 改名为 Java 5.0,J2SE 1.5 改名为 J2SE 5.0,
更好地反映出了 J2SE 的成熟度和稳定性;Java 1.6(J2SE 6.0)则更强调管理的易用性,为外部
管理软件提供更多的交互信息,并更好地集成了图形化用户界面。从 2004 年开始,为了更加
突出 Java 本身,而不是 Java 的某个版本编号,Java 的三个版本陆续更名,去掉其中的编号 2,
J2SE、J2EE、J2ME 更名为 Java SE、Java EE 和 Java ME。
经过不断完善和发展,Java 已经得到业界的广泛认可,主要体现在工业界认可、软件开发
商青睐和编程人员欢迎等几方面。
① 工业界认可。目前绝大部分计算机企业(包括 IBM、Apple、DEC、Adobe、Silicon Graphics、
HP、Oracle、Toshiba 以及 Microsoft 等公司)都购买了 Java 的许可证,用 Java 开发相应的产品。
这说明 Java 已得到了工业界的认可。
② 软件开发商青睐,除购买 Java 许可证,用 Java 开发新产品以外,众多的软件厂商还
在自己已有的产品上增加 Java 接口,以使自己的产品支持 Java 的应用。例如 Oracle、Sybase,
Versant 等数据库厂商开发了 CGI 接口,使得这些数据库支持 Java 开发。
③ 编程人员欢迎。Java 的一个重要特点是其网络编程能力,因而成为网络时代编程人员最
欢迎的程序设计语言之一,各行业对掌握 Java 的人员需求量也非常大。
上述事实说明,Java 是一种得到广泛应用并有很好发展前景的程序设计语言。
1.1.2 Java 的特点
Java 之所以能够受到如此众多的好评并拥有如此迅猛的发展速度,与其本身的特点是分不
开的。Java 的主要特点如下:
1.面向对象设计
面向对象设计是 Java 的标志特性。作为一种纯粹的面向对象程序设计语言,Java 不再支
持面向过程的设计方法,而是从面向对象的角度思考和设计程序。Java 通过创建类和对象来
描述和解决问题,支持封装、继承、重载、多态等面向对象特性,提高了程序的可重用性和
可维护性。
3
第 1 章 Java 概述
2.简单易用
Java 最初的产生源于对家用电器的控制,其设计以简单易用、规模小为原则。一方面,Java
的语法非常简单,它不再使用其他高级程序设计语言中诸如指针运算、结构、联合、多维数组、
内存管理等复杂的语言现象,降低了程序编写的难度;另一方面,Java 提供了极为丰富的类库,
封装了各种常用的功能,程序设计人员无须对这些常用的功能自行编写程序,只要直接调用即
可,尽可能降低了程序设计人员的工作量。
3.平台无关性
Java 的平台无关性主要体现在三方面。首先,Java 运行环境是 Java 虚拟机,Java 虚拟机负
责解释编译后的 Java 代码并将其转换成特定系统的机器码,再由机器加以执行。Java 虚拟机屏
蔽了具体平台的差异性,用 Java 编写的应用程序无须重新编译就可以在不同平台的 Java 虚拟
机上运行,实现了平台无关性。其次,Java 的数据类型被设计成不依赖于具体机器。例如,整
数总是 32 位,长整数总是 64 位。这样,Java 基本数据类型及其运算在任何平台上都是一致的,
不会因平台的变化而改变。第三,Java 核心类库与平台无关,对类库的调用,不会影响 Java
的跨平台性。
4.安全性和健壮性
Java 去除了指针和内存管理等易出错的操作,在程序设计上增强了安全性。而且,Java 作
为网络开发语言,提供了多层保护机制增强安全性,例如,不允许 Applet 运行和读/写任何浏
览器端机器上的程序等。此外,Java 注重尽早发现错误。Java 编译器可以检査出很多开发早期
的错误,增强了程序设计的安全性和健壮性。
5.性能优异
Java 可以在运行时直接将目标代码翻译成机器指令,充分地利用硬件平台资源,从而可以
得到较高的整体性能。另外,与 Java 有关的厂商在不断完善 Java 的 JIT 编译器技术,旨在提高
Java 的运行速度。从基准测试来看,Java 的运行速度超过了典型的脚本语言,越来越接近 C 和
C++。
6.分布式
分布式是指在由网络相连的不同平台上,可以在独立运行时间内运行不同程序。Java 作为
一种强大的网络开发语言,其能力主要体现在开发分布式网络应用。Java 语言本身的特点很适
合开发基于 Internet 的分布式应用程序,并且提供了完备的适应分布式应用的程序库。Java 支
持 TCP/IP 协议及其他协议,可以通过 URL(Uniform Resource Locator,统一资源定位符)实现
对网络上其他对象的访问,实现分布式应用。
7.多线程
Java 支持多线程,允许在程序中并发地执行多个指令流或程序片段,以更好地利用系统资
4
Java 程序设计基础
源,提高程序的运行效率。Java 不仅支持多线程,而且对线程划分了优先级,以更好地支持系
统的交互和实时响应能力。此外,Java 具备线程同步功能,确保了计算结果的可预测性,有助
于对程序进行更好的控制。
1.1.3 Java 运行基本原理
Java 程序的运行机制与 C/C++等程序设计语言有较大的差别,这种差别也是保证 Java 具
有更强动态性和平台无关性的基础。概括来说,Java 的运行有三个步骤:编写、编译和运行。
① 编写是指利用编辑器生成 Java 程序代码,形成 Java 源文件。Java 程序以.java 为扩展
名。一个 Java 应用程序中可能会包括多个 Java 的类,这些类可以放在同一个 Java 源文件中,
也可以为每一个类分别编写一个源文件。
② 编译是指 Java 编译器将编辑好的 Java 源程序转换成 JVM 可以识别的字节码的过程。
字节码是一种独立于操作系统和机器平台的中间代码,用二进制形式表示,由 JVM 解释后才
能在机器上运行。编译成功后,Java 编译器生成扩展名为.class 的字节码文件。如果一个 Java
源程序中包含了多个类,编译后会生成多个对应的.class 文件。
③ 运行是指 JVM 将编译生成的. class 字节码文件翻译为与硬件环境及操作系统匹配的代
码,并运行和显示结果。JVM 可以将 Java 字节码程序和具体的操作系统及硬件区分开,而不用
考虑程序文件要在何种平台上运行,从而保证了 Java 语言的平台无关性和动态性。
图 1-1 所示是 Java 程序编写、编译和运行的过程。
图 1-1 Java 程序编写、编译和运行的过程
1.1.4 Java 程序的类型
Java 支持开发 4 种基本类型的程序,分别是 Java 应用程序(Java Application)、Java 小应
用程序(Java Applet)、服务器端小程序(Java Servlet)以及可重用 Java 组件 JavaBean。这 4
种类型的 Java 程序都遵循 Java 的基本编程结构,并且都要在 Java 虚拟机上运行,它们的表现
形式都是 Java 的类。
1.Java 应用程序
Java 应用程序是指完整的、可以独立运行的 Java 程序。一个 Java 应用程序由一个或多个
类组成。Java 应用程序经过编译之后,可在 Java 虚拟机上独立运行,完成一定的功能。在组成
Java 应用程序的类中,必须有一个类中包含有 main()方法(或称 main()函数),该方法是 Java
的内置方法,作用是提供 Java 应用程序的入口。Java 虚拟机从 main()方法开始执行 Java 应用
程序。包含 main()方法的类称为 Java 应用程序的主类(简称主类)。在编写 Java 源程序时,
如果将 Java 应用程序所包含的多个类同时写在一个文件中,则该文件名必须和主类的类名保持
一致,并以.java 为扩展名。如果将不同的类分别写在不同的文件中,通常将源文件命名为与其
包含的类名相同,并以.java 为扩展名。
5
第 1 章 Java 概述
2.Java 小应用程序
Java 小应用程序简称 Applet,是一种嵌在 HTML 页中由 Web 浏览器激活 Java 虚拟机来运
行的程序。也就是说,Applet 本身不能独立运行,必须以 Web 浏览器为其容器才能运行,因此,
可以简单地将 Applet 理解成由 Web 浏览器来执行的程序。Applet 部署在服务器端,当用户访
问嵌入了 Applet 的网页时,相应的 Applet 被下载到客户端的机器上执行。Applet 通常用来在网
页上实现与用户的交互功能或者实现动态的多媒体效果,使得网页更具活力。能够执行 Applet
的浏览器必须支持 Java。
3.服务器端小程序
服务器端小程序简称 Servlet,是一种用 Java 编写的服务器端程序。Servlet 以 Web 服务器
为容器,靠 Web 服务器来加载和运行。和 Applet 一样,Servlet 本身不能独立运行;但与 Applet
不同的是,Applet 在客户端运行,Servlet 在服务器端运行。Servlet 的作用是接收、处理客户端
的请求并将响应发送到客户端,从而实现客户端计算机与服务器端计算机之间的交互。利用
Servlet 技术,可以扩展 Web 服务器能力,充分利用 Web 服务器上的资源(如文件、数据库、
应用程序等)。能够执行 Servlet 的服务器必须支持 Java。
4.JavaBean
JavaBean 是一种用 Java 编写的可重用的软件组件,目前尚没有统一的中文译名。JavaBean
本身不能独立运行,必须以 Java 应用程序、Applet、Servlet 或者 JavaBean 为容器才能运行。
JavaBean 有两种类型,一种是可视化的 JavaBean,另一种是非可视化的 JavaBean。可视化的
JavaBean 具有图形界面,可以包括窗体、按钮、文本框、报表元素等。非可视化的 JavaBean 不
包括图形界面,主要用来实现业务逻辑或封装业务对象。可视化的 Javabean 是 JavaBean 的传
统应用,随着网络的兴起,非可视化的 JavaBean 应用越来越广泛,它与 JSP(Java Server Pages)
技术相结合,成为当前开发 Web 应用的主流模式。
1.2 Java 中的 OOP
面向对象程序设计(Object-Oriented Programming,OOP)是计算机软件技术发展过程中的
一个重大飞越,它能更好地适合软件开发在规模、复杂性、可靠性和质量、效率上的需求,因
而被广泛应用,并逐渐成为当前的主流程序设计方法。
1.2.1 OOP 的基本思想
面向对象程序设计代表了一种全新的程序设计思路和表达、处理问题的方法。在解决问题
的过程中,面向对象程序设计以问题中所涉及的各种对象为主要线索,关心的是对象以及对象
之间的相互关系,以符合人们日常的思维习惯来求解问题,降低、分解了问题的难度和复杂性,
提高了整个求解过程的可控性、可监测性和可维护性,从而能以较小的代价和较高的效率对问
题进行求解。简言之,面向对象程序设计的特点是使用对象模型对客观世界进行抽象,分析出
6
Java 程序设计基础
事物的本质特征,从而对问题进行求解。面向对象程序设计的思想认为世界是由各种各样具有
各自运动规律和内部状态的对象组成的,不同对象之间的相互通信和作用构成了现实世界,因
此,人们应当按照现实世界本来的面貌理解世界,直接通过对象及其相互关系来反映世界,这
样建立起来的系统才符合世界本来的面貌,才会对现实世界的变化有很好的适应性。所以,面
向对象方法强调程序系统的结构应当与现实世界的结构相对应,应当围绕现实世界中的对象来
构造程序系统。
所谓对象,是指现实世界的实体或概念在计算机程序中的抽象表示。具体地说,程序设计
中的对象是指具有唯一对象名和一组固定对外接口的属性和操作的集合,它用来模拟组成或影
响现实世界问题的一个或一组因素。其中,对象名是用于区别对象的标识;对象的对外接口是
在约定好的运行框架和消息传递机制下与外界进行通信的通道;对象的属性表现了它所处的状
态;对象的操作(也称方法)是用来改变对象状态的特定功能。
具体地说,面向对象程序设计的思想主要体现在如下几方面:
① 面向对象程序设计的核心和首要问题是标识对象,而不是标识程序中的功能(函数/过
程)。从面向对象程序设计的角度来看,对象作为现实世界中事物的基本组成部分,是系统框
架中最稳定的因素,对象描述清楚了,就能够很容易地找出它们之间的关系,从而发现它们之
间的相互作用,进而解决问题。
② 正是由于把标识对象作为解决问题的出发点,面向对象程序设计在整体上说是一种自
底向上的开发方法。面向对象的基本思想将程序看作众多协同工作的对象所组成的集合,这些
对象相互作用构成系统完整的功能,因此在设计开发程序时,面向对象的方法按照标识对象、
定义对象属性和操作、明确对象之间事件驱动和消息关系,最后形成程序的整体结构顺序进行。
③ 同任何其他应用系统开发一样,面向对象程序设计在概念模式与系统组成模式上的一
致性,使得面向对象程序设计过程中的各个阶段是一种自然平滑的过渡,各阶段的界限不是那
么明显。系统分析阶段的结果能够直接映射成系统设计的概念,系统设计阶段的结果可以方便
地翻译成实施阶段的程序组件,反之亦然。这样,系统设计和开发人员就能够容易地跟踪整个
系统开发过程,了解各个阶段所发生的变化,不断对各个阶段进行完善。
总之,面向对象程序设计方法更符合人们对客观世界的认识规律,开发的软件系统易于维
护、理解、扩充和修改,并支持软件的复用。从 20 世纪 90 年代开始,面向对象程序设计的方
法逐渐成为软件开发的主流方法。
1.2.2 OOP 的发展过程
面向对象程序设计方法作为一种程序设计规范,其发展与程序设计语言的发展密切相关。
事实上,最早的面向对象程序设计的一些概念正是由一些特定语言机制体现出来的。
20 世纪 50 年代后期,为了解决 FORTRAN 语言编写大型软件时出现的变量名在不同程序
段中的冲突问题,ALGOL 语言设计者采用了“阻隔”(Barriers)的方式来区分不同程序段中的
变量名,在程序设计语言 ALGOL60 中用 Begin...End 为标识对程序进行分段,以便区分不同程
序段中的同名变量,这也是首次在编程语言中出现保护(Protection)和封装(Encapsulation)
的思想。
20 世纪 60 年代,挪威科学家 O. J. Dahl 和 K. Nygaard 等采用了 ALGOL 语言中的思想,设
计出用于模拟离散事件的程序设计语言 Simula 67。与以往程序设计语言不同,Simula 67 从一个
7
第 1 章 Java 概述
全新的角度描述并理解客观事实,首次在程序设计中将数据和与之对应的操作结合成一个整体,
提出“封装”的概念,它的类型结构和以后的抽象数据类型基本是一样的。尽管 Simula 67 还
不是真正的面向对象程序设计语言,但它提出的思想标志着面向对象技术正式登上历史舞台。
真正的面向对象程序设计语言是由美国 Alan Keyz 主持设计的 Smalltalk 语言。Smalltalk 这个名
字源自 Talk Small(少说话),意思是可以通过很少的工作量完成许多任务。Smalltalk 在设计中
强调对象概念的统一,引入了对象、对象类、方法、实例等概念和术语,采用了动态联编和单
继承机制。用 Smalltalk 编写的程序具有封装、继承、多态等特性,由此奠定了面向对象程序设
计的基础。20 世纪 80 年代以后,美国 Xerox 公司推出了 Smalltalk-80,引起人们的广泛重视。
Smalltalk 语言的出现引发了学术界对面向对象程序设计的广泛重视,随之涌现出了很多面
向对象的系统分析与设计方法,诞生了一系列面向对象的语言,如 C++、Eiffel、Ada 和 CLOS
等。 其中,C++不仅继承了 C 语言易于掌握、使用简单的特点,而且增加了众多支持面向对象
程序设计的特性,促进了面向对象程序设计技术的发展。
20 世纪 90 年代,美国 Sun 公司提出的面向对象的程序设计语言 Java,被认为是面向对象
程序设计的一次革命。Java 去除了 C++中为了兼容 C 语言而保留的非面向对象的内容,使程序
更加严谨、可靠、易懂。尤其是 Java 所特有的“一次编写、多次使用”的跨平台优点,使得它
非常适合在 Internet 应用开发中使用。
从面向对象程序设计语言的发展历程可以看出,面向对象程序设计语言是经过研究人员的
不断改进与优化,才形成了今天的模样。正是由于这种语言更好地适应了软件开发过程中规模、
复杂性、可靠性和质量、效率上的需求,并且在实践中得到了检验,才逐渐成为当前主流的程
序设计方法。
1.2.3 OOP 的特点
面向对象程序设计有许多特点,这里重点介绍其主要特点。
1.抽象
抽象(Abstract)是日常生活中经常使用的一种方法,即去除被认识对象中与主旨无关的部
分,或是暂不予考虑的部分,而仅仅抽取出与认识目的有关的、实质性的内容加以考察。在计
算机程序设计中所使用的抽象有两类:一类是过程抽象;另一类是数据抽象。
过程抽象将整个系统的功能划分为若干部分,强调功能完成的过程和步骤。面向过程的软
件开发方法采用的就是这种抽象方法。使用过程抽象有利于控制、降低整个程序的复杂程度,
但是这种方法本身自由度较大,难于规范化和标准化,操作起来有一定难度,质量上不易保证。
数据抽象是与过程抽象不同的抽象方法,它把系统中需要处理的数据和这些数据上的操作
结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型。每个抽象数据类型既
包含数据,也包含针对这些数据的授权操作,是相对于过程抽象而言更为严格、也更为合理的
抽象方法。
面向对象程序设计的主要特点之一,就是采用了数据抽象的方法来构建程序的类、对象和
方法。在面向对象程序设计中使用的数据抽象方法,一方面可以去除与核心问题无关的细节,
使开发工作可以集中在关键、重要的部分;另一方面,在数据抽象过程中,对数据操作的分析、
辨别和定义可以帮助开发人员对整个问题有更深入、准确的认识,最后抽象形成的抽象数据类
8
Java 程序设计基础
型则是进一步设计、编程的基础和依据。
2.封装
封装(Encapsulation)是面向对象程序设计的重要特征之一。面向对象程序设计的封装特
性与其抽象特性密切相关。封装是指利用抽象数据类型将数据和基于数据的操作结合并包封到
一起,数据被保护在抽象数据类型的内部,系统的其他部分只能通过对象所提供的操作来间接
访问对象内部的私有数据,与这个抽象数据类型进行交流和交互。
在面向对象程序设计中,抽象数据类型是用“类”这种面向对象工具可理解和可操作的结
构来代表的。每个类里都封装了相关的数据和操作。在实际的开发过程中,类多用来构建系统
内部的模块。由于封装特性把类内的数据保护得很严密,模块与模块之间仅通过严格控制的接
口进行交互,大大减少了它们之间的耦合和交叉,从而降低了开发过程的复杂性,提高了开发
效率和质量,减少了可能的错误,同时也保证了程序中数据的完整性和安全性。
面向对象程序设计的这种封装特性还有另一个重要意义,就是抽象数据类型,即类或模块
的可重用性大为提高。封装使得抽象数据类型对内成为一个结构完整、可自我管理、自我平衡、
高度集中的整体;对外则是一个功能明确、接口单一、在各种合适的环境下都能独立工作的有
机单元,这样的有机单元特别有利于构建、开发大型、标准化的应用软件系统,可以大幅提高
生产效率,缩短开发周期和降低各种费用。
3.继承
继承(Inheritance)是面向对象程序设计中最具有特色也与传统方法最不相同的一个特点。
继承是存在于面向对象程序的两个类之间的一种关系,是组织、构造和重用类的一种方法。当
一个类具有另一个类的所有数据和操作时,就称这两个类之间具有继承关系,被继承的类称为
父类或超类,继承了父类或超类所有属性和方法的类称为子类。通过继承,可以将公用部分定
义在父类中,不同部分定义在子类中,这样公用部分可以从父类中继承下来,避免了公用代码
的重复开发,实现了软件和程序的可重用性;同时,对父类中公用部分的修改也会自动传播到
子类中,而无须对子类做任何修改,这样有利于代码的维护。
一个父类可以同时拥有多个子类,这时该父类实际是所有子类的公共属性的集合,而每个
子类则是父类的特殊化,是在父类公共属性的基础上进行的功能和内涵的扩展及延伸。
在面向对象程序设计的继承特性中,有单重继承和多重继承之分。单重继承是指任何一个
类都只有一个单一的父类;多重继承是指一个类可以有一个以上的父类,它的静态数据属性和
操作从所有父类中继承。采用单重继承的程序结构比较简单,是单纯的树状结构,掌握、控制
起来相对容易。支持多重继承的程序,其结构则是复杂的网状,设计、实现都比较复杂。在现
实世界中,问题的内部结构多为复杂的网状,用多重继承的程序模拟起来比较自然,但会导致
编程方面的复杂性。单重继承的程序结构简单,实现方便,但要解决网状的继承关系则需要其
他一些辅助措施。
在面向对象程序设计中,采用继承的机制来组织、设计系统中的类,可以提高程序的抽象
程度,使之更接近于人类的思维方式,同时也可以提高程序的开发效率,减少维护的工作量。
9
第 1 章 Java 概述
4.多态
多态(Polymorphism)是面向对象程序设计的又一个特殊特性。所谓多态,是指一个程序中
同名的不同方法共存的情况,在使用面向过程语言编程时,主要工作是编写一个个的过程或函数,
这些过程或函数各自对应一定的功能,它们之间是不能重名的,否则在用名字调用时,就会产生
歧义和错误;而在面向对象的程序设计中,有时却需要利用这样的“重名”现象来提高程序的抽
象度和简洁性。
对象程序设计中的多态有多种表现方式,可以通过子类对父类方法的覆盖实现多态,也可
以重载在同一个类中定义多个同名的不同方法,等等。多态的特点大大提高了程序的抽象程度
和简洁性,更为重要的是,它最大限度地降低了类和程序模块之间的耦合性,使得它们不需要
了解对方的具体细节,就可以很好地工作。这个优点対应用系统的设计、开发和维护都有很大
的好处。
1.3 Java 开发环境
要在一台计算机上编写和运行 Java 程序,首先要建立 Java 运行环境。建立 Java 运行环境
就是在计算机上安装 Java 开发工具包(JDK),并在计算机中设置相应的参数,使 Java 程序
在计算机中正确运行。
1.3.1 JDK 环境配置
JDK 是 Sun 公司提供的免费 Java 开发工具包,现在分化成为三种版本:Java SE、Java EE
和 Java ME。Java SE 是用于工作站和个人计算机的标准开发工具包;Java EE 是应用于企业级开
发的工具包;Java ME 主要用于面向消费电子产品,是使 Java 程序能够在手机、机顶盒、PDA
等产品上运行的开发工具包。本书主要介绍 Java SE。图 1-2 是 Java SE 基本结构的示意图。
图 1-2 Java SE 基本结构的示意图
10
Java 程序设计基础
从图 1-2 中可以看出,JDK 包含了所有编译、调试、运行 Java 程序所需要的工具,由 JRE
和开发工具组成。JDK 中的开发工具主要包括 Java 编译器、Java 调试器、常用于远程调试的
JPDA(Java Platform Debugger Architecture,Java 平台调试架构),以及用于从 Java 源代码中抽
取注释以生成 API 帮助文档的 Java API 文档生成器。
JRE 是 Java 的运行环境,由 JVM 加上 Java API 以及其他一些支持组件构成,用于运行 Java
程序。其中具体表现形式是 Java 的类库,是编程时可以利用的预编写的代码,主要包括核心
API(如端口类库、工具类库、I/O 类库等)、集成类库(如数据互联的类库等)以及用户接口
(如用户图形界面类库、图形类库等),支持组件主要包括从 Web 下载运行 Java 应用程序的 Java
Web Start 软件以及用于支持 Java Applet 在浏览器中运行的 Java Plug-in 软件。
JVM 负责解释 Java 的字节码,以便计算机能够加以执行,是 Java 平台核心。JVM 模拟了
计算机的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM 只能执行 Java 字节
码文件(.class 文件)。
下面具体介绍 JDK 环境搭建过程。在使用 Java 之前,需要先安装 JDK。一般要求 JDK 1.2
或以上版本,推荐使用 JDK 1.4 及以上版本。
1.JDK 的下载和安装
JDK 的最新版本可以在 http://www.oracle.com/technetwork/java/javase/downloads/index.html 网
站上下载,下载时要注意自己计算机的操作系统类型以及操作系统的位数,下载的安装程序应
当与计算机的操作系统相匹配。这里介绍 JDK 8.0 版本,64 位的 Windows 环境下安装文件的文
件名为 jdk-8u141-windows-x64.exe。
具体安装步骤如下:
① 双击安装文件 jdk-8u141-windows-x64.exe,安装程序在收集系统信息之后,会弹出 JDK
安装向导,如图 1-3 所示。
② 单击“下一步”按钮,系统默认将 JDK 安装到 C:\\Program Files\\Java\\jdk1.8.0_141\\目录
下。用户可以不使用默认的安装路径,通过单击“更改”按钮,可以改变安装路径,例如改成
D:\\Java\\jdk1.8.0_141\\。如果用户更改了 JDK 的安装路径,要注意记住这个路径,在以后应一直
使用这个路径。图 1-4 是修改过 JDK 安装路径的向导界面。
图 1-3 JDK 安装向导 图 1-4 修改过 JDK 安装路径的向导界面
11
第 1 章 Java 概述
③ 单击“下一步”按钮,安装程序会自动在指定目录下安装 JDK。安装完成后,向导继
续提示安装 JRE。JRE 的默认安装路径是 C:\\Program Files\\Java\\jre1.8.0_141\\,用户可以单击“更
改”按钮改变 JRE 的安装路径,例如改成 D:\\Java\\jre1.8.0_141\\。图 1-5 是修改过 JRE 安装路
径的向导界面。
④ 单击“下一步”按钮,继续安装 JRE。安装完成后,单击“完成”按钮即可。本书中
JDK 和 JRE 采用的目录都是 D:\\Java\\。图 1-6 所示是安装成功之后的目录结构图。
图 1-5 修改过 JRE 安装路径的向导界面 图 1-6 目录结构图
2.JDK 的环境变量设置
JDK 安装完成之后,还需要设置计算机系统的环境变量中运行路径(Path)和类路径(classpath),
以便其他软件能够确定 JDK 的安装位置。运行路径变量记录 JDK 各个命令程序所在的路径,系统
根据这个变量的值来査找相应命令程序。因此,在运行路径变量中加上 JDK 命令程序所在的路径,
JDK 的命令程序都放在\\bin 目录下(见图 1-6)。例如,对于安装在 D:\\Java\\jdk1.8.0_141\\目录下的
JDK 来说,运行路径变量的值应该设置 D:\\Java\\jdk1.8.0_141\\bin,这样,在运行 JDK 命令程序
时就不必输入路径名了。
类路径变量用来记录用户定义的类和第三方定义的类所在的路径,通常将类路径设为当前
路径(用“.”表示)。当运行路径和类路径变量有多个值(多个路径)时,相邻两个路径之间
用分号(Windows 操作系统)或者冒号(Linux 或 UNIX 操作系统)隔开。
以下以 Windows 7 操作系统环境为例,说明 JDK 环境变量的设置步骤。
① 右击桌面上的“计算机”图标,选择快捷菜单中的“属性”命令,打开“系统属性”
对话框;或者选择“开始”菜单中的“控制面板”命令,打开“控制面板”窗口,双击其中的
“系统”图标,也可以打开“系统属性”对话框。选择“高级”选项卡,如图 1-7 所示。
② 单击“环境变量”按钮,打开“环境变量”对话框,如图 1-8 所示。“环境变量”对
话框分成上下两部分,上半部分用来设置只对当前用户有效的用户变量,下半部分用来设置对
所有用户都有效的系统变量。
③ 单击“系统变量”中的“新建”按钮,打开“新建系统变量”对话框,按照如图 1-9
所 示 填 写 , 变 量 名 为 JAVA_HOME, 变 量 值 为 D:\\Java\\jdk1.8.0_141 。 设 置 新 的 系 统 变 量
JAVA_HOME 的作用是方便使用,后期如需要更新其他版本只需要安装后修改 JAVA_HOME 变
12
Java 程序设计基础
量即可。(不需要修改 path 路径,path 路径其中配置的系统路径参数很多,配置 JAVA_HOME
可以避免产生错误。)
图 1-7 “系统属性”对话框 图 1-8 “环境变量”对话框
④ 在图 1-8 的“系统变量”列表框中选择 Path,单击“编辑”按钮,在弹出的“编辑系
统变量”对话框中的“变量值”文本框中最前面添加“%JAVA_HOME%\\bin;”,单击“确定”
按钮,完成运行路径的设置,如图 1-10 所示。
图 1-9 “新建系统变量”对话框 图 1-10 “编辑系统变量”对话框
⑤ classpath 配置。classpath 配置只针对 JDK 1.6 以前的版本,JDK 1.6 以及以后的版本都
不需要配置 classpath。
1.3.2 JDK 常用命令
JDK 包括了一系列用于开发 Java 程序的命令,程序设计人员可以用这些命令调试和运行
Java 程序,下面对其中的几个主要命令进行简单介绍。
1.Javac 编译器
javac.exe 是 Java 程序的语言编译器,该编译器读取 Java 程序源代码文件,并将其编译成
类文件(.class 文件)。类文件中包含有 Java 字节码。javac 的命令行中必须指定 Java 程序源文
件,并且必须包括文件扩展名. java。javac 命令的用法如下:
javac <选项> <源文件>
javac.exe 命令的常用选项及其含义如表 1-1 所示。
13
第 1 章 Java 概述
表 1-1 javac.exe 命令的常用选项及其含义
选 项 值 含 义
-g 生成所有调试信息,调试信息包括行号和源文件信息
-g: none 不生成任何调试信息
-nowarn 关闭警告信息,编译器不显示警告信息
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath<路径> 指定査找用户类文件和注释处理程序的路径
-cp<路径> 指定査找用户类文件和注释处理程序的路径
-processorpath<路径> 指定査找注释处理程序的路径
-d<目录> 指定存放生成的类文件的位置
-s<目录> 指定存放生成的源文件的位置
-encoding<编码> 指定源文件使用的字符编码
-help 输出本命令选项的帮助信息
2.Java 解释器
java. exe 是 Java 语言的解释器,用来解释执行 Java 字节码文件。用于执行. class 文件的语
法是:
java[选项] class 文件名[参数...]
其中,class 文件名是以. class 为扩展名的 Java 字节码文件。与 javac. exe 命令不同,java 命令
行中只需指明字节码文件名即可,不必再写扩展名. class。 参数是要传给类中 main() 方法的,
多个参数用空格分隔。
java.exe 还可以执行扩展名为. jar 的可执行 Java 归档文件(Java Archive File),用法如下:
java[-选项]-jar JAR 文件名[参数...]
其中,JAR 文件为以. jar 为扩展名的可执行 Java 归档文件,参数是要传给类中 main()方法的参
数,多个参数用空格分隔 。
java. exe 命令的常用选项及其含义如表 1-2 所示。
表 1-2 java.exe 命令的常用选项及其含义
选 项 值 含 义
-verbose 输出有关编译器正在执行操作的消息,包括被编译的源文件名和被加载的类名
-classpath<路径> 指定査找用户类文件和 JAR 文件的路径
-cp<路径> 指定査找用户类文件和 JAR 文件的路径
-version 显示 Java 版本,程序不再运行
-showversion 显示 Java 版本,程序继续运行
-help 输出命令选项的帮助信息
-? 输出命令选项的帮助信息
14
Java 程序设计基础
3.Java 归档文件生成器
JVM 除了可以运行扩展名为.c1ass 文件外,还可以运行扩展名为.jar 文件的可执行的 JAR
(Java Archive File)文件。JAR 文件是一种压缩格式的文件,它可以将一个应用程序所涉及的多
个. class 文件及其相关的信息(如目录、运行需要的类库等)打包成一个文件,从而提高了 Java
程序的便携性。JAR 文件通常用来发布 Java 应用程序和类库。
JDK 中的 jar. exe 命令负责生成 JAR 文件,其用法是:
Jar {ctxui 参数} [vfm0Me 参数] [JAR 文件] [manifest 文件] [应用程序入口点] [-C 目录]
文件名...
jar.exe 命令中常用参数在这里不再详细说明。
除以上命令外,JDK 还提供多种工具,包括 Java Applet 查看器(appletViewer.exe)、Javah
头文件生成器(javah.exe)、Java 反编译器(javap.exe)、JDB 调试器(jdb.exe)、Java API 文
件生成器(javadoc.exe)等,这里不再一一介绍。
4.应用程序示例
以下用一个简单例子来说明 Java 应用程序编译、执行的过程。
【例 1.1】一个简单的 Java 应用程序。
/*First Java program*/
public class WelcomeToJava {
public static void main(String[] args) {
System.out.println("Welcome to JAVA. ");
}
}
(1)编辑源程序
JDK 本身没有提供编辑工具,可以使用任何第三方文本编辑器,例如使用 Windows 的记事
本程序,输入例 1.1 的代码。例 1.1 是一个比较简单的 Java 应用程序,其中:
第 1 行“/*...*/”引导的内容是 Java 的注释信息。Java 编译器在编译过程中会忽略程序注
释的内容,在程序使用注释时,能够增加程序的可读性。
第 2 行是类的定义,保留字 class 用来定义一个新的类,其类名为 WelcomeToJava,class
前面的保留字 public 是修饰符,说明这个类是一个公共类,整个类的定义由花括号{}括起来(即
第 2 行最后的“{”和第 6 行的“}”),其内部是类体。
第 3 行定义了一个 main()方法,这是 Java 应用程序必须定义的一个特殊方法,是程序的
入口。其中,public 表示访问权限,指明可以从本类的外部调用这一方法; static 指明该方法
是一个类方法,它属于类本身,而不与某个具体对象相关联; void 指明 main()方法不返回任何
值。main()方法也用花括号{}括起(即第 3 行最后的“{”和第 5 行的“}”)。
第 4 行 System.out. println("Welcome to JAVA.")实现程序的输出,这条语句调用了 System 类
的标准输出流 out 的 println()方法,该方法的作用是将圆括号内的字符串在屏幕上输出,并换
行。System 类位于 Java 类库的 java. lang 包中。
这条语句的功能是在标准输出设备(显示器)上输出一行字符:
Welcome to JAVA.
15
第 1 章 Java 概述
程序编辑结束,也就是输入结束后,保存文件,并将文件命名为 WelcomeToJava. java,这
里假定文件保存在 D: \\ Java\\Program 目录下。注意,文件名必须与类名相同(字母的大小写也
要一致)。至此,Java 源程序编辑完毕。利用 Windows 资源管理器,可以在 D: \\ Java\\Program
目录下看到 WelcomeToJava. java 文件。
(2)编译源程序
使用 javac 命令对源程序进行编译,将 Java 源程序转换成字节码。
单击“开始”→“所有程序”→“附件”→“命令提示符”命令,打开“命令提示符”窗
口,进入 D: \\ Java\\Program,并输入 javac WelcomeToJava. Java,按【Enter】键后看到图 1-11 所
示窗口,表明编译成功。这时,D:\\Java\\Program 目录下会多出字节码文件 WelcomeToJava.class。
图 1-11 编译成功界面
如果程序输入有错,假定程序第 2 行的 public 中的小写的“p”改成大写的“P”,则编译
器会给出错误提示,如图 1-12 所示。这时,不会生成 WelcomeToJava. class 文件。
图 1-12 编译失败界面
(3)执行程序
程序被正确编译成字节码后,就可以用 java 命令来执行。在“命令提示符”窗口中输入 java
WelcomeToJava,可以看到本程序的运行结果,如图 1-13 所示。
16
Java 程序设计基础
图 1-13 运行成功界面
1.3.3 Eclipse 配置
JDK 以命令行的方式为程序开发人员提供了必要的开发工具,虽然简单,但使用起来并不
是很方便,特别是无法满足大型 Java 应用开发的要求。随着 Java 的广为流行,第三方公司开
发的 Java 语言集成开发环境(Integrated Development Environment,IDE)应运而生。集成开发
环境是一种提供程序开发环境的应用程序,它将程序的编辑、编译、调试、运行等功能集成到
一起,并利用图形用户界面(GUI)来方便开发人员的操作,以提高工作效率。 IDE 是程序开
发人员必备和必会的工具。常用的 Java IDE 有 NetBeans、JBuilder、Eclipse、Visual J++、JCreator
等。本书使用 Eclipse 作为开发环境。
1998 年,美国 IBM 公司整合公司的内部研究力量,致力于开发一种通用的应用软件集成
开发环境。2000 年,IBM 将研发出来的系统命名为 Eclipse。2001 年,IBM 发布 Eclipse 1.0,
并将这套投资了 4 千万美元的系统捐赠给了开发源码社区,同时,还组建了 Eclipse 联盟,主要
任务是支持并促进 Eclipse 开源项目的进一步发展。2004 年初,在 Eclipse 联盟的基础上成立了
独立的、非营利性的合作组织——Eclipse 基金会(Eclipse Foundation),负责对 Eclipse 项目进
行规划、管理和开发。 Eclipse 基金会的网址是 http:// www.eclipse.org/,可在该网站上免费找到
Eclipse 的各种版本和相关资源。
Eclipse 最大的特点是采用开放的、可扩展的体系结构,它有三个组成部分:Eclipse 平台(Eclipse
platform)、Java 开发工具(Java Development Toolkit,JDT)以及插件开发环境(Plug-in Development
Environment,PDE)。Eclipse 平台是 Eclipse 的通用环境,用于集成各种插件,为插件提供集成环
境,各种插件(包括 JDT 和 PDE)通过 Eclipse 平台运行和发挥作用。JDT 本身是一种插件,提
供 Java 应用程序编程接口,是 Java 程序的开发环境。 PDE 是插件的开发和测试环境,支持对插
件的开发。由此可见,Eclipse 的功能已经远远超出了 Java 集成开发环境的范围。事实上,Eclipse
的目标是创造一个广泛的开发平台,为集成各种开发工具(插件)提供必要服务,使得开发人员能
够将不同的工具整合到 Eclipse 中,在一个统一的软件环境下开发应用系统,提高工作效率。
自 Eclipse 1.0 发布以来,Eclipse 每年都有新的版本发布,从 Eclipse 3.1 版开始,除了版本
号以外,还对 Eclipse 进行了代号命名。表 1-3 列出了 Eclipse 的主要版本。
17
第 1 章 Java 概述
表 1-3 Eclipse 的主要版本
版 本 发 布 时 间 版 本 发 布 时 间
Eclipse 1.0 2001 年 11 月 7 日 Eclipse Helios(3.6) 2010 年 6 月 23 日
Eclipse 2.0 2002 年 6 月 27 日 Eclipse Indigo(3.7) 2011 年 6 月 22 日
Eclipse 2.1 2003 年 3 月 27 日 Eclipse Juno(4.2) 2012 年 6 月 27 日
Eclipse 3.0 2004 年 6 月 25 日 Eclipse Kepler(4.3) 2013 年 6 月 26 日
Eclipse IO(3.1) 2005 年 6 月 27 日 Eclipse Luna(4.4) 2014 年 6 月 25 日
Eclipse Callisto(3.2) 2006 年 6 月 29 日 Eclipse Mars(4.5) 2015 年 6 月 25 日
Eclipse Europa(3.3) 2007 年 6 月 25 Eclipse Neon(4.6) 2016 年 6 月 25 日
Eclipse Ganymede(3.4) 2008 年 6 月 17 日 Eclipse Oxygen(4.7) 2016 年 6 月 25 日
Eclipse Galileo(3.5) 2009 年 6 月 24 日
下面具体介绍 Eclipse 的安装过程。Eclipse 用 Java 开发 IDE 环境,它本身也要在 Java 虚
拟机运行,同时 Eclipse 需要使用 JDK 的编译器,因此,运行 Eclipse 之前,要先安装并正确
配置 JDK。JDK 的安装和配置在前面已经做过介绍。
1.Eclipse 的下载和安装
Eclipse 是开放源代码项目,可以到 http://www.eclipse.org/网站免费下载最新版本的 Eclipse。
这里介绍 Eclipse Oxygen 的 Eclipse IDE for Java Developers,其中 Windows 环境下安装文件的文
件名为 eclipse-java-oxygen-R-win32-x86_64.zip。
eclipse-java-oxygen-R-win32-x86_64.zip 是绿色软件,在下载完成后,只需要将对应的压缩
包文件 eclipse-java-oxygen-R-win32-x86_64.zip 解压缩到指定位置,例如 D 盘,即可完成 Eclipse
的安装。解压后,在安装目录 D 盘下会多出一个 eclipse 文件夹。其 D:\\eclipse 目录下的文件结
构如图 1-14 所示。
双击图 1-14 中的 eclipse.exe 文件,启动 Eclipse,出现 Eclipse 的启动画面,如图 1-15 所示。
图 1-14 Eclipse 的目录结构 图 1-15 Eclipse 的启动画面
启动画面结束后,Eclipse 弹出 Eclipse Launcher 对话框,提示用户指定工作空间(Workspace)
的位置,如图 1-16 所示。工作空间是指存放 Java 项目(Java project)的目录,默认值是“C:\\Documents
and Settings\\计算机用户名\\workspace”,假定今后创建的 Java 项目都放在 D:\\Java\\Program 目录下,
单击 Browse 按钮,在弹出的对话框中选择 D:\\Java\\Program 目录,再单击“确定”按钮,即可完
成工作空间的设定。单击 Eclipse Launcher 对话框中的 Launch 按钮,进入 Eclipse 的欢迎界面,
如图 1-17 所示。
18
Java 程序设计基础
图 1-16 Eclipse Launcher 对话框
图 1-17 Eclipse 的欢迎界面
单击 Eclipse 欢迎界面的“关闭”按钮,关闭欢迎页面,进入 Eclipse 的主界面。
1.3.4 Eclipse 主界面
Eclipse 的主界面由透视图(Perspective)组成。一个透视图是视图(View)、菜单、工具
栏、编辑器等的组合,用来满足不同类型 Java 程序开发工作的需要。简单地说,透视图提供开
发界面的布局,如图 1-18 所示。
图 1-18 主界面透视图
19
第 1 章 Java 概述
以下简要介绍 Java 透视图的主要组成部分:
1.菜单栏
菜单栏位于透视图的最上方,包括 File(文件)、Edit(编辑)、Source(源代码)、Refactor
(重构)、Navigate(浏览)、Search(搜索)、Project(项目)、Run(运行)、Window(窗口)
和 Help(帮助)等菜单,每个菜单含有若干菜单项,分别执行不同的操作。
2.工具栏
主工具栏位于菜单栏的下方包括菜单中提供的常用操作,提供一种快捷访问 Eclipse 功能的
方法。主工具栏中的组成部分可以定制。除主工具栏外,还有视图工具栏和快捷工具栏。在某
些视图中包含了视图工具栏,列出了视图中的主要操作。快捷工具栏在默认情况下位于透视图
的最下方,可以帮助开发人员快速访问各种视图。
3.包资源管理器视图
包资源管理器视图显示所创建的 Java 项目的层次结构,包括 Java 项目所在的文件夹、包
含的包(package)、每个包里含有的源文件名称、每个源文件中包含的类及其方法等。用鼠标
拖动包资源管理器视图,可以改变包资源管理器视图的位置(其他视图也是如此)。
4.层次结构视图
层次结构视图显示所创建的 Java 源文件中类的层次结构,它由两部分组成:一部分显示
Java 项目中选定的类的层次结构;另一部分显示该类的成员,包括成员变量和成员函数。开发
人员可以用层次结构视图查看 Java 项目中的类、子类以及父类。
5.编辑器视图
编辑器视图(图 1-18 中间部分)是进行代码编写和调试的核心区域,除了一般的编辑功
能以外,它还提供了丰富的编辑命令和展示方式(例如用不同的颜色显示不同的代码),开发
人员可以通过编辑器视图编辑不同格式的代码(Java、JSP、XML 等),并且可以设置程序断点
等,方便程序调试。在编辑程序代码时,编辑器视图中会随时显示出各种语言提示,帮助开发
人员提高代码的编辑质量。
6.大纲视图
大纲视图显示当前打开的文件的大纲。对应于 Java 源文件的大纲视图包括所有类以及类的
成员变量和成员函数,开发人员可以用它来査看程序的基本结构,并且可以通过单击视图中的
类或成员,快速定位到编辑器视图中程序的相应代码部分。
7.任务列表视图
任务列表视图提供了任务管理功能,开发人员可以用任务列表视图来管理自己的工作,例
如,可以将自己要做的工作分门别类地组织起来,安排时间计划,Eclipse 系统会自动对任务进
20
Java 程序设计基础
行提醒,使开发人员对自己已经做过的工作和没有做的工作一目了然。
8.其他视图
其他视图(图 1-18 中的左下角部分)会根据项目开发、运行和调试进程进行显示。常见
的视图有问题视图、JavaDoc 视图、声明视图、控制台视图等,分别用于帮助开发人员査看程
序存在的问题、Java 源程序中的程序注释、全局变量声明、运行结果等。
1.3.5 用 Eclipse 开发 Java 应用程序
使用 Eclipse 开发 Java 应用程序的基本步骤为:建立 Java 项目代码;建立 Java 类;编写
相应代码;调试和运行;如有需要,也可以生成可运行的 JAR 文件。
下面以 WelcomeToJava . java 为例,简要说明开发过程。
① 选择 File→New→Java Project 命令,如图 1-19 所示,弹出 New Java Project 对话框。
② 在 New Java Project 对话框的 Project name 文本框中填写项目名称 WelcomeToJava,如
图 1-20 所示,此后单击 Finish 按钮,Eclipse 进入 Java 透视图,这时 D:\\Java\\Program 目录下
会多出子目录 WelcomeToJava。
图 1-19 新建 Java Project 的菜单操作 图 1-20 New Java Project 对话框
③ 右击 Package Explorer 中对应项目的名称,选择快捷菜单中的 New→Class 命令,也就是
新建一个 Java 类,如图 1-21 所示,弹出 New Java Class 对话框。
④ 在 New Java Class 对话框中,在 Name 文本框中输入类名 WelcomeToJava,同时选中 Which
method stubs would you like to create?下面的 public static void main(String[] args)复选框,表示要自
动创建一个主函数,如图 1-22 所示,单击 Finish 按钮,Eclipse 进入 Java 透视图并显示出编辑
器视图。
21
第 1 章 Java 概述
图 1-21 新建 Java 类的菜单操作 图 1-22 New Java Class 对话框
⑤ 编辑器视图中输入代码,如图 1-23 所示。
图 1-23 编辑器里编写的第一个程序代码
⑥ 选择 Run→Run As→Java Project 命令,Eclipse 提示保存资源,单击 OK 按钮,源程序
WelcomeToJava。java 被保存在 D:\\Java\\Program\\WelcomeToJava \\src 目录下,控制台视图会显示
程序运行结果,如图 1-24 所示,表明程序运行正确。这时在 D:\\JAVA\\ program\\WelcomeToJava
\\bin 目录下会生成 WelcomeToJava.class 文件。如果 Java 源程序中存在错误,控制台视图会给出
提示,同时,问题视图也会列出错误所在。
图 1-24 程序运行结果
22
Java 程序设计基础
小 结
本章主要介绍 Java 的历史、Java 的特点、Java 运行基本原理、Java 程序的类型、面向对象
的基本思想、面向对象的发展过程、面向对象的特点、JDK 环境配置和 Eclipse 配置。
习 题
一、选择题
1.作为 Java 应用程序入口的 main()方法,其声明格式是( )。
A.public static int main(String args[]) B.public static void main(String args[])
C.public void main(String args[]) D.public int main(String args[])
2.下面命令正确的是( )。
A.java AppFirst.java B.java AppFirst
C.java appfirst.class D.javac AppFirst
3.设有一个 Java 小程序,源程序名为 FirstApplet.java,其 HTML 文件为 FirstApplet.html,
则运行该小程序的命令为( )。
A.java FirstApplet B.javac FirstApplet.java
C.appletviewer FirstApplet.java D.appletviewer FirstApplet.html
4.JDK 安装完成后,主要的命令如 javac、java 等,都存放在根目录的( )文件夹下。
A.bin B.jre C.include D.doc
5.Java 是一种( )语言。
A.机器 B.汇编 C.面向过程的 D.面向对象的
6.Java 程序的最基本组成单位是( )。
A.函数 B.过程 C.变量 D.类
7.在 Java 语言中,不允许使用指针体现出的 Java 特性是( )。
A.可移植性 B.解释执行 C.健壮性 D.动态性
8.保证 Java 可移植性的特征是( )。
A.面向对象 B.安全性 C.分布式计算 D.可跨平台
9.Java 语言中负责并发管理的机制是( )。
A.垃圾回收 B.虚拟机 C.代码安全 D.多线程
10.下列关于字节码的说法不正确的是( )。
A.字节码是一种二进制文件
B.可以看作虚拟机的机器码
C.可以直接在操作系统上运行
D.Java 程序首先由编译器转换为标准字节码
11.程序的执行过程中用到一套 JDK 工具,其中 javac. exe 是指( )。
23
第 1 章 Java 概述
A.Java 编译器 B.Java 解释器
C.Java 文档生成器 D.Java 类分解器
12.JDK 目录结构中不包含( )目录。
A.Inntpub B.bin C.demo D.lib
13.Java 语言的执行模型是( )。
A.全编译型 B.全解释型
C.半编译和半解释 D.同脚本语言的解释模式
二、填空题
1. 文件是由 Java 编译器自动生成的,它伴随着每个类。
2.Java 源文件中最多只能有一个 类,其他类个数不限。
3.一个 Java 源文件中有三个类定义,经编译后会生成 个字节码文件。
4.Java 有两个类型的应用程序,它们是 和 。
5.Java API 中的工具包是 。
6.每个 Java 应用程序可以包含许多方法,但必须有且只能有一个 方法。
三、简答题
1.Java 语言有哪些特点?
2.JDK 安装完成后,如何设置环境变量?
3.简述 Java 应用程序和小应用程序的区别。
4.简述 Java 应用程序的开发过程。
24
Java 程序设计基础
基本语法是所有编程语言的基础知识,也是程序代码不可或缺的重要组成部分。要想编写
规范、可读性强的 Java 程序,必须了解和掌握 Java 的基本语法知识。本章详细介绍了 Java
语言基本语法的各个组成部分,主要包括标识符、关键词、Java 基本数据类型、运算符、控制
语句和数组等。
2.1 标识符及关键词
2.1.1 标识符
用来表示类名、变量名、方法名、类型名、数组名和文件名等的有效字符序列称为标识符。
简单地说,标识符就是一个名字,它可以由编程者自由指定,但是需要遵循一定的语法规定。
Java 对于标识符的定义有如下的规定:
① 标识符可以由字母、数字和两个特殊字符下画线“_”、美元符号“$”组合而成,并
且标识符的长度不受限制。
② 标识符必须以字母、下画线或美元符号开头。
③ 不能把关键词和保留字作为标识符。
这里要注意两点:一是 Java 区分大小写,varname 和 Varname 分别代表不同的标识符;二
是 Java 使用 Unicode 国际标准字符集,故标识符中的字母还可能是汉字、日文片假名、平假
名和朝鲜文等。
Java 除了对标识符的语法规则作了定义,还对标识符的命名风格作了如下约定:
①“_”和“$”不作为变量名、方法名的开头,因为这两个字符对于内部类具有特殊意义。
② 变量名、方法名首单词小写,其余单词只有首字母大写,例如 JavaClass。而接口名、
类名首单词第一个字母要大写,例如 JavaClass。
③ 常量名完全大写,并且用“_”作为标识符中各个单词的分隔符,例如:FIRST_NAME。
④ 方法名应使用动词,类名与接口名应使用名词。例如:
class JavaClass //定义一个类
interface JavaInterface //定义一个接口
javaMethod() //方法名称
标识符应能一定程度上反映它所表示的变量、常量、对象或类的意义。因此,变量名尽量
不用单个字符,但临时变量如控制循环变量可以用 m、i、j 等。
第2章 Java基本语法知识
25
第 2 章 Java 基本语法知识
2.1.2 关键词
Java 中一些被赋予特定含义用作专门用途的字符序列称为关键词,包括:
① 数据类型:boolean、byte、short、int、long、double、char、float。
② 包引入和包声明:import、package。
③ 用于类和接口的声明:class、extends、implements、interface。
④ 流程控制:if、else、switch、do、while、case、break、continue、return、default、for。
⑤ 异常处理:try、catch、finally、throw、throws。
⑥ 修饰符:abstract、final、native、private、protected、public、static、synchronized、transient、
volatile。
⑦ 其他:new、instanceof、this、super、void、assert、const、enum、goto、strictfp。
关键词 const 和 goto 被保留但不被使用。关键词 assert 是由 Java2 的 1.4 版本添加的。除了关
键词外,Java 还保留了下面几个字:true、false 和 null,这是 Java 定义的值,不能作为标识符。
2.1.3 语句及注释
1.语句与语句块
Java 中以“;”为语句的分隔符。一行内可以写若干语句,一个语句可写在连续的若干行。
例如:
a=c+d;e=3+d;g=7+f;
System.out.println("Welcome to JAVA.");
2.注释
注释是程序不可少的部分,Java 中有三种注释。
① 行注释符“//”,表示从“//”开始到行尾都是注释文字。
② 块注释符/ *...*/,注释一行或多行,表示“/ *”和“* /”之间的所有内容都是注释。
③ 文档注释符/**...* /,表示“/**”和“* /”之间的文本将自动包含在用 javadoc 命令生
成的 HTML 文件中。
2.2 数 据 类 型
Java 是一种强类型语言,这意味着每个变量和表达式都有一个类型,每个类型都被严格定
义,而且所有的赋值语句(不管是显式赋值的还是通过参数在方法调用中传递的)都要经过类
型兼容性检査。在 Java 中没有冲突类型的自动转换,编译器检查所有表达式和参数以保证类型
是兼容的,任何类型的不匹配都是错误的,必须在编译器编译之前更正。Java 的数据类型只有
两类:基本数据类型与引用数据类型。
2.2.1 基本数据类型
基本数据类型有 4 种,共 8 个。
26
Java 程序设计基础
① 整型:包括 byte、short、int 和 long,用于整数值的有符号数字。
② 浮点型:包括 float 和 double,表示带有小数的数字。
③ 字符:包括 char,表示在一个字符系列中的符号,如字母和数字。
④ 布尔型:包括 boolean,它是一个表示真/假的特殊类型。
所有基本数据类型的大小(所占用的字节数)都已明确规定好,在各种不同的平台上都
保持一致,这一特性有助于提高 Java 程序的可移植性。各个基本数据类型的大小及取值范围
如表 2-1 所示。
表 2-1 基本数据类型定义表
数 据 类 型 关 键 词 占 用 位 数 默 认 数 值 取 值 范 围
字节型 byte 8 0 -128~127
短整型 short 16 0 -32 768~32 767
整型 int 32 0 -2 147 483 648~2 147 483 647
长整型 long 64 0
-9 223 372 036 854 775 808~
9 223 372 036 854 775 807
浮点型 float 32 0. 0F
1. 401 298 464 324 817 07e-45~
3. 402 823 466 385 288 60e+38
双精度型 double 64 0. 0D
4. 940 656 458 412 465 44e-324~
1. 797 693 134 862 315 70e+308d
字符型 char 16 '\\u 0000' '\\u 0000'~'\\u FFFF'
布尔型 boolean 8 false true、false
2.2.2 引用数据类型
基本数据类型并不是对象层次的一部分,它们只能以传值的方式传递,不能直接通过引用
来传递。 同样,也无法做到多个方法引用同一个数据类型的实例。因此,Java 中对应每一个基
本数据类型,都有一个类来包装它。例如,对应基本的 double 类型,还存在一个类 Double。 这
些类在包含基本数据类型所表示的一定范围、一定格式数值的同时,还包含了一些特定的方法,
可以实现对数值的专门操作,如把字符串转换程成双精度数组等。
所以,除了基本数据类型外,还有一种数据类型就是引用数据类型,例如,类、接口、数
组和字符串等。这些将在后面的章节中详细介绍。
2.3 常量与变量
2.3.1 常量
所谓常量,是指在程序运行的整个过程中其值始终不可以改变的量。Java 中的常量有布尔
常量、整型常量、浮点常量、字符常量、字符串常量。
27
第 2 章 Java 基本语法知识
1.布尔常量
布尔常量只有两个:true 和 false,分别代表真和假。
2.整型常量
整型常量即以数码形式出现的整数,包括正整数、负整数和 0,可以采用十进制、八进制
和十六进制表示。十进制的整型常量用非 0 开头的数值表示,如 54、-1121;八进制的整型常
量用 0 开头的数字表示,如 012 代表十进制数字 10;十六进制整型常量以 0x 开头的数字表示,
如 0x12 代表十进制的数字 18。整型常量按照所占用内存长度,又可分为一般整型常量和长整
型常量,其中,一般整型常量占用 32 位,长整型常量占用 64 位。长整型常量尾部有一个后缀
字母 L(或 l),如 887L、0x676l。
3.浮点常量
浮点常量表示的是可以含有小数部分的数值常量。根据占用内存长度的不同,可以分为一
般浮点常量和双精度浮点常量两种。一般浮点常量占用 32 位内存,用 F(或 f)做后缀,如
43.4F、3.14f;双精度浮点常量占用 64 位内存,用带 D(或 d)或不加后缀的数值表示,如 15.77d、
3.14159。与其他高级语言类似,浮点常量还有一般表示法和指数表示法两种不同的表示方法,
如 3.1467E-5D、4.565E3f。
4.字符常量
字符常量是单引号括起来的一个字符。Java 采用 16 位的
Unicode 字符集,所有可见的 ASCII 字符都可以作为字符常量,
如'a'、'2'、'@'。此外,字符常量还可以是转义字符。转义字符
是一些有特殊含义、很难用一般方式表达的字符,如回车符、
换行符等。为了表达清楚这些特殊字,Java 中引入了一些特别
的定义。所有的转义字符都用'\\'开头,后面跟着一个字符来表
示某个特定的转义字符,如表 2-2 所示。
表 2-2 中,'\\ddd'是用八进制表示一个字符常量,'\\uxxxx'
是用十六进制表示字符常量。
例如,八进制'\\101'、十六进制'\G '和' A'表示的是同一
个字符,作为常量它们是相同的。需要注意的是,八进制表示
法只能表示'\\000'~'\\377'范围内的字符,即不能表示全部的
Unicode 字符,只能表示其中 ASCII 字符集的部分。
5.字符串常量
字符串常量是用双引号括起的一串若干字符(可以是 0 个),可以包括转义字符和八进制/
十六进制符号。Java 中标志字符串开始和结束的双引号必须在源代码的同一行上。下面列举几
个字符串常量的例子:"good"、"you are a good man?"、"this\
Java"、" "。在 Java 中可以使用连
表 2-2 转义字符表
引 用 方 法 功 能
\\b 退格
\\t 水平制表符 Tab
\
换行
\\f 换页
\
回车
\\" 双引号
\\' 单引号
\\\\ 反斜杠
\\ddd 八进制字符常量表示
\\uxxxx 十六进制字符常量表示
28
Java 程序设计基础
接操作符“+”把两个或更多的字符串常量串接在一起,组成一个更长的字符串。例如,"我是
中国人"+"\
"的结果是"我是中国人\
"。需要注意的是,在 C/C++中字符串是作为字符数组实现
的,而 Java 中字符串是作为对象实现的。Java 包含大量的字符串处理功能,这些功能非常强大
且易于使用。
2.3.2 变量
1.变量的定义与声明
在 Java 程序中变量是最基本的存储单元。变量必须先声明后使用,声明时要指明变量的数
据类型和变量名称,必要时还可以指定变量的初值。下面是几个变量声明的例子:
int x=432;
char c='u';
int i=1,k=3,j;
float f=3.14f;
String s="中国人";
Circle c; //Circle 为自定义的类,c 为该类的一个对象引用
需要注意的是,类变量的初始值是系统自动进初始化的,而局部变量必须在使用前由用户
显式地对初值进行初始化,否则编译器就会产生编译错误。
2.变量类型
Java 中的数据类型分为基本数据类型和引用数据类型两种,相应的,变量也有基本类型和
引用类型两种。前面介绍的 8 种基本类型的变量称为基本类型变量,而类、接口、数组、字符
串都是引用数据类型变量。这两种数据类型变量的结构和含义不同,系统对它们的处理也不同。
基本数据类型在变量声明时,系统直接给它分配了数据空间,空间中存放的就是初始化的
数值。例如,int a=55 的内存分配如图 2-1(a)所示。引用类型变量在声明时,系统只给它分
配一个引用空间,而没有分配数据空间。因此,引用类型变量声明后不能直接引用,必须通过
实例化开辟数据空间,才能够对变量所指向的
对象进行访问。例如,有一个表示坐标的类
Point,它有 x 和 y 两个成员变量,分別表示 x
坐标和 y 坐标,它的对象 point 创建和实例化
过程如下:
Point point; //声明
point=new Point(); //赋值
系统执行第一条语句,将为 point 变量分配
一个引用空间,如图 2-1(b)所示。第二条语
句分为两步执行:首先执行 new Point(),给变
量 point 开辟数据空间,如图 2-1(c)所示,
然后执行赋值操作,将数据空间的首地址存入
变量 point 中,如图 2-1(d)所示。
基本数据类型的变量赋值是数值的复制,图 2-1 基本数据类型与引用类型变量的内存分配图
29
第 2 章 Java 基本语法知识
而引用类型变量之间的赋值是引用的复制,不是数据的复制。例如,下面的语句执行后,内存
的变化如图 2-2 所示。
int x=6,y;
y=x;
Point point1, point2;
point1=new Point();
point2=point1;
(a) (b)
图 2-2 基本数据类型与引用类型变量的赋值内存分配图
3.变量的作用域
Java 中所有的变量都有一个作用域,这个作用域定义了它们的可见性和生命周期。在 Java
中,两个主要的作用域是由类定义的作用域和由方法定义的作用域。类作用域有几个特殊的特
性和属性,这些特性和属性不适用于由方法定义的作用域。关于类的作用域将在后面讨论类时
具体介绍,这里仅讨论由方法定义或在方法内定义的作用域。
由方法定义的作用域是被一对花括号括起来的语句块,如果该方法带有参数,它们也被包
括在此方法的作用域内,因此,每开始一个新的语句块就是在创建一个新的作用域,同时也决
定对于程序的其他部分哪些对象是可见的。
一般来讲,作用域是可以嵌套的,外部的作用域封装了内部的作用域,这意味在外部作用
域内声明的对象对于内部作用域的代码来说是可见的,而内部作用域声明的对象对其作用域外
定义的代码是不可见的。但是要注意,不能声明一个与外部作用域变量同名的变量,在这方面,
Java 与 C/C++不同。
在一个语句块内,可以在任何地方声明变量,但是这些变量仅在声明之后才能有效。因此,
如果在一个方法的开始处声明一个变量,对于在那个方法内的所有代码来说,它都是可用的。
反之,如果在一个方法的末尾处声明一个变量,则它是无用的,因为没有代码可以访问它。
2.4 运算符与表达式
Java 提供了丰富的运算符环境,它的大多数运算符可以分成下面 4 组:算术运算符、位运
算符、关系运算符和逻辑运算符。Java 也定义了一些处理特殊情况的附加运算符。
2.4.1 算术运算符及表达式
算术运算是针对数值类型操作数进行的运算。算术运算符根据操作数个数的不同,可以分
为双目运算符和单目运算符两种。
30
Java 程序设计基础
1.双目运算符
有两个操作数的运算符称为双目运算符。常用的双目算术运算符有 5 个,如表 2-3 所示。
表 2-3 双目算术运算符
运 算 符 运 算 例 子 功 能
+ 加 a+b 求 a 与 b 相加的和
- 减 a-b 求 a 与 b 相减的差
* 乘 a*b 求 a 与 b 相乘的积
/ 除 a/b 求 a 除以 b 的商
% 取余 a%b 求 a 除以 b 所得的余数
算术运算符的操作数必须是数字类型的,布尔类型不能使用它们,但是 char 类型可以使用
它们。这是因为,Java 中的 char 类型,本质上是 int 类型的一个子集。此外,两个整型的数据
做除法时,结果是截取商的整型部分,而小数部分被截断,如果希望保留小数部分,则应该对
除法运算的操作数做强制类型转换。例如,1/4 的结果是 0,而((float)1)/4 的结果是 0.25。还要
注意一点,Java 中的取余运算可以应用于浮点类型和整型,而 C/C++中取余运算只能用于整型。
2.单目运算符
只有一个操作数的运算符是单目运算符。常用的单目算术运算符有 3 个,如表 2-4 所示。
表 2-4 单目算术运算符
运 算 符 运 算 例 子 功 能
++ 自增 a++或++a a=a+1
-- 自减 a--或--a a=a-1
- 求相反数 -a a=-a
单目运算符中的自增和自减,其运算符的位置可以在操作数前面,也可以在操作数后面。
当进行单目运算的表达式位于一个更复杂的表达式内部时,单目运算符的位置将决定单目运算
与复杂表达式二者执行的先后顺序。例如下面的例子里,单目运算符在操作数变量的前面,则
先执行单目运算,修改变量的值后用这个新值参与复杂表达式的运算。
int i=5;
int j=(++i)*3;
运算的结果是 i=6,y=18。
而在下面的例子里,由于单目运算符放在操作数变量的后面,则先计算复杂表达式的值,
然后再修改变量的取值。
int i=5;
int j=(i++)*3;
运算的结果是 i=6,y=15。可见,单目运算符的位置不同,虽然对操作数变量没有影响,
但却会改变整个表达式的值。
31
第 2 章 Java 基本语法知识
2.4.2 关系运算符及表达式
关系运算符决定一个操作数与另一个操作数之间的关系。特别地,它们可以判断相等不相
等以及排列次序,常用的关系运算如表 2-5 所示。
表 2-5 关系运算符
运 算 符 运 算 例 子 功 能
== 等于 a == b 判断 a 是否等于 b
!= 不等于 a ! = b 判断 a 是否不等于 b
> 大于 a>b 判断 a 是否大于 b
< 小于 a<b 判断 a 是否小于 b
>= 大于等于 a>=b 判断 a 是否大于等于 b
<= 小于等于 a<=b 判断 a 是否小于等于 b
关系运算的结果是布尔型量,即“真”或“假”。关系运算符经常使用在控制语句和各种循
环语句表达式中。 Java 中的任何类型,包括整型、浮点型、字符和布尔型都可以使用“==”
来比较是否相等,使用“!=”来测试是否不相等(注意,相等用两个等号表示,一个等号表
示赋值运算符)。仅仅数字类型可以使用关系运算符进行比较,即只有整数、浮点数和字符操
作数可以被比较大小。
2.4.3 逻辑运算符及表达式
逻辑运算是针对布尔数据进行的运算,运算的结果仍然是布尔数据。常用的逻辑运算符如
表 2-6 所示。
表 2-6 逻辑运算符
运 算 符 运 算 例 子 运 算 规 则
& 非简洁与 x & y x、y 都真时结果才为真
| 非简洁或 x|y x、y 都假时结果才为假
! 取反 !x x 真时为假,x 假时为真
^ 异或 x^y x、y 同真或同假时结果为假
&& 简洁与 x&&y 只要 x 为假则结果为假,不用计算 y,只有 x、y 都真时结果才为真
|| 简洁或 x||y 只要 x 为真则结果为真,不用计算 y,只有 x、y 都假时结果才为假
“&”和“|”称为非间接运算符,因为在利用它们做与、或运算时,运算符左右两边的表达
式总会被运算执行,然后再对两个表达式的结果进行与、成运算;而在利用“&&”和“||”做
简洁运算时,运算符右边的表达式有可能被忽略而不执行。例如:
int i=8,j=10;
boolean z=i>j&&i++==j--;
在计算布尔变量 z 的取值时,先计算“&&”左边的关系表达式 i>j,得结果为假,根据逻
辑与运算的规则,只有参加与运算的两个表达式都为真时,最后的结果才为真,所以不论“&&”
右边的表达式结果如何,整个表达式的值都为假,右边的表达式就不予执行运算了。最后三个
变量的取值分别是:i=8,j=10,z=false。
32
Java 程序设计基础
如果把上面代码中的简洁与“&&”换成非简洁与“&”,则左右两边的两个表达式都会被
运算,最后三个变量的取值分別是:i=9,j=9,z=false。
同理,对于简洁或“||”,若左边表达式的运算结果为真,则整个或运算的结果一定为真,
右边的表达式就不会再执行运算。
2.4.4 位运算符及表达式
位运算是对操作数以二进制比特位为单位进行的操作和运算。参与运算的操作数只能是 int
或 long 类型,其他数据类型参与运算时要转换成这两种类型。几种位运算符和相应的运算规则
如表 2-7 所示。
表 2-7 位运算符
运 算 符 运 算 例 子 运 算 规 则
~ 按位非 ~x 将 x 按比特位取反
& 按位与 x&y 将 x 和 y 按比特位做与运算
| 按位或 x l y 将 x 和 y 按比特位做或运算
^ 按位异或 x^y 将 x 和 y 按比特位做异或运算
>> 右移 x>>a x 各比特位右移 a 位
<< 左移 x<<a x 各比特位左移 a 位
>>> 不带符号的右移 x>>>a x 各比特位右移 a 位,左边的空位一律填 0
2.4.5 赋值运算符及表达式
在 Java 中,赋值运算符“=”是一个双目运算符,结合方向为从右向左,用于将赋值符右
边操作数的值赋给左边的变量,且这个值是整个运算表达式的值。若赋值运算符两边的类型不
一致,且右边操作数的类型不能自动转换到左边操作数的类型时,则需要进行强制类型转换。
此外,Java 还规定了 11 种复合赋值运算符,如表 2-8 所示。
表 2-8 复合赋值运算符
运 算 符 运 算 例 子 功 能 等 价
+= 加法赋值 x += a x=x+a
-= 减法赋值 x -= a x=x-a
*= 乘法赋值 x *= a x=x*a
/= 除法赋值 x /= a x=x/a
%= 取余赋值 x %= a x=x %a
&= 按位(逻辑)与并赋值 x &= a x=x&a
|= 按位(逻辑)或并赋值 x |= a x=x|a
^= 按位(逻辑)异或并赋值 x ^= a x=x^a
<<= 向左移位并赋值 x<<= a x=x<< a
>>= 向右移位并赋值 x>>= a x=x>> a
>>>= 不带符号向右移位并赋值 x>>>=a x=x>>> a
33
第 2 章 Java 基本语法知识
2.4.6 其他运算符及表达式
1.三目条件运算符
Java 中定义了一个特殊的三目运算符,可以取代某些类型的 if 语句,它的用法与 C 语言中
完全相同,使用形式是 x?y:z,其规则是:先计算表达式 x,若 x 为真,则整个三目运算的结果
为表达式 y 的值;若 x 为假,则整个运算的结果为表达式 z 的值。例如:
int x=1;
int k=x<3?1:-1;//x<3 为真,k 的值为 1
2.括号与方括号
括号运算符“( )”在某些情况下起到改变表达式运算先后顺序的作用,在另一些情况下代
表方法或函数的调用,它的优先级在所有的运算符中是最高的。方括号运算符“[]”是数组运
算符,它的优先级也很高,其具体使用方法将在后面介绍。
3.对象运算符
对象运算符 instanceof 用来测定一个对象是否是某一个指定类或其子类的实例,如果是则
返回 true,否则返回 false。
2.4.7 运算符的优先级与结合性
运算符的优先级决定了表达式中不同运算执行的先后顺序,如关系运算符的优先级高于逻
辑运算符,x> y && !z 相当于( x> y) && ( ! z);运算符的结合性决定了并列的相同运算的先后执
行顺序,如对于左结合的“+”,x+ y+ z 等价于( x+ y)+ z;对于右结合的“!”,!!x 等价于! ( ! x)。
表 2-9 列出了 Java 主要运算符的优先级和结合性。
表 2-9 Java 主要运算符的优先级和结合性
运 算 符 优 先 级 结 合 性
[ ] . ( ) (方法调用) 1 从左向右
! ~ ++ -- +(一目运算)-(一目运算) 2 从右向左
* / % 3 从左向右
+ - 4 从左向右
<< >> >>> 5 从左向右
< <= > >= instanceof 6 从左向右
== != 7 从左向右
& 8 从左向右
^ 9 从左向右
| 10 从左向右
&& 11 从左向右
|| 12 从左向右
?: 13 从右向左
= 14 从右向左
34
Java 程序设计基础
2.4.8 数据类型转换
有编程经验的人都知道,将一种数据类型的值赋给另一种数据类型的变量是经常会发生的。
这时就会涉及数据类型的转换。如果两种类型兼容,那么 Java 将会自动转换,例如把 int 型的
值赋给 long 型变量,然而,并不是所有的类型都是兼容的,既不是所有的转换都能自动执行。
下面就来看看 Java 数据类型之间的转换。
1.Java 的自动转换
自动类型转换又称拓宽转换(Widening Conversion),或隐式转换。当把一种数据类型赋给
另一种数据类型的变量时,如果两种类型是兼容的并且目标类型比源类型大,那么就会发生自
动类型转换。此时要注意:byte、short、int 都是有符号的数,因而自动转换时(如转换到 long)
要进行符号位扩展;int 转换到 float 或 long 转换到 double,很可能会造成精度损失;byte 和 char、
byte 和 boolean、char 和 boolean 类型不兼容,不能互相转换。
Java 中还有一种经常发生的自动类型转换是表达式中类型的自动提升。在一个表达式中,
中间值所要求的精度有时会超过操作数的范围,为此,编译程序在计算表达式时自动对操作数
进行提升。Java 定义了几个适合表达式提升的原则:首先,所有的 byte、short 和 char 型值都
被提升为 int 型;如果表达式中有一个操作数是 long 型,则整个表达式被提升为 long 型;如果
一个操作数是 float 型,则整个表达式被提升为 float 型;如果任何一个操作数是 double 型,则
结果为 double 型。
2.Java 的强制转换
尽管 Java 能够进行自动转换,但是它们并不能满足所有的要求。例如,要把一个 int 型值
赋给 byte 型变量,由于 byte 型比 int 类型小,转换不能自动执行,这时就要进行强制转换。
这种转换又称缩小转换(Narrowing Conversion),因为显式地使值变小以便它适合目标类型。
强制转换时需要注意几个问题:大多数情况下转换会丢失信息,当把浮点值赋给整型变量时会
舍去小数部分,若整数部分数值太大而不能适合目标类型时,那么它的值会因为对目标类型值
域取模而减小;char 型变量强制转换到 short 型时,将 char 型变量的两个字节(16 位)直接
放入到 short 型中;boolean 型变量不能与任何类型转换;byte 型变量转换到 char 型期间自动
转换和强制转换同时发生,其转换过程是先将 byte 型自动转换到 int 型,再将 int 型强制转
换到 char 型。
【例 2.1】 数据类型转换示例。
public class DataTypeConversion{
public static void main(String[] args){
short s=56;
long l;
double d=123.5;
System.out.println("short 型向 long 型进行自动类型转换-->");
l=s;
System.out.println("s="+s+"l="+ l);
System.out.println("double 型向 long 型强制转换-->") ;
35
第 2 章 Java 基本语法知识
l=(long)d;
System.out.println("d="+d+"l="+l);
s=100;
l=200;
d=4.5333;
char c='c';
int i=10;
float f=44.4f;
System.out.println("以下自动提升为 double 类型-->");
double r=(f*d)+(i/c)-(d*s);
System.out.println("(f*d)+(i/c)-(d*s)"+r);
}
}
例 2.1 的运行结果如图 2-3 所示。
图 2-3 例 2.1 的运行结果
小 结
(1)关键字:是某种语言赋予了特殊含义的单词。
(2)保留字:是还没有赋予特殊含义,但是准备日后要使用的单词。
(3)标识符:其实就是在程序中自定义的名词。比如类名、变量名、函数名。包含 0~9、
a~z、$、_。注意:①不可以数字开头。②不可以使用关键字。
(4)常量:是在程序中的值不会变化的数据。
(5)变量:其实就是内存中的一个存储空间,用于存储常量数据。
作用:方便于运算。因为有些数据不确定。所以确定该数据的名词和存储空间。
特点:变量空间可以重复使用。
只要是数据不确定的时候,就可以定义变量。
变量空间的开辟需要的要素:①这个空间要存储什么数据?数据类型。②这个空间叫什么
名字?变量名称。③这个空间存储的第一个数据是什么? 变量的初始化值。
变量的作用域:作用域从变量定义的位置开始,到该变量所在的那对大括号结束。
(6)生命周期:①变量从定义的位置开始就在内存中存活了。②变量到达它所在的作用域
的时候就在内存中消失了。
(7)数据类型:
① 基本数据类型(8 种):byte、short、int、long、float、double、char、boolean。
36
Java 程序设计基础
② 引用数据类型(3 种):数组、类、接口。
级别从低到高为:byte、char、short(这三个平级)→int→float→long→double。
自动类型转换:从低级别到高级别,系统自动转换。
强制类型转换:把一个高级别的数值赋给一个比该数的级别低的变量。
掌握基本的运算符的使用原则。
习 题
一、选择题
1.下列属于合法的 Java 标识符的是( )。
A."fd" B.&5d8 C.-we D.saler
2.下列代表十六进制整数的是( )。
A.045 B.23 C.dd44 D.Ox54a
3.设“x=1,y=2,z=3”,则表达式“y+=z- -/++x”的值是( )。
A.3 B.3.5 C.4 D.4.5
4.下面程序段的输出结果为( )。
public class Test{
public static void main(String[] args){
System.out.println(89>>1) ;
}
}
A.44 B.45 C.88 D.90
5.Java 程序书写格式的描述中,正确的是( )。
A.不区分字母大小写
B.一个注释不可以分写在多行上
C.每个语句必须以“,”作为结束符 .
D.一行中可以既包含正常的 Java 语句,又包含注释
6.下列关于用户标识符的叙述中正确的是( )。
A.用户标识符中可以出现下画线和中画线(减号)
B.用户标识符中不可以出现中画线,但可以出现下画线
C.用户标识符中可以出现下画线,但不可以放在用户标识符的开头 。
D.用户标识符中可以出现下画线和数组,它们都可以放在用户标识符的开头
7.下列说法正确的是( )。
A.单精度浮点型和双精度浮点型的数据长度一样
B.可以对浮点数取模运算
C.整型常量不能用八进制表示,但是可以用十六进制表示
D.实型常量只能用十进制形式表示
8.下面标识符中错误的是( )。
37
第 2 章 Java 基本语法知识
A.Javaworld B._sum C.2Java Program D.$abc
9.下列运算符的优先级顺序从高到低排列的是( )。
A.|、&.、! B.&、^、|| C.!、%、++ D.<、<<、++
10.下面赋值语句不会产生编译错误的是( )。
A.char a="abc"; B.byte b=152;
C.float c=2.0; D.double d=2.0;
11.下面是 Java 关键字的是( )。
A.False B.FOR C.For D.for
12.执行下面程序后,结论正确的是( )。
int a,b,c;
a=1;b=3;c=(a+b>3?++a:b++);
A.a 的值为 2,b 的值为 3,c 的值为 1
B.a 的值为 2,b 的值为 4,c 的值为 2
C.a 的值为 2,b 的值为 4,c 的值为 1
D.a 的值为 2,b 的值为 3,c 的值为 2
13.设各个变量的定义如下,则下列选项的值为 true 的是( )。
int a=3,b=3;
boolean flag=true;
A.++a = = b B.++a= = b++
C.(++a = = b) || flag D.(++a= =b) & flag
14.表达式(int)6.5/7.5*3 的值的类型为( )。
A.short B.int C.double D.float
15.设 a, b, x, y, z 均为 int 型变量,并已赋值,则下列表达式的结果属于非逻辑值的是
( )。
A.x>y && b<a B.-z>x-y C.y = = ++x D.y+x*x++
16.下面语句输出的结果为( )。
System.out.println(5^2);
A.6 B.7 C.10 D.25
17.对下面的语句执行完后正确的说法是( )。
int c='c'/3;
System.out.println(c);
A.输出结果为 21 B.输出结果为 22
C.输出结果为 32 D.输出结果为 33
18.以下选项中变量 a 已定义类型,合法的赋值语句为( )。
A.a = int(y); B.a= =1; C.a = a+1=3; D.++a;
19.执行下列程序段后,ch,x,y 的值正确的是( )。
int x=3,y=4;
boolean ch;
ch=x<y||++x==--y;
A.true,3,4 B.true,4,3 C.false,3,4 D.false,4,3
38
Java 程序设计基础
20.下列标识符中,正确的是( )。
A.1_Back B.$_Money C.$-money D.2-Forward
21.现有一个 int 型的整数和一个 double 型的浮点数,当它们之间做了加法运算之后,得
到的结果类型应该是( )。
A.int 型 B.double 型 C.float 型 D.long 型
22.以下程序的运行结果为 ( )。
public class A {
public static void main(String[] args) {
int x=2,y=5;
String z="5";
System.out.println(x+y);
System.out.println(x+z+"x+z");
System.out.println("x+y="+x+y);
System.out.println("x+z="+(x+z));
}
}
A.7 B.7 C.25 D.7
25x+z 7x+z 25x+z 25x+z
x+y=25 x+y=25 x+y=7 x+y=25
x+z=25 x+z=7 x+z=25 x+z=7
23.设有定义 int a=12;,则执行 a*=12;语句后,a 的值为( )。
A.144 B.12 C.24 D.0
24.下列标识符中合法的是( )。
A.$#@!$ B.$我们$ C.$22$ D.2$$2
25.执行下列程序段后,b, x, y 的值分别是( )。
int x=6,y=8;
boolean b;
b=x>y&&++x==--y;
A.true , 6, 8 B.false , 6, 8 C.e, 7, 7 D.false, 7, 7
26.下列程序的运行结果是( )。
public class A {
public static void main(String[] args) {
int x=7%3;
while(x){
x--;
}
System.out.println(x);
}
}
A.0 B.1 C.true D.编译错误
二、填空题
1.Java 中,移位运算符包括>>、<<和 。
39
第 2 章 Java 基本语法知识
2.如果两个操作数全是 byte 型或 short 型,则表达式的结果为 型。
3.在 Java 提供的 4 种整型变量中, 类型表示的数据范围最小。
4.定义并创建一个含有 7 个 float 型元素的数组 。
5.在 Java 中,由/** 开始,以*/结束的注释语句,可以用于生成 。
6.设有定义 int x=5;,则执行 x+=x+5 语句后,x 的值为 。
7.Java 逻辑常量有两个: 和 。
8.写出下列表达式的运算结果,设 a=2,b=-4,c=true。
(1)-a%b++
(2)a>=1 && a <= 10 ? a : b
(3)c^(a>b)
(4)(-a)<<a
(5)(double)(a+b)/5+a/b
9.比较两个数相等的运算符是 。
10.Java 中的 8 种基本数据类型分别是 char、 、 、 、 、
、 和 。
11.写出下列程序的运行结果。
public class Foo{
static int i=0;
static int j=0;
public static void main(String[] args){
int i=2;
int k=3;
int j=3;
System.out.println("i+j is"+i+j);
k=i+j;
System.out.println("k is"+k);
System.out.println("j is"+j);
}
}
三、编程题
声明一个 double 类型变量 d,一个 float 变量 f,d 的赋值为 43.4,f 的赋值为 8.55,计算平
方和。
40
Java 程序设计基础
就像有感知力的生物一样,程序也应该有能力操控它的世界,并且在执行过程中作决定。
Java 的运算符可以控制数据,而决定是由 Java 的控制语句来完成的。语句是 Java 的最小执行
单位,用于指示计算机完成某些操作。该操作完成后会把控制权转向另外一条语句。语句不同
于表达式,它没有值。语句间以分号(;)作为分隔符。Java 的控制语句分为顺序结构语句、选
择结构语句和循环结构语句。本章将详细介绍 Java 中的各种流程控制语句。
3.1 顺序结构语句
Java 顺序结构语句通常指书写顺序与执行顺序相同的语句。语句可以是单一的一条语句(如
x= y+ z;),也可以是用花括号{}括起来的语句块(也称复合语句)。
3.1.1 表达式语句
在 Java 程序中,表达式往往被用于计算某种值。但当表达式加上“;”后,它就变成了表
达式语句。
例如,下面一些表达式语句:
a=b;
int i=1;
System.out.println("good");
3.1.2 块语句
所谓“块”或“复合语句”,是指一对花括号“{”和“}”括起来的任意数量的语句组。
例如:
{
} //这是一个空块
{
Car car=new Car();
car.color="Red";
} //这是一个复合语句
块定义着变量的“作用域”。一个块也可嵌入另一个块内。
例如:
public static void main(String[] args){
char c1;
第3章 Java控制语句