logo资料库

自考04747《Java语言程序设计(一)》教材电子版.pdf

第1页 / 共177页
第2页 / 共177页
第3页 / 共177页
第4页 / 共177页
第5页 / 共177页
第6页 / 共177页
第7页 / 共177页
第8页 / 共177页
资料共177页,剩余部分请下载后查看
第1章java语言基础
1.1 Java 语言特点
1.2 Java应用程序和小应用程序
1.3 Java程序的开发过程
1.4 标识符和关键字
1.5 基本数据类型
第2章 运算和语句
2.1 数据运算
2.2 语句
第3章 面向对象编程基础
3.1面向对象的基本概念
3.2 Java的类和对象
3.3 接口
3.4 基本类
3.5 Java小应用程序基础
第4章 数组和字符串
4.1 数组
4.2字符串
(9)基本类型值的字符串表示
(10)字符串得到基本类型对象
(11)字符串得到基本类型值
基本类型值与基本类对象相互转换
第5章 图形界面设计(一)
5.1 图形界面设计基础
5.2 框架窗口
5.3 标签、按钮和按钮事件
5.4面板
5.5布局设计
5.6 文本框和文本区
第6章 图形界面设计(二)
6.1选择框和单选按钮
6.1.1选择框
6.1.2单选框
6.1.3 单选按钮
6.1.4 选择项目事件处理
6.2 列表和组合框
6.2.1 列表
6.2.2组合框
6.3 菜单
7.设置菜单项的快捷键
设置菜单快捷键之二
6.4 对话框
6.4.1 JDialog类
6.4.2 JOptionPane类
6.5 滚动条
6.6鼠标事件
6.6.1 MouseListener接口
6.6.2 MouseMotionListener接口
6.7 键盘事件
第7章 图形、图像与多媒体
7.1 绘图基础
7.2 绘图
7.3图像处理基础
7.3.1 图像载入和输出
7.3.2图像缓冲技术
7.4 多媒体基础
7.4.1播放幻灯片和动画
7.4.2播放声音
第8章 多线程
8.1 线程的基本概念
8.1.1 线程的生命周期
8.1.2线程调度与优先级
8.2 Thread类和Runnable接口
8.2.1 Thread类
2.用Thread子类实现多线程
8.2.2 Runnable接口
8.3 线程互斥和同步
8.3.1 线程互斥
8.3.2线程同步
第9章 输入和输出流
9.1 字节流和字符流
9.1.1 File对象
9.1.2 流对象
9.2 缓冲式输入输出
9.2.1缓冲式输入
9.2.2缓冲式输出
9.3 随机访问
9.4文件对话框
1. JFileChooser类的构造方法
2.JFileChooser类的其他常用方法
3.设置筛选条件
第10章 网络与数据库编程基础
10.1 Java网络编程基础
10.1.1 IP地址和InetAddress类
10.1.2 统一资源定位符URL
1. URL类
2.URLConnection类
3.信息的发送和接收
10.1.3 客户机/服务器模式
10.2 Java数据库编程基础
10.2.1 Java程序与数据库连接
1. 使用JDBC-ODBC 桥接器与数据库连接
用纯Java的JDBC驱动程序实现与数据库连接
(1) 加载驱动程序
(2) 创建指定数据库的URL
(3) 建立连接
10.2.2几个重要的类和接口
1. DriverManager类
2. Connection类
3. Statement类
4. ResultSet类
10.2.3数据库查询
10.2.4 数据库更新
1. 插入数据表记录
2. 修改数据表记录
3. 删除数据表记录
Java4747  第1章 java 语言基础 本章内容(一般掌握 3%~5%) 本章重点:应用程序和小应用程序的基础知识,程序的开发过程,基本数据类型。 本章难点:程序的开发过程,了解一种 Java 程序的开发环境。 1.1 Java 语言特点 Java 语言最初的应用对象是消费性电子产品(即 PDA 、电子游戏机、电视机顶盒之类的产品)。为了进入消费性电子 产品市场,SUN 公司专门成立了一个项目开发小组,目标是设计嵌在消费性电子产品的小型分布式系统软件,能够适用 于异构网络、多主机体系结构,能实现信息安全传递。项目小组的最初设想是用 C++语言完成这个目标。由于 C++语言的 复杂性和不安全性,不能胜任这项工作。为此,项目小组开发一个取名为 Oak 的语言。 Oak 语言在消费性电子产品市场上没有获得青睐。但在当时,Internet 开始流行,人们发明了一种网络传输协议, 这种协议可以在文本中插入图片和声音,能使单调的 Internet 世界变得图文并茂。虽然 Web 页面拥用图文和声音,但仍 然是静态的,不具备交互性。要让页面拥有动态画面,并能交互,需要在 Web 页面中嵌入一会段程序。由于在 Internet 上运行的数以千计不同类的计算机,这就要求编写这种程序的语言必须具有平台无关性,并要求语言必须简练,支撑环 境要小,而安全性却很高。Oak 语言恰好能够满足这些要求。 将 Oak 语言正式应用于 Internet 还需要进一步完善,还要求有一个支持它的 Web 浏览器。能用于编写浏览器,并 获得浏览器扶持的新版本 Oak 语言取名 Java。Internet 得到 Java 语言的支持,可以实现真正的交互,人们使用浏览器 能“漫游”丰富多彩的 Internet 世界。 Java 语言是适用于分布式计算环境的面向对象编程语言,它虽类似 C 和 C++,但比 C++简单,忽略了许多为提高计 算效率,初学者较难掌握的程序语言特性。 Java 语言主要有以下特点: 1. 强类型 Java 语言是一种强类型语言,强类型能约束程序员必须遵守更多的编程规定,也能让编译器检测出程序中尽可 能多的错误。 2. 编译和解释 Java 语言是一种高级编程语言,用 Java 语言编写的源程序在计算机上运行需经过编译和解释执行两个严格区分 的阶段。Java 语言的编译程序先将 Java 源程序翻译成机器无关的字节码(bytecode),不是通常的编译程序将源程 序翻译成计算机的机器代码。运行时,Java 的运行系统和链接需要执行的类,并作必要的优化后,解释执行字节码 程序。 3. 自动无用内存回收功能 Java 语言具有自动无用内存回收功能,程序可以按需使用内存,但不需要对无用内存显式地撤销分配。系统有 一个垃圾收集器(garbage collector),自动收集程序不再使用的内存。这样,能避免显式的撤销分配所引起的安全 问题。Java 语言不再含有任何不安全的语言成分。例如,没有指针,数组元素都要检查下标是否越界。 4. 面向对象 面向对象是程序员编写大型程序、有效控制程序复杂性的重要手段。Java 语言在面向对象方面,比 C++更“纯”, 它的所有数据类型,包括布尔类型、整形、字符型等,都有相应的类,程序可完全基于对象编写。 面向对象语言主要有封装性、继承性和多态性三个特点。封装就是将实现细节隐藏起来,只给出如何使用的信 息。数据及数据上的操作用类封装,对象是类的实例,外界使用对象中的数据及可用的操作受到一定的限制。继承 体现众多的一种层次对象的特性,下一层的类可从上一层的类继承定义,从上一层类派生的类的对象能继承上一层 对象的特性,同时可以改变和扩充一些特性,以适应其自身的特点。多态性的意义主要体现在逻辑上相同的不同层 次上的操作,使用相同的操作名,根据具体对象,能自动选择对应的操作。Java 语言很实用地实现了这三种特性。 5. 与平台无关 与平台无关是对程序可移植性最直接最有效的支持。Java 语言的设计者在设计时重点考虑了 Java 程序的可移植 性,采用多种机制来保证可移植性,其中最主要的是定义了一种虚拟机(virtual machine),以及虚拟机使用的 java 字节码。在任何平台上,Java 源程序被 Java 编译器编译成虚拟机能够识别的字节码。这样,只要有 Java 虚拟机的 平台,就能解释执行 java 字节码程序,从而实现 Java 与平台无关。另外,Java 语言还采用基于国际标准的数据类   1 / 177 
Java4747  型,在任何平台上,同上种数据类型是一致的。例如,用 int 标识 32 位二进制位(bit)整型数据,那么无论在哪一 台计算机上,Java 的 int 数据都是 32 位整数。相反,C 语言会随着硬软件平台的改变,用 int 标识的整数位数也可 能不全相同。 Java 语言提高可移植性的代价是降低程序的执行效率。出于 java 语言也是一种解释执行的语言,Java 程序的 执行速度与 C 程序的执行速度有较大的差别。不过,为了尽量弥补执行效率低的缺陷,java 的字节码在设计上非常 接近现代计算机的机器码,这有助于提高解释执行的速度。 6. 安全性 Java 是在网络环境中使用的编程语言,必须考虑安全性问题,主要有以下两个方面: 设计的安全防范:Java 语言没有指针,避免程序因为指针使用不当,访问不应该访问的内存空间;提供数组元 素上标检测机制,禁止程序越界访问内存;提供内存自动回收机制,避免程序遗漏或重复释放内存。 运行安全检查:为了防止字节码程序可能被非法改动,解释执行前,先对字节码程序作检查,防止网络“黑客” 对字节码程序已作了恶意改动,达到破坏系统的目的。最后,浏览器限制下载的小应用程序不允许访问本地文件, 避免小应用程序破坏本地文件。 7. 分布式计算 Java 语言支持客户机/服务器计算模式。Java 程序能利用 URL 对象,能访问网络上的对象,如同访问本地的文 件一样,实现数据分布。另外,Java 的客户机/服务器模式也可以把计算从服务器分散到客户机端,实现操作分布。 8. 多线程 线程是比进程更小的一种可并发执行的单位,每个进程都有自己独立的内存空间和其他资源,当进程切换时需 要进行数据和资源的保护与恢复。若干协同工作的线程可以共享内存空间和资源,线程切换不需要数据的保护与恢 复。 Java 的运行环境采用多线程实现,可以利用系统的空闲时间执行诸如内存回收等操作;Java 语言提供语言级多 线程支持,用 Java 语言能直接编写多线程程序。 1.2 Java 应用程序和小应用程序 Java 程序可以是独立的应用程序和能在浏览器上执行的小应用程序(Applet)。两种 Java 程序都由一个或多个扩展 名为“.class”的文件组成。都需要 java 虚拟机(JVM)载入并翻译。这两种程序的主要区别是:小应用程序只能在与 Java 兼容的容器中运行,可以嵌入在 HTML 网页内,在网络上发布,当网页被浏览时,在浏览器中运行。小应程序的运行还要 受到严格的安全限制,例如,它不能访问用计算机上的文件。Java 应用程序没有这些限制,也不支持网页嵌入和下载运 行。 小应用程序和应用程序在代码编写上也有很大差异。一个小应用程序必须定义成一个 Applet 类的子类,应用程序可 以是 Applet 类的子类,也可以不是。应用程序必须在一个类中定义一个 main()方法,该方法代表应用程序的入口。而 小应用程序不必定义 main()方法,它的执行由 Applet 类中定义的多个方法控制。 [例 1.1] 一个非常简单的应用程序。 public class Example1_1{//这是我的第一个应用程序 System.Out.println(“你好!欢迎你学习 Java 语言。”); public static void main(String []args){ } } 上述 java 程序的执行将输出以下字样: 你好!欢迎你学习 Java 语言。 一个应用程序由若干个类组成,上面这个应用程序只有一个类,类的名字是 Example1_1。public 是 java 语言的关 键字,表示声明的类 Example1_1 是公用的。class 也是关键字,用来声明类。最外层的一对花括号以及括号内的内容叫 做类体。public static void main(String []args)是类 Example1_1 的一个方法。一个应用程序必须只有一个类含有 main()方法,这个类是应用程序的主类。public static void 是对 main()方法的说明。应用程序的 main()方法必须被 说明成 public static void。表示 main()方法的访问权限是公有的,它是一个类方法,没有结果返回,参见第 3 章。String []args 或 String args[],声明 main()方法的参数是一个字符串数组,参见第 4 章。 Java 源程序命名受严格的限制。Java 源文件的扩展名必须是“.java”如果源文件中有多个类,那么只能有一个 public 类;如果源文件中有 public 类,那么源文件的名字必须与这个类的名字完全相同。例如,例 1.1 应用程序的源 文件名必须是 Example1_1.java。如果源文件没有 public 类,那么源文件的名字只要和某个类的名字相同即可。   2 / 177 
[例 1.2]一个简单的小应用程序,用一同颜色显示两行文字: 欢迎你学习 Java 语言。 只要认真学习,多上机实习,一定能学好 Java 语言。 Java4747  import java.applet.*; import java.awt.*; public class Example1_2 extends Applet{ } public void paint(Graphics g){ g.setColor(Color.blue);//设置显示的颜色为 blue g.drawString(“欢迎你学 Java 语言”,30,20); g.setColor(Color.red);//设置显示的颜色为 red g.drawString(“只要认真学习,多上机实习,一定能学好 Java 语言。”,30,50); } 一个小应用程序也出若干个类组成,其中必须有一个类,它继承系统提供的 Applet 类,这个类是小应用程序的主类。 主类必须是 public 的,源文件名必须与小应用程序的主类名相同。上述程序的源文件名必须是 Example1_2.java。小应 用程序的结构参见 3.5 节。 在结束这一节之前,先讨论一下程序中经常出现的注释。注释是程序中的说明文字,用于帮助阅读程序,它不是语 句,不会影响程序的执行效率。Java 语言的注释有三种形式: 行注释 // 变量 r 是贺的半径 块注释 /* 以下程序段是采用冒泡排序对数组元素实现从小到大排序 */ 文档注释 /* *类 Student 是学生类*/ 行注释用于简短地说明前面代码的意义或功能。注释内容至行末结束,不能跨行。 例如: int fontsize =30 ;//标题字体大小 块注释是多行注释,用于说明下面程序段的算法、功能等,块注释不可嵌套使用。 文档注释能被实用程序 javadoc 接受,它能自动生成程序的 HTML 文档。 1.3 Java 程序的开发过程 Java 程序的开发过程如图 1.1 所示。对于 Java 应用程序,先编写 Java 源程序,源程序经 Java 编译器编译后产生 码文件,最后由 Java 解释器解释执行字节码文件。对于小应用程序,先编写源程序,然后经 Java 编译器编译后,产生 字节码文件,最后由 Web 浏览器解释执行字节码文件。 以下以使用 SUN 公司提供的 Java JDK(java Developer’s Kit)为例,并假设 Java JDK 安装在 d:\java 目录下,则 在该目录下还应包含以下几个文件和子目录: (1) 子目录 d:\java\bin,这个子目录是 Java JDK 的核心,其中最主要的可执行文件有: 1) javac---编译器 2) java---解释器 3) jdb---调试器 4) appletviewer---java Applet 解释器 (2) 子目录 d:\java\lib,这个子目录存储的是函数库。 编写源程序时,使用一个文字编辑器,输入源程序文件,并保存。键入编译命令,使用 Java 编译器编译 Java 源程序。键入解释命令,通过解释器解释执行 Java 应用程序的字节码文件。对于小应用程序需通过支持 Java 的浏览器解释执行字节码文件。 设输入前面所述 Java 程序,源文件名为 Example1_1.java,保存在 D:\java 目录下。 Java 编译器的使用格式是: javac [选项] 源文件 例如,可用以下命令编译以上输入的 Java 应用程序: javac d:\java\Example1_1.java 编译时,可能编译器指定选项,java JDK 编译器的选项参见表 1-1。   3 / 177 
选项 -classpath<路径> -d<目录> -g -ng -nowarn -o -verbose Java4747  说明 引用类的路径表 编译后类文件存放的目录 生成调试信息表 不生成调试信息表 关闭编译器警告功能 优化类文件 显示编译过程中的详细信息 java [选项]类名[参数] Java 解释器 java.exe 用来解释执行 Java 类文件,解释器的使用格式为: 其中,类名指定的类必须是 main()方法的,即是一个 Java 应用程序。 对于使用开发环境情况来说,编辑源程序、编译、执行和调试直接使用环境提供的工具,使开发程序变得非常 简单。例如,使用 Eclipse 开发环境。在 eclipse 环境下开发 Java 程序的方法请参见附录 F。 1.4 标识符和关键字 如同别的程序语言一样,Java 语言也有基本符号,由基本符号按一定的构词规则构成标识符等基本词汇,再由基本 词汇和关键字按语言的句法构成 Java 程序。 1. 字符集 Java 语言使用 Unicode 字符集,共有 65535 个字符,包括: (1) 数字符 10 个(0~9)。 (2) 英文字母大、小写字符各 26 个(A~Z 和 a~z)。 (3) 下划线字符,美元符号。 (4) 文字字符,(汉字,日文片假名、平假名和朝鲜文字等)。 (5) 其他用于构成特殊符号的字符集。 2. 标识符 标识符用于命名程序对象。例如,类名、变量名、方法名等。Java 语言的标识符可以按以下规则任意命名: (1) 由字母(包括英文字母、下划线字符、美元字符、文字字符)和数字字符组成。 (2) 限定标识符的第一个字符不能是数字符。 例如,下列 4 个字符串都可以个为标识符: Boy_$、$63Girl、颜色、小伙子 而以下 4 个字符不能作为标识符: 46A、%Val、c+2、Hello! 前两是因为首字符不合理,后两个含有不允许在标识符中出现的字符。 除了按上述规则命名的习惯约定: 一般变量名、方法名用小写英文字母开头;文字和常数用大写字母命名;类名首字母用大写字母;包名 全部用小写字母。命名习惯是一种公共约定,Java 语言的语法并没有这种限制,但是培养良好的编程习 惯有利于程序维护和协作开发。 3. 关键字 为了表示程序结构、定义和修饰等,Java 语言引入一组关键字,参见附录 A。关键字是上些英文单词,在语言中, 关键字已经被赋予特定的意义,不能用这些关键字作为标识符命名程序对象。在 Java 语言中,关键字的作用有以下多个 方面: 描述程序结构、声明类、定义类的成员、简单数据类型、值和变量、异常情况处理、实例(对象)的创建和检验、流 程控制等。 Java 语言中所有关键字均由小写字母组成。每个关键字在程序中出现有特定位置和使用方法的要求。关键字不可以 用做变量、方法、类或标号的标识符(名字)。 1.5 基本数据类型 Java 语言是强类型语言,每个变量和表达式都有确定的类型,在变量赋值时要进行类型兼容性检验。数据类型可分   4 / 177 
为基本数据类型和非基本数据类型两大类。 Java4747  基本数据类型也称为原始数据类型,是系统预先规定的一些常用类型。它们是:整数类型、浮点数(实数)类型、字 符(文字)类型、逻辑类型(布尔型)。 非基本数据类型也称为复合数据类型,是由基本类型组合的新类型。非基本数据类型分为:数组、字符串、类、接 口。 本小节只介绍基本数据类型,非基本数据类型将在以后章节中分别介绍。 1.5.1 逻辑类型 逻辑类型用关键字 boolean 标识,所以也称布尔型。逻辑类型只有真和假两个值,true 表示真,false 表示假。 以下是逻辑变量定义的例子: boolean b; boolean bool; boolean flg1,flg2, 美丽;//一次定义多个变量 boolean b1 = true,b2= false,丑=false;//定义时可以赋初值 逻辑变量用于记录某种条件成立与否,也用语句中作条件判断。 1.5.2 字符类型 字符类型用关键字 char 标识。字符型数据是一个字符,内部表示是字符的 Unicode 代码,共用 65535 个不同 的字符。在 Java 程序中,字符常量有普通字符和转义字符常两种。 用单引号括住一个字符,表示一个普通字符常量。例如,’a’、’B’、’$’、’国’。 对于被语言用作特定意义的字符,或者不能显式显示的字符,需用转义字符标记它们。 例如,换行符用\n 标记,水平制表符用\t 标记。常用的转义字符的标记方法见表 1-2。其中,\nnn 是用八进制代码 表示的字符,\unnnn 是用十六进制代码表示的字符。例如:\141 表示字母 a,\u0061 也表示字母 a.以下是字符变量定 义的例子: char ch; char ch1,ch2,漂亮; char ch3 = ‘A’,ch4 = ‘家’,丑=’假’;//定义时可以赋给初值 表 1-2 转义字符及其含义 转义符 \b \n \r \t \v \f \\ \’ \” \nnn \unnnn 含义 退格(Backspace 键) 换行符,光标位置移到下一行首 回车符,光标位置移到当前行首 水平制表符(Tab 键) 竖向退格符 走纸换页 反斜杠符\ 单引号符’ 双引号符” n 为 8 进制数字,用八进制数据表示字符的代码 n 为 16 进制数字,用 16 进制数据表示字符的代码 1.5.3 整数类型 整数是不带小数点和指数的数值数据。由于计算机只能表示整数的一个子集,表达更大范围内的整数需要更多的二 进制位,Java 语言将整型数据按数值范围大水不同分成四种: (1) 基本型:用 int 标识。4 个字节,32 位,取值范围是-231~231 -1,即-2147483648~2147483647。 (2) 字节型:用 byte 标识。1 个字节,8 位,取值范围是-27~27 -1,即-128~127。 (3) 短整型:用 short 标识。2 个字节,16 位,取值范围是-216~216 -1,即-23768~32767 (4) 长整型:用 long 标识。8 个字节,64 位,取值范围是-264~264 -1,即-923372036854775808L~923372036854775807L 每种整数类型处理不同范围的整数值,并且都是带符号的。 整型常量有十进制、八进制和十六进制三种写法。如下 面的示例所示: 1234(十进制),0777(八进制,以数字 0 开头),0x3ABC(十六进制,以 0x 开头,后随数字符和英文 A 到 F),5333L 或 5333l(以字母 L 或 l 结尾是长整数)。 以下是整型变量定义的实例: int I;int x,积;byte 字节变量;//一个字节整型变量,该变量的名为字节变量   5 / 177 
Java4747  long z,sum;int w =12,len =-1230;long big = 9876L;//定义同时可以赋初值。 1.5.4 浮点数类型 浮点数类型也称实型,浮点数是带小数点或指数的数值数据。 Java 语言的浮点数有单精度和双精度两种。 1. 单精度型 单精度型 用 float 标识,占 4 个字节,32 位,取值-1038~1038。float 型常是的书写的方法是在实数 之后加上字母 F 或 f.例如:23.54f,12389.987F。 2. 双精度型 双精度型 用 double 标识,占 8 个字节,64 位,取值-10308~10308。double 型常是的书写的方法有两种: 一种是直接写一个实数,或在实数后面加上字母 D 或 d.例如:123.5439、123.5439D, 123.5439d。另一种 是科学计数法,用 10 的方幂表示(用字符 e 或 E 表示幂底 10)。例如:123.24e40(科学计数法表示,值为 123.24 乘 10 的 40 次方)。 以下是浮点数类型变量定义的例子: float x,y; double v=12.86,u=2431098.987D; float u=12.36f; 浮点数类型与整数不同,当执行运算时如果出现某种不正常的状态,浮点数类型不会抛出异常。例如, 如果用 0 除浮点数类型的变量,则计算结果是一个特别的无限值。 习题 1. 指出 Java 语言的主要特点和 Java 程序的执行过程。 答:主要特点: (1)强类型,(2) 编译和解释,(3) 自动无用内存回收功能,(4) 面向对象, (5) 与平台无关,(6)安全性,(7)分布式计算,(8)多线程。 Java 程序的执行过程:是解释执行。 1.javac [选项] 源文件==编译 2.java [选项] 类名[参数] ==执行 2. 说出开发与运行 Java 程序的主要步骤。 3. 如何区分应用程序和小应用程序? 4. 说出 Java 源文件的命名规则。 5. 选择一种上机环境,参照实例,编写一个输出“hello world!”字样的 Java 程序。 6. Java 语言使用什么字符集?共有多少个不同的字符? 7. Java 语言标识符的命名规则是什么、 8. Java 有哪些基本数据类型,它们的常量又是如何书写的? 9. 指出下列内容哪些是 Java 语言的整型常,哪些是浮点数类型常量,哪些两者都不是。 1)E-4, 2)A423 , 3)-1E-31,4)0xABCL,5).32E31,6)087,7)0xL,8)003,9)0x12.5,10)077,11)11E,12)056L,13)0.,14).0   6 / 177 
Java4747  第 2 章 运算和语句 本章主要内容(次重点 10%) 数据运算 语句 Java 程序实例 本章重点:算术运算、自增和自减运算、关系运算和逻辑,Java 语句以及 java 程序实例。 本章难点:自增和自减运算、位运算和移位运算,while 语句、do…while 语句、for 语句和 Java 程序实例。 2.1 数据运算 在高级语言中,运算由表达式表示。表达式由运算符和运算分量组成,运算分量可以是常量、变量和方法调用。Java 语言的基本运算可分成以下几类:赋值运算,算术运算,自增和自减运算,关系运算,逻辑运算,条件运算和字符串连 接运算等。 2.1.1 赋值运算 在 Java 语言中,符号“=”是赋值运算符,不是“相等”(相等运算符是“==”,见关系运算符的叙述)。赋值运算分 为两类:一是简单赋值运算;二是复合赋值运算。 1. 简单赋值运算 简单赋值运算的一般形式如下: 变量 = 表达式 赋值运算的执行过程是: (1) 计算赋值运算符的右端的表达式。 (2) 当赋值运算符两侧不一致时,将表达式值的类型自动转换成变量的类型。 (3) 将表达式的值赋值给变量,即存储到与变量对应的存储单元中。 完成一个赋值运算的表达式称为赋值表达式,赋值表达式是先计算表达式的值,然后将表达式的值赋值给变量。 例如,表达式 x=x+1,表示完成表达式 x+1 的计算,将计算结果赋值给变量 x。 这里的类型转换是指数值数据的类型自动转换,这样的自动转换只能由...简单类型向复杂类型转换,不能从复杂 的转换成简单的。即如下所示的从左到右转换: byte->short->int->long->float->double 例如,以下代码说明 int 类型能自动转换成 double 类型: 以下则是不正确的代码,double 类型不能自动转换成 int 类型。 Java 语言约定赋值运算也有值,它的值就是赋予变量的值,因此,赋值运算的结果可以继续赋值。例如: y=j=3;//j 的值为 3,,y 的值为 3.0 赋值运算符结合性“自右至左”,当连续有多上赋值运算时,是从右至左逐个赋值。 int j=3; double y=2.0; y=j;//j 的值为 3,y 的值为 3.0 j=y; int j; double y=2.0; 2. 复合赋值运算 在程序中,经常遇到在变量现在值的基础上作某种修正的运算。例如 x=x+5 这类运算的特点是:变量既要参与运算,又要接受赋值。为避免对同一个变量的地址重复计算,引入复合赋值 运算符。常用的复合赋值运算符有: +=、-=、*=、/=、%= 例如: 记 θ 为某个双目运算符,复合赋值运算 x+=5;//等价于 x=x+5 x *=u+v;//等价于 x=x*(u+v),这里括号不能省略 a+=a-=b+2;//等价于 a=a+(a=a-(b+2))   7 / 177 
Java4747  xθ=e 的等效表达式为 x= xθ(e) 当 e 是一个复杂表达式时,等效表达式的括号是必需的。 2.1.2 算术运算 算术运算要求运算分量的类型是数值类型的(整数类型和浮点数类型)。运算时,只需一个运算分量的是单 目运算,需两个运算分量的是双目运算。算术运算的运算符是: 单目算术运算符:+(取正)、-(取负) 双目算术运算符:+(加)、-(减)、*(乘)、/(除)、%(求余数) 说明: (1) 加、减、乘、除和求余数运算都是双目运算符,结合性都是从左至右。取正和取负是单目运算符,结合性是从 右至左,其优先级高于+、-、*,%等双目运算符。 (2) “/”为除法运算符,当除数和被除数均为整数类型数据时,则结果也是整数类型数据。例如7/4 的结果为1。 (3) “%”为求余数运算符,求余数运算所得结果的符号与被除的符号相同。例如:5%3的结果为2,-5%3 的结果为-2,5%-3的结果为2。 用算术运算符、运算分量和括号连接起来,符合 Java 语言语法规则的计算式,称为算术表达式。例如,如果变量 x 和 y 已经被正确声明,并且已经赋予初值,则以下的式子就是一个正确的算术表达式: X*2+y*(x-5) 2.1.3 自增和自减运算 自增运算符“++”和自减运算符“--”是单目运算符,要求运算分量是数值类型的变量。其作用是变量的值增1或 减1。这两个运算符与变量结合有以下四种可能形式: ++i 前缀形式,表示在引用变量 i 之前,先使 i 加1,以加1后的 i 值为运算结果。 --i 前缀形式, 表示在引用变量 i 之前, 先使 i 减1,以减1后的 i 值为运算结果。 i++后缀形式,表示在收用变量 i 之后,才使 i 加1,即以增1前的 i 值为运算结果。 i--后缀形式,表示在引用变量 i 之后,才使 i 减1,即以减1前的 i 值为运算结果。 例如: i=4;j=++i;//i 结果为5,j 的结果为5 i=4;j=i++;//i 结果为5,j 的结果为 4 i=4;j=--i;//i 结果为 3,j 的结果为 3 i=4;j=i--;//i 结果为 3,j 的结果为 4 上述例子说明,对变量采用自增或自减,用前缀形式或用后缀形式,对变量本身来说,效果是相同的,但表达式的 值不相同。前缀形式是变量运算之后的新值,后缀形式是变量运算之前的值。 自增自减运算能使程序更为简洁和高效,但在使用时需注意“++”和“――”运算的运算只能是变量,不能是常 量或表达式。例如,4++或(i+j)++都不是合法的。 2.1.4 关系运算 关系运算用来表达两个表达式值的比较,运算结果是布尔型。有6上关系运算符: <(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于) 关系运算对左右两侧的值进行比较,如果比较运算的结果成立,则值为 true;不成立为 false. 上述6个关系运算符的优先级不完全相同。<、<=、>、>=的优先级高于==,!=。 例如,表达式 x>y==cy)==(cy 与 cu+v,等价于 x>(u+v). 关系运算符的结合方向是自左至右。 2.1.5 逻辑运算 逻辑运算用于描述逻辑表达式,实现连续多个条件的逻辑与、逻辑或、逻辑否定的判定。有3个逻辑运算符: &&(逻辑与)、||(逻辑或)、!(逻辑否定) 其中:运算符&&和||是双目运算符、运算符!是单目运算符。逻辑运算的操作数必须是布尔型的,结果也是布尔 型的。 逻辑否定“!”的优先级高于算术运算符的优先级。逻辑与“&&”和逻辑或“||”的优先级低于关系运算符的优先   8 / 177 
分享到:
收藏