自考Java语言程序设计(一)串讲笔记
第1章 Java语言基础
1.1 Java语言的特点
Java语言最初的应用对象是消费性电子产品。最初的名字是Oak语言。
Java语言是适用于分布式计算环境的面向对象编程语言,它虽类似于C和C++,但比C++简单,忽略了许多为提高计算效率但初学者较难掌握的程序语言特性。 Java语言主要有以下特点: ①强类型。 ②编译和解释:Java语言是一种高级编程语言,用Java语言编写的源程序在计算机上运行需要经过编译和解释执行两个严格区分的阶段。Java的编译程序先将Java的源程序翻译成与机器无关的字节码,不是通常的编译程序将源程序翻译成特定计算机的机器代码。 运行时,Java的运行系统装载和链接需要执行的类,并作必要的优化后,解释执行字节码程序。 ③自动无用内存回收功能,没有指针,数组元素都要检查下标是否越界。 ④面向对象。 ⑤与平台无关:在任何平台上,Java源程序被Java
编译器译成虚拟机能够识别的字节码。这样,只要有Java虚拟机的平台,就能解释执行Java字节码程序,从而实现Java程序与平台无关。 ⑥安全性。 ⑦分布式计算。 ⑧多线程。
1.2 Java应用程序和小应用程序
Java程序可以是独立的应用程序,也可以是能在浏览器上执行的小应用程序(Applet)。两种Java程序都由一个或多个扩展名为“.class”的文件组成,而且都需要Java虚拟机(JVM)载入并翻译。 两种程序的主要区别是: ①小应用程序只能在与Java兼容的容器中运行,可以嵌入在HTML网页内,在网络上发布,当网页被浏览时,在浏览器中运行,小应用程序的运行还受到严格的安全限制,例如:它不能访问用户计算机上的文件。Java应用程序没有这些限制,也不支持网页嵌入和下载运行。 ②小应用程序和应用程序在代码编写上也有很大差异。一个小应用程序必须定义成一个Applet类的子类。应用程序可以是Applet类的子类,也可以不是。应用程序必须在一个类中定义一个main()方法,该方法代表应用程序的入口。而小应用程序不必定义 main()方法,它的执行由Applet类中定义的多个方法控制。 Java源程序命名受到严格的限制:
Java源程序的扩展名必须是“.java”,而源程序经过编译后得到的应用程序文件名(即字节码文件)的主文件名和源程序中的类名一样,而扩展名是“.class”。如果源文件中多个类,那么最多只能有一个public类;如果源文件中有public类,那么源文件的名字必须与这个类的名字完全相同。如果源文件没有public类,那么源文件的名字只要和某一个类的名字相同即可。Java程序中经常会出现注释。注释是程序中的说 明文字,用于帮助阅读程序,它不是语句,不会影响程序的执行效率。 Java语言的注释有三种形式: ①行注释(//):用于简短地说明前面代码的意义或功能。注释内容到行末,不能跨行。 ②块注释(/?........?/):是多行注释,用于说明下面程序段的算法、功能等,块注释不可嵌套使用。
③文档注释(/??.........?/):能被实用程序(命令)javadoc接受,由它能自动生成程序的HTML文档。
1.3 Java程序的开发过程(以下以SUN公司的JavaJDK为例)对于Java应用程序,先编写Java源程序,源程序经Java编译器(javac.exe)编译后产生字节码文件,最后由Java解释器(java.exe)解释执行字节码文件。
对于小应用程序,先编写Java源程序,源程序经Java编译器编译后产生字节码文件,最后由 Web浏览器(appletviewer.exe)解释执行字节码文件。 编译器和解释器的使用格式是:
javac[选项]源文件(其中源文件是“.java?文件) java[选项]类名 [参数](类名指定的必须是含有 main()方法的类,即是一个Java应用程序) 通常情况下用的比较多的开发环境有 Eclipse, JBuilder等。 1.4 标识符和关键字
Java语言使用Unicode字符集,共有65535个字符。 Java标识符用于命名程序对象。
Java语言的标识符可以按以下规则任意命名: ① 由字母(包括英文字母、下划线字符、美元字符、文字字符)和数字组成。 ② 限定标识符的第一个字符不能是数字字符。
除了按上述规则命名标识符外,另外还有命名的习惯约定(行业习惯,不是规定):一般变量名、方法名用小写英文字母开头,类名首字母用大写字母,若命名由若干个单词组成,后面的每个单词用大写开头;文字和常数全用大写字母命名;包名全部用小写字母。Java关键字:关键字是一些英文单词,在语言中,关键字已经被赋予特定的意义,不能用这些关键字作为标识符
命名程序对象。关键字全部由小写字母组成。每个关键字在程序中出现,均有特定位置和特定使用方法的要求。 1.5 基本数据类型
Java语言是强类型语言,每个变量和表达式都有确定的类型,在变量赋值时要进行类型兼容性检验。数据类型可分为非基本数据类型和基本数据类型两大类。非基本类型也称为复合数据类型,是由基本类型组合的新类型。非基本数据类型分为:数组、字符串、类、接口。 基本数据类型也称为原始数据类型,是系统预先规定的一些常用类型。它们是:整数类型、浮点数(实数)类型、字符(文字)类型、逻辑类型(布尔型)。 ①逻辑类型用关键字boolean标识,所以也称为布尔型。逻辑类型只有真(true)和假(false)两个值。 ②字符类型用关键字char标识。字符型数据是一个字符,内部表示是字符的Unicode代码,共有65535个不同的字符。在Java程序中,字符常量有普通字符常量 (用单引号括住一个字符)和转义字符常量(用\开头后跟特定字符或字符串)两种。 ③整数类型是指不带小数点和指数的数值数据。
由于计算机只能表示整数的一个子集,表达更大范围内的整数需要更多的二进制位,Java语言将整数数据按数值范围大小不同分成四种:基本型用关键字int标识,4个字节,32位,取值范围是-231~231-1;短整型用关键字short标识,2个字节,16位,取值范围是-215~215-1;字节型用关键字byte标识,1个字节,8位,取值范围是-27~27-1;长整型用关键字long标识(或者在常数后加L或l标识),8个字节,64位,取值范围是-263~263-1。每种整数类型处理不同范围的整数值,并且都是带符号的。整型常量有十进制、八进制(以数字符0开头)和十六进制(以0x开头)三种写法。
④浮点数类型也称为实型,浮点数是带小数点或指数的数值数据。Java语言的浮点数有单精度和双精度两种。单精度型用关键字float标识,占4个字节,32位。Float型常量的书写方法是在实数之后加上字母F或f。双精度用关键字double标识,占8个字节,64位。double型常量的书写方法有两种:一种写法是直接写一个实数,或在实数后加字母D或d。另一种是科学计数法,用10的方幂(用字符e或E表示幂底10)。
2.1 数据运算
Java语言的基本运算可分成以下几类:赋值运算、算术运算、自增和自减运算、关系运算、逻辑运算、条件运算和字符串连接运算等。 2.1.1 赋值运算
在Java语言中符号“=”是赋值运算符不是“相等”运算符(相等运算符是“= =”见关系运算符的叙述)赋值运算分为两类:一是简单赋值运算;二是复合赋值运算。 1.简单赋值运算
简单赋值运算的一般形式如下:
变量 表达式赋值运算的执行过程是: (1)计算赋值运算符右端的表达式。
(2)当赋值运算两侧的类型不一致时,将表达式值的类型自动转换成变量的类型。 (3)将表达式的值赋值给变量,即存储到与变量对应的存储单元中。
这里的类型转达换是指数值数据的类型自动转换,这样的自动转换只能是简单类型向复类型转换,不能从复杂的转换成简单的。即如下所示的从左到右转换。
byte→short→int→long→float→double Java语言约定赋值运算也有值,它的值就是赋予变 量的值,因此,赋值运算的结果可以继续赋值。 intj;
doubley=2.0; y=j=3;∥j的值为3,y的值为3.0 赋值运算符结合性“自右至左”当连续有多个赋值 运算时,是从右至左逐个赋值。 2.复合赋值运算
这类运算的特殊性点是:变量即要参与运算,又要接受赋值。为避免对同一个变量的地址重复,计算引入复合赋值运算符。常用的复合赋值运算符有:+=、 -=、?=、/=、%=。 2.1.2 算术运算
算术运算要求运算分量的类型是数值类型的(整数类型和浮点数类型)。运算时,只需一个运算分量的是单目运算,需两个运算分量的是双目运算。特别的:
(1)“/”为除法运算符,当除数和被除数均为整数类型数据时,则结果也是整数类型数据。例如7/4的结果为1。
(2)“%”为求余数运算符,求余数运算所得结果的符号与被除数的符号相同。例如5%3的结果为2,-5%3的结果为的结果为3。 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 关系运算
关系运算对左右两侧的值进行比较,如果比较运算的结果成立,则值为true,不成立为false。关系运算符的优先级别不完全相同。<、<=、>、>=的优先级高于==、!=。关系运算符的优先级低于算术运算符的优先级。 2.1.5 逻辑运算
逻辑运算用来描述表达式,实现连续多个条件的逻辑与、逻辑或、逻辑否定的判定。有3个逻辑运算符:\(逻辑与)、‖(逻辑或)、!(逻辑否定)其中:运算符\和‖是双目运算符,运算符!是单目运算符。逻辑运算的操作数必须是布尔型的,结果也是布尔型的。 逻辑否定“!”的优先级高于算术运算符的优先级。逻辑与“\和逻辑或“‖”的优先级低于关系运算符的优先级。需要特别指出的是,逻辑与和逻辑或运算符有以下
性质,Java语言利用这些性质,在进行连续的逻辑运算时,不分逻辑与和逻辑或的优先级进行计算,而是顺序进行逻辑与和逻辑或的计算,一旦逻辑子表达式或逻辑 表达式能确定结果,就不再继续计算。
(1)对表达式a\b,当a为false时,结果为false,不必再计算b;仅当a为true时,才需计算b。 (2)对表达式a‖b,当a为true时,结果为true,不必再计算b;仅当a为false时,才需计算b。例如:设有a=b=c=1,计算++a>=1||++b< ++c。从左到右顺序计算逻辑或表达式,先计算子表达式++a>=1,变量a的值变为2,++a>=1为true,整个逻辑表达式的值已经为true,不再计算右边的子表达式++b<++c。因而,变量b和变量c的值不变,仍为1。 2.1.6 条件运算(?:)
条件运算是一个三目运算符,一般形式为:逻辑表达式?表达式1:表达式2 2.1.7 其他运算 1.位运算
位运算的运算分量只能是整型数据,位运算把运算对象看作是由二进制位组成的位串,逐位完成指定的运算,得到一个新的位串。位运算符有4个,按优先级从高到低顺序,依次为:~(位反)、&(位与)、^(位异或)、|(位或)用位运算的组合可以用来描述各种特殊的位串运算。例如,位运算表达式
((k-1)^)&k能取下非0的整型变量k的最右边为1的那一位。 2.移位运算
移位运算是将整数作为二进制位的位串向左或向右移动。移位运算符有三个,它们是:
左移运算符(<<)、算术右移运算符(>>)、逻辑右移运算符(>> >)移位运算有两个运算分量,左运算分量为移位的数据对象,右运算分量的值为移位位数。移位运算符的优 先级低于算术算符,高于关系运算符,它们的结合方向是自左至右。
Java语言允许数值型数据混合运算,不同类型的数值数据混合运算时需要类型转换。对于数据表示字节数少的类型数据转换成数据表示字节数较多的类型数据,系统能自动实现转换。反之,例如,将一个long类数据转换成int型数型,这种数据类型转换必须采用类型 强制转换。类型强制转换称作造型(cast),书写格式为: (类型)表达式 2.2 语句
在Java语言中,语句分为基本语句、控制结构语句以及package语句和import语句等。其中控制结构语句包括复合语句、if语句、switch语句、循环语句和 try...catch语句。其中循环语句有 while语句、do...while语句、for语句三种。 2.2.1 基本语句
基本语句主要有表达式语句、空语句、break语句、continue语句、return语句等。 1.表达式语句
在赋值表达式、自增自减表达式和方法调用表达式之后加上分号即变成语句,称它们是表达式语句。另一个典型的表达式语句是方法调用表达式之后接上分号。 2.空语句
空语句是只有一个分号的语句,其形式为;
实际上,空语句是什么也不做的语句。语言引入空语句是出于以下实用上的考虑。例如,循环控制结构的句法需要一个语句作为循环体,当要循环执行的动作由循环控制部分完成时,就不需要有一个实际意义的循环体,这时就需要用一个空语句作为循环体。另外,语言引入空语句使序列中连续出现多个分号不再是一种错误,编译系统遇到这种情况,就认为单独的分号是空语句。
3.break语句
break语句必须出现在多路按值选择结构或循环结构中。break语句的执行强制结束它所在的控制结构,让程序从这个控制结构的后继语句继续执行。 4.continue语句
continue语句只能出现在循环结构中,continue语句的执行将忽略它所在的循环体中在它之后的语句。简单地说,continue语句提早结束当前轮次循环,进入下 一轮次循环。
2.2.2 复合语句
在Java语言中,用花括号括住一个顺序执行的计算步骤序列描述顺序结构,这样的顺序结构称作复合语句。复合语句中的每个计算步骤可以是单个语句,也可以是一个控制结构,特别情况也可以为空。 2.2.3 if语句
有两种选择控制结构:两路条件选择结构(用计语句描述)和多路按值选择结构。 2.2.4 switch语句
在Java语言中,用switch语句描述多路按值选择结构。switch语句包含一个表达式,用于按表达式值的不同作相应选择。另外,还有一系列由case开头的子句和 一个可选用的default开头的子句,每个子句有一个可能为空的语句序列。 正确编写switch语句有以下几个要求:
(1)switch后面括号内的表达式的类型只限于 char、int、short和byte。
(2)所有case后的常量表达式的值互不相同,类型与switch后括号内的表达式类型一致。
(3)语句序列由任意条合法的Java语句构成,也可以没有语句。