1、 数组的概念及定义数组的概念及定义8.1静态数组与动态数组静态数组与动态数组 8.2数组的几本操作数组的几本操作 8.3 数组的应用举例数组的应用举例8.4 控件数组控件数组8.5 8.1.1 8.1.1 引例引例例例8-1(参看教材(参看教材P127)8.1.2 8.1.2 数组的定义数组的定义 定义:定义:在中,把一组具有相同名字、不同下标在中,把一组具有相同名字、不同下标的下标变量称为数组。的下标变量称为数组。数组应当先定义后使用。定义中要声明数组名、类数组应当先定义后使用。定义中要声明数组名、类型、维数及数组的大小。数组在计算机内存中占据一型、维数及数组的大小。数组在计算机内存中占据一
2、块区域,数组名是这个区域的名称,区域的每个单元块区域,数组名是这个区域的名称,区域的每个单元都有自己的地址,该地址用下标表示。定义数组的目都有自己的地址,该地址用下标表示。定义数组的目的就是通知计算机为其留出所需的内存空间。的就是通知计算机为其留出所需的内存空间。数组的维数也就是定义时下标的个数。一个数组数组的维数也就是定义时下标的个数。一个数组如果只用一个下标就能确定一个数组元素在数组中的如果只用一个下标就能确定一个数组元素在数组中的位置,就称为一维数组。如果要用两个或多个下标才位置,就称为一维数组。如果要用两个或多个下标才能确定一个数组元素在数组中的位置,则称为二维数能确定一个数组元素在数
3、组中的位置,则称为二维数组或多维数组。组或多维数组。VB中的数组最多可以有中的数组最多可以有60维。维。在在VB中,可以用中,可以用4个语句来定义数组,它个语句来定义数组,它们的格式相同,但适用范围不同。这们的格式相同,但适用范围不同。这4个语句个语句为:为:Dim 用在窗体模块或标准模块中,也可以用于过程中用在窗体模块或标准模块中,也可以用于过程中 ReDim 用在过程中用在过程中 Static 用在过程中用在过程中 Public 用在标准模块中,定义全局数组用在标准模块中,定义全局数组 下面我们以下面我们以Dim语句为例介绍数组定义的语句为例介绍数组定义的格式,其它语句定义数组的格式与格式
4、,其它语句定义数组的格式与Dim相同。相同。在在VBVB中可以用两种格式定义数组:中可以用两种格式定义数组:1只给出每一维下标的上界,即可以使用的下标的最大值。格式如只给出每一维下标的上界,即可以使用的下标的最大值。格式如下:下:Dim 数组名(第一维下标上界,第二维下标上界,数组名(第一维下标上界,第二维下标上界,)As 类型名称类型名称 如:如:Dim Array(5)As Integer 定义了一个一维数组,该数组的名字为定义了一个一维数组,该数组的名字为Array,类型为,类型为Integer,数组,数组中共有中共有6个元素:个元素:Array(0),Array(1),Array(2)
5、,Array(3),Array(4),Array(5)。再如:再如:Dim Test(2,3)As Integer 上面定义了一个二维数组上面定义了一个二维数组Test,该数组有,该数组有3行行4列共列共12个元素,即:个元素,即:Test(0,0),Test(0,1),Test(0,2),Test(0,3),Test(1,0),Test(1,1),Test(1,2),Test(1,3),Test(2,0),Test(2,1),Test(2,2),Test(2,3),其形式,其形式如图如图8-1所示。所示。图8-1 二维数组 在一般情况下,数组下标的下界默认在一般情况下,数组下标的下界默认为为
6、0。如果希望下标从。如果希望下标从1开始,也可以通过开始,也可以通过Option Base语句来设置,其格式为:语句来设置,其格式为:Option Base n 其中其中n的值只能是的值只能是0或或1。Option Base语语句只能出现在窗体层或模块层,不能出现句只能出现在窗体层或模块层,不能出现在过程中,并且必须出现在数组定义之前在过程中,并且必须出现在数组定义之前。如果定义的是多维数组,则下标的默认。如果定义的是多维数组,则下标的默认下界对每一维都有效。下界对每一维都有效。2根据需要指定数组下标的下界。格式如下:根据需要指定数组下标的下界。格式如下:Dim 数组名(数组名(下界下界 To
7、 上界,上界,下界下界 To 上界,上界,)As 类型名称类型名称 如:如:Dim Arr(-2 To 3)As Integer 定义了一个一维数组定义了一个一维数组Arr,其下标的下界,其下标的下界为为-2,上界为,上界为3,因此该数组共有:,因此该数组共有:Arr(-2),Arr(-1),Arr(0),Arr(1),Arr(2),Arr(3)六个六个数组元素。数组元素。说明:说明:数组名的命名规则与变量名相同。但在同一个过程数组名的命名规则与变量名相同。但在同一个过程中,数组名不能与变量名同名。中,数组名不能与变量名同名。数组必须先定义,后使用。数组必须先定义,后使用。BASIC的早期版本
8、支持的早期版本支持数组的隐式定义,即如果一个数组未经定义而直接数组的隐式定义,即如果一个数组未经定义而直接使用,则该数组的各维的默认上界为使用,则该数组的各维的默认上界为10,下界为,下界为0或或1。但在。但在VB中,不允许使用隐式定义。中,不允许使用隐式定义。当用当用Dim语句定义数组时,数组中的全部元素都被语句定义数组时,数组中的全部元素都被初始化为初始化为0(数值型数组)或空字符串(字符型数组(数值型数组)或空字符串(字符型数组)。)。在第一种格式中,下标的下界只能是在第一种格式中,下标的下界只能是0或或1,而在第,而在第二种格式中,下标的范围可以是二种格式中,下标的范围可以是-3276
9、832767。注意区分注意区分“可以使用的最大下标值可以使用的最大下标值”和和“元素个数元素个数”:前者指的:前者指的是下标值的上界,后者指数组中元素个数。如:是下标值的上界,后者指数组中元素个数。如:Dim Arr(3 To 5)As Integer 在数组在数组Arr中,元素个数为中,元素个数为3,而可以使用的最大下标值为,而可以使用的最大下标值为5。在定义数组时,每一维的元素个数必须是常数,不能是变量或表在定义数组时,每一维的元素个数必须是常数,不能是变量或表达式。如:达式。如:Dim A(n)As Integer 是不合法的。是不合法的。如果需要在运行时定义数组的大小,可以用动态数组的
10、方法如果需要在运行时定义数组的大小,可以用动态数组的方法来解决这将在来解决这将在8.2节中详细讲解。节中详细讲解。数组的类型通常用数组的类型通常用As给出,如果省略给出,如果省略As,则定义的是默认数组。,则定义的是默认数组。数组的下界都必须小于上界。数组的下界都必须小于上界。VB中提供了两个函数中提供了两个函数LBound和和UBound来来测试一个数组中指定维的下界值和上界值,这两个函数的格式为:测试一个数组中指定维的下界值和上界值,这两个函数的格式为:LBound(数组名数组名,维维)UBound(数组名数组名,维维)如果测试的是一维数组,则参数如果测试的是一维数组,则参数“维维”可以省
11、略,如果测试的是多可以省略,如果测试的是多维数组,则参数维数组,则参数“维维”不能省略。如有下面的定义:不能省略。如有下面的定义:Dim A(1 to 30,0 to 50,-2 to 20)则用下面的语句可以得到该数组各维的上下界:则用下面的语句可以得到该数组各维的上下界:Print LBound(A,1),UBound(A,1)Print LBound(A,2),UBound(A,2)Print LBound(A,3),UBound(A,3)输出结果为:输出结果为:130 050 -2208.1.3 8.1.3 默认数组默认数组 所谓默认数组,就是数组类型为所谓默认数组,就是数组类型为Va
12、riant(默认)(默认)的数组。的数组。VB中允许定义默认数组。一般情况下,定义中允许定义默认数组。一般情况下,定义数组时应指明其类型。如:数组时应指明其类型。如:Static Arr(3 to 5)As Integer 定义了一个数组定义了一个数组Arr,该数组有,该数组有3个元素,每个元个元素,每个元素都是一个整型数据。素都是一个整型数据。如果把上述定义改为:如果把上述定义改为:Static Arr(3 to 5)则数组则数组Arr是一个默认数组,其类型为是一个默认数组,其类型为Variant。即等价于如下定义:即等价于如下定义:Static Arr(3 to 5)AsVariant 那
13、么,默认数组有什么作用呢?前面那么,默认数组有什么作用呢?前面我们已经知道:几乎在所有的程序设计语我们已经知道:几乎在所有的程序设计语言中,一个数组中的所有元素必须属于同言中,一个数组中的所有元素必须属于同一种数据类型,而在一种数据类型,而在VB中,一个数组中中,一个数组中的元素可以是相同类型的数据,也可以是的元素可以是相同类型的数据,也可以是不同数据类型的数据。而默认数组就是可不同数据类型的数据。而默认数组就是可以存放不同类型数据的数组。因此,默认以存放不同类型数据的数组。因此,默认数组也可以说是一种数组也可以说是一种“混合数组混合数组”。如:如:Static Arr(1 to 5)Arr(
14、1)=10 Arr(2)=3.9 Arr(3)=”Visual Basic”Arr(4)=”20”&Now Arr(5)=&HAAF 定义了一个静态默认数组定义了一个静态默认数组Arr(默认数组一般定(默认数组一般定义为静态的),共有义为静态的),共有5个元素,在接下来的赋值中我个元素,在接下来的赋值中我们看到,对这们看到,对这5个元素分别赋予了整型、实型、字符个元素分别赋予了整型、实型、字符串型、日期和时间型及十六进制整型。串型、日期和时间型及十六进制整型。8.2 8.2 静态数组与动态数组静态数组与动态数组 在定义时已确定了数组占用内存空间大小的数组称在定义时已确定了数组占用内存空间大小的
15、数组称为静态数组,前面我们所使用的数组都是静态数组。动为静态数组,前面我们所使用的数组都是静态数组。动态数组是指在声明数组时未给出数组占用内存的大小(态数组是指在声明数组时未给出数组占用内存的大小(省略括号中的下标),当要使用它时,随时用省略括号中的下标),当要使用它时,随时用ReDim语语句重新指出数组数组的下标,从新为其开辟内存区的数句重新指出数组数组的下标,从新为其开辟内存区的数组。组。因此静态数组是在程序编译时就为数组分配好了内因此静态数组是在程序编译时就为数组分配好了内存空间的,而动态数组是在程序执行时执行到存空间的,而动态数组是在程序执行时执行到ReDim语语句时为数组分配内存空间
16、的。动态数组的优点是根据用句时为数组分配内存空间的。动态数组的优点是根据用户需要,有效地利用内存空间,因为执行户需要,有效地利用内存空间,因为执行ReDim之前,之前,动态数组是不占内存空间的。动态数组是不占内存空间的。下面主要介绍动态数组的定义。下面主要介绍动态数组的定义。定义动态数组的方法是:在窗体层、标准定义动态数组的方法是:在窗体层、标准模块或过程中使用模块或过程中使用Dim或或Public语句声明一个语句声明一个没有下标(即括号内为空,但括号不能省)的没有下标(即括号内为空,但括号不能省)的数组,然后在过程中用数组,然后在过程中用ReDim语句指明该数组语句指明该数组的大小。的大小。
17、ReDim语句格式如下:语句格式如下:ReDim数组名(下标,下标数组名(下标,下标)As类型类型 其中:下标可以是常量,也可以是有了确其中:下标可以是常量,也可以是有了确定值的变量。类型可以省略,若不省略,必须定值的变量。类型可以省略,若不省略,必须与前面声明语句中的类型保持一致。与前面声明语句中的类型保持一致。如:如:Dim Test()As Single Sub Form_Load()ReDim Test(4,8)End Sub 在窗体层声明了数组在窗体层声明了数组Test为可变长数组,为可变长数组,在在Form_Load()事件过程中指明该二维数组的事件过程中指明该二维数组的大小为大小
18、为5行行9列。列。再如:再如:Public TestArr()As Integer Dim size As Integer Sub Form_Click()size=InputBox(Enter a integer value:,Data,12)ReDim TestArr(size)End Sub 首先声明了一个空数组首先声明了一个空数组TestArr和一个变量和一个变量size,然后在,然后在Form_Click()事件过程中输入一个值给事件过程中输入一个值给size,用,用ReDim语句定义语句定义数组数组TestArr的大小为的大小为size。例例8-2(参看教材(参看教材P132-13
19、3)8.3 8.3 数组的基本操作数组的基本操作8.3.1 对数组元素进行初始化对数组元素进行初始化8.3.2 数组元素的输入数组元素的输入8.3.3 数组元素的输出数组元素的输出8.3.4 数组的赋值数组的赋值8.3.5 For EachNext语句语句 定义一个数组后,可以对数组中的定义一个数组后,可以对数组中的元素进行初始化、输入、输出等操作。元素进行初始化、输入、输出等操作。在在VB中,还提供了中,还提供了For EachNext语句语句用于对数组的操作。用于对数组的操作。8.3.1 8.3.1 对数组元素进行初始化对数组元素进行初始化 早期的早期的BASIC版本中提供了版本中提供了R
20、EAD_DATA语句,它为多个变量特别是数组元素的赋值提语句,它为多个变量特别是数组元素的赋值提供了方便。但在供了方便。但在Microsoft公司公司1991年推出年推出VB1.0版时,去掉了版时,去掉了READ_DATA语句。这样就只能语句。这样就只能通过赋值语句或通过赋值语句或InputBox函数为多个变量或数函数为多个变量或数组元素赋值。但当需要赋值的变量或数组元素组元素赋值。但当需要赋值的变量或数组元素较多时,将大大增加程序代码的数量。在较多时,将大大增加程序代码的数量。在Microsoft公司随后推出的公司随后推出的VB2.0和和3.0版本中,版本中,这个问题也未能解决。直到这个问题
21、也未能解决。直到VB4.0版推出后,一版推出后,一个新的个新的Array函数取代函数取代READ_DATA语句重新出语句重新出现。现。Array函数用来为数组元素赋值,即把一个数据集读入某个数组。函数用来为数组元素赋值,即把一个数据集读入某个数组。其格式为:其格式为:数组变量名Array(数组元素值)其中:数组变量名是预先定义的数组名,它后面没有括号,之所其中:数组变量名是预先定义的数组名,它后面没有括号,之所以称为以称为“数组变量数组变量”,是因为它作为数组使用,但作为变量定义,既,是因为它作为数组使用,但作为变量定义,既没有维数,也没有上下界,并且数组变量不能是具体的数据类型,只没有维数,
22、也没有上下界,并且数组变量不能是具体的数据类型,只能是能是Variant类型。数组元素值是需要赋给数组各元素的值,各值之间类型。数组元素值是需要赋给数组各元素的值,各值之间以逗号分隔。如:以逗号分隔。如:Static Num As VariantNum=Array(1,2,3,4,5,6)将把将把1、2、3、4、5、6这六个数值赋给数组这六个数值赋给数组Num的各个元素,即的各个元素,即Num(0)=1,Num(1)=2,Num(2)=3,Num(3)=4,Num(4)=5,Num(5)=6。注意默认数组下标从。注意默认数组下标从0开始。如果想使下标从开始。如果想使下标从1开始,则应开始,则应
23、数组定义模块的声明部分执行:数组定义模块的声明部分执行:Option Base 1 之后,数组之后,数组Num各元素的值分别为:各元素的值分别为:Num(1)=1,Num(2)=2,Num(3)=3,Num(4)=4,Num(5)=5,Num(6)=6。数组变量可以有三种定义方式:数组变量可以有三种定义方式:显式定义为显式定义为Variant变量。如:变量。如:Dim Num As Variant 在定义时不指明类型。如:在定义时不指明类型。如:Dim Num不定义而直接使用。不定义而直接使用。例例8-3(参看教材(参看教材P134)8.3.2 8.3.2 数组元素的输入数组元素的输入 数组元
24、素一般通过数组元素一般通过For循环语句及循环语句及InputBox函数输入。如:函数输入。如:For i=0 To 3For j=0 To 4s(i,j)=InputBox(“输入输入”&i&”,”&j&”的值的值”)提醒用户输入提醒用户输入Next jNext i8.3.3 8.3.3 数组元素的输出数组元素的输出 数组元素的输出可以用循环及数组元素的输出可以用循环及Print方法来方法来实现。如:实现。如:For i=0 To 3For j=0 To 4Print s(i,j);”“;Next jPrintNext i8.3.4 8.3.4 数组的赋值数组的赋值 数组的赋值是指将一个数组
25、各个元素的值赋给另一数组的各数组的赋值是指将一个数组各个元素的值赋给另一数组的各个元素。在个元素。在VB6.0以前的版本中,要通过一个以前的版本中,要通过一个For循环来实现。在循环来实现。在VB6.0中,只要通过一条简单的赋值语句即可实现。例如:中,只要通过一条简单的赋值语句即可实现。例如:Dim a(4)As Integer,b()As Integer a(0)=0:a(1)=5:a(2)=10:a(3)=15:a(4)=20 b=a 其中:其中:b=a语句相当于执行了语句相当于执行了ReDim b(UBound(a)For i=0 To UBound(a)b(i)=a(i)Next i在
26、数组对数组赋值时要注意:在数组对数组赋值时要注意:赋值号两边的数组的数据类型必须一赋值号两边的数组的数据类型必须一致。致。如果赋值号左边是一个动态数组,则如果赋值号左边是一个动态数组,则赋值时系统自动将动态数组赋值时系统自动将动态数组RdDim成与成与右边同样大小的数组。右边同样大小的数组。如果赋值号左边是一个大小固定的静如果赋值号左边是一个大小固定的静态数组,则数组赋值出错。态数组,则数组赋值出错。8.3.5 For EachNext8.3.5 For EachNext语句语句 For EachNext语句与语句与ForNext语句类似,都语句类似,都用来执行指定次数的重复操作。但用来执行指
27、定次数的重复操作。但For EachNext语句专门用于数组,其一般格式为:语句专门用于数组,其一般格式为:For Each成员成员In 数组名数组名 循环体循环体 Exit For Next 成员成员 其中:成员是一个变体变量,它是为循环提供其中:成员是一个变体变量,它是为循环提供的,它实际上代表的是数组中的每个元素。的,它实际上代表的是数组中的每个元素。用用For EachNext语句可以对数组中的元素进行显示、读语句可以对数组中的元素进行显示、读取等处理,它所重复执行的次数由数组中元素的个数确定,也取等处理,它所重复执行的次数由数组中元素的个数确定,也就是说,数组中有多少个元素,就自动重
28、复执行多少次。如:就是说,数组中有多少个元素,就自动重复执行多少次。如:Dim Array(1 to 5)For Each x in Array Print x;Next x 将重复执行将重复执行5次,依次输出数组中每个元素的值。这里的次,依次输出数组中每个元素的值。这里的x类似于类似于ForNext语句中的循环变量,但不需要为其提供初值和语句中的循环变量,但不需要为其提供初值和终值,而是根据数组元素的个数确定重复执行的次数。并且终值,而是根据数组元素的个数确定重复执行的次数。并且x的的值处于不断的变化之中,开始执行时,值处于不断的变化之中,开始执行时,x是数组中第一个元素的是数组中第一个元素
29、的值,执行完一次循环后,值,执行完一次循环后,x变为数组第二个元素的值变为数组第二个元素的值,当,当x为最后一个元素的值时,执行最后一次循环。也就是说,为最后一个元素的值时,执行最后一次循环。也就是说,x是一是一个变体变量,它可以代表任何类型的数组元素。个变体变量,它可以代表任何类型的数组元素。不难看出,在数组操作中,不难看出,在数组操作中,For EachNext语句比语句比ForNext语句更方语句更方便。但需要注意的是:不能在便。但需要注意的是:不能在For EachNext语句中使用用户自定义类型语句中使用用户自定义类型数组,因为数组,因为Variant不能包含用户自定不能包含用户自定
30、义类型。义类型。8.4 8.4 数组的应用举例数组的应用举例例例8-4(参看教材(参看教材P136-137)例例8-5(参看教材(参看教材P137-138)8.5 8.5 控件数组控件数组8.5.1控件数组的作用控件数组的作用8.5.2 控件数组的建立控件数组的建立 控件数组是由一组相同类型的控件控件数组是由一组相同类型的控件组成。它们共用一个控件名,具有相同组成。它们共用一个控件名,具有相同的属性。当建立控件数组时,系统给每的属性。当建立控件数组时,系统给每个元素赋一个唯一的索引号(个元素赋一个唯一的索引号(Index),),即下标,通过属性窗口的即下标,通过属性窗口的Index属性,可属性
31、,可以知道该控件的下标是多少,第一个下以知道该控件的下标是多少,第一个下标是标是0。8.5.18.5.1控件数组的作用控件数组的作用 控件数组适用于若干个控件执行的操作相控件数组适用于若干个控件执行的操作相似的场合,控件数组共享同样的事件过程。例似的场合,控件数组共享同样的事件过程。例如有一个控件数组如有一个控件数组cmdName有有3个命令按钮,个命令按钮,则不管单击哪一个命令按钮,都会调用同一个则不管单击哪一个命令按钮,都会调用同一个单击(单击(Click)事件过程。)事件过程。控件数组的名字由控件数组的名字由Name属性指定,而数组属性指定,而数组中的每个元素则由其中的每个元素则由其In
32、dex属性指定。和普通数属性指定。和普通数组一样,控件数组的下标也放在小括号内,如组一样,控件数组的下标也放在小括号内,如cmdName(2),表示控件数组,表示控件数组cmdName中下标中下标值为值为2的元素。的元素。为了区分控件数组中的各个元素,为了区分控件数组中的各个元素,VB会把下标值传送给一个会把下标值传送给一个过程。例如,单击上述控件数组过程。例如,单击上述控件数组cmdName中的任意一个命令按钮中的任意一个命令按钮时,调用的事件过程如下:时,调用的事件过程如下:Private Sub cmdName_Click(Index As Integer)If Index=2 Then
33、cmdName(Index).Caption=”第第3个命令按钮个命令按钮”End If End Sub 则当单击则当单击cmdName(2)命令按钮时,该按钮显示命令按钮时,该按钮显示“第第3个命令个命令按钮按钮”。8.5.2 8.5.2 控件数组的建立控件数组的建立 控件数组是针对控件建立的,因此控件数组是针对控件建立的,因此与普通数组的定义不一样。控件数组的与普通数组的定义不一样。控件数组的建立有两种方法:建立有两种方法:第一种方法是在设计时建立,建立第一种方法是在设计时建立,建立的步骤如下:的步骤如下:在窗体中画出作为数组元素的某个控在窗体中画出作为数组元素的某个控件,可设置该控件名的
34、属性,这是建立件,可设置该控件名的属性,这是建立的第一个元素。的第一个元素。选中该控件,进行选中该控件,进行“复制复制”(Copy)和)和“粘粘贴贴”(Paste)操作,系统会显示一个对话框,)操作,系统会显示一个对话框,询问是否要建立控件数组,单击询问是否要建立控件数组,单击“是是”后,窗后,窗体的左上角将出现一个控件,它就是控件数组体的左上角将出现一个控件,它就是控件数组的第二个元素,可将其拖放到窗体中适当位置的第二个元素,可将其拖放到窗体中适当位置。重复执行重复执行“粘贴粘贴”(Paste)操作,继续建立)操作,继续建立控件数组中其它元素。控件数组中其它元素。控件数组建立后,只要改变一个
35、控件的控件数组建立后,只要改变一个控件的“Name”属性值,并把其属性值,并把其“Index”属性值置为属性值置为空(注意不是空(注意不是0),就能把该控件从控件数组),就能把该控件从控件数组中删除。中删除。例例8-6(参看教材(参看教材P139-140)例例8-7(参看教材(参看教材P140-142)1声明声明 JSP声明的作用是说明将要使用的变声明的作用是说明将要使用的变量和方法,以保存信息或定义量和方法,以保存信息或定义JSP页面可页面可能需要调用的方法,其作为范围是整个页能需要调用的方法,其作为范围是整个页面。面。因为因为JSP是基于是基于Java技术的,因此要技术的,因此要求像求像J
36、ava一样,对于将要在一样,对于将要在JSP程序中用程序中用到的变量和方法,必须先进行声明,不然到的变量和方法,必须先进行声明,不然将会出错。在声明元素中声明的变量和方将会出错。在声明元素中声明的变量和方法,将在法,将在JSP页面初始化时进行初始化。页面初始化时进行初始化。2表达式表达式 表达式用于将表达式用于将JSP内容转换为字符串内容转换为字符串以便于包含在页面的输出中。表达式表示以便于包含在页面的输出中。表达式表示的是一个在脚本语言中被定义的表达式,的是一个在脚本语言中被定义的表达式,在运行后被自动转化为字符串,然后插入在运行后被自动转化为字符串,然后插入到这个表达式在到这个表达式在JS
37、P文件中的位置显示。文件中的位置显示。因为表达式的值已经被转化为字符串,所因为表达式的值已经被转化为字符串,所以能够在一行文本中插入表达式。以能够在一行文本中插入表达式。表达式的使用格式如下:表达式的使用格式如下:其中,其中,expression部分是表达式的内容,部分是表达式的内容,它是一个有计算结果的它是一个有计算结果的JSP表达式(注意,表达式(注意,表达式一定要有一个可以输出的值),如表达式一定要有一个可以输出的值),如数学计算式子、有返回值的函数、变量等。数学计算式子、有返回值的函数、变量等。3脚本片段脚本片段 脚本片段(脚本片段(Scriptlets)也称为代码片)也称为代码片段,
38、它是一个有效的段,它是一个有效的Java程序段,是程序段,是JSP中的代码部分。在这个部分中可以使用几中的代码部分。在这个部分中可以使用几乎任何乎任何Java的语法来编制程序,它是嵌放的语法来编制程序,它是嵌放在在标记中的,语法格式如下:标记中的,语法格式如下:4注释注释 注释是程序设计中的常用工具,注释注释是程序设计中的常用工具,注释通常有两方面的作用:一个作用是作为提通常有两方面的作用:一个作用是作为提示,让人可以从注释信息中了解某段程序示,让人可以从注释信息中了解某段程序的功能或设计思想,在阅读的功能或设计思想,在阅读/编写程序时提编写程序时提供参考信息;另一个作用是将未完成的或供参考信
39、息;另一个作用是将未完成的或有错误的某个程序块通过改为注释而隐藏有错误的某个程序块通过改为注释而隐藏起来,使其暂时不参与程序的执行,这种起来,使其暂时不参与程序的执行,这种方式也适用于程序调试,即将调试时编写方式也适用于程序调试,即将调试时编写的调试语句作为注释隐藏起来。的调试语句作为注释隐藏起来。JSP中的注释可以分为两类:一类是中的注释可以分为两类:一类是输出到客户端,用户在查看源文件时可以输出到客户端,用户在查看源文件时可以看见,另一类是仅在服务器端,供开发者看见,另一类是仅在服务器端,供开发者使用的,这种注释仅服务器端可见,不会使用的,这种注释仅服务器端可见,不会发送到客户端。发送到客
40、户端。1变量变量 变量是指在程序运行过程中,值可以变量是指在程序运行过程中,值可以发生变化的量。与发生变化的量。与Java一样,一样,JSP中的变中的变量也遵循量也遵循“先定义,后使用先定义,后使用”的原则,变的原则,变量在使用前,都要求先进行定义其数据类量在使用前,都要求先进行定义其数据类型。型。在定义时系统会为变量分配固定的内在定义时系统会为变量分配固定的内存,在程序执行中可以按照变量名对其中存,在程序执行中可以按照变量名对其中的内容进行访问。的内容进行访问。2基本数据类型基本数据类型 JSP中的数据类型可以分为基本数据中的数据类型可以分为基本数据类型与复合数据类型两大类。基本数据类类型与
41、复合数据类型两大类。基本数据类型有四类:整型、浮点型、布尔型、字符型有四类:整型、浮点型、布尔型、字符型。复合数据类型是建立在基本数据类型型。复合数据类型是建立在基本数据类型之上的,有字符串型(之上的,有字符串型(String)、数组)、数组(Array)、类()、类(Class)和对象()和对象(Object)等。这里先介绍等。这里先介绍JSP的基本数据类型。的基本数据类型。JSP中的整型数据用于表示整数,根据其中的整型数据用于表示整数,根据其数据所占内存的大小,又可分为四种,如数据所占内存的大小,又可分为四种,如表表3-1所示。所示。数据类型数据类型关键字关键字 字长(位)字长(位)表表
42、数数 范范 围围缺省值缺省值字节型字节型byte81281270短整型短整型short1632768327670整型整型int32214748364821474836470长整型长整型long64 922337203685477580892233720368547758070 浮点型数据于表示带有小数位的数,根据浮点型数据于表示带有小数位的数,根据其数据所占内存的大小,又可分为两种,其数据所占内存的大小,又可分为两种,如表如表3-2所示。所示。数据类型数据类型关键字关键字 字长(位)字长(位)表表 数数 范范 围围缺省值缺省值浮点型浮点型float321.4013E-453.4.28E+380
43、.0双精度型双精度型double642.2255E-2081.7977E+3080.0 JSP中的字符型数据用于表示一个字中的字符型数据用于表示一个字符,即表示单个字符。由于符,即表示单个字符。由于JSP中使用的中使用的是是16位的位的Unicode字符集,因此,字符型数字符集,因此,字符型数据实质上是一个据实质上是一个16位的无符号整数。如表位的无符号整数。如表3-3所示。所示。数数 据据 类类 型型关关 键键 字字字长(位)字长(位)表表 数数 范范 围围缺缺 省省 值值字符型字符型char16065535u0 运算符又称为操作符,是数据间进行运算符又称为操作符,是数据间进行运算的符号。运算的符号。JSP的运算符源于的运算符源于Java,所,所以有丰富的运算符。按运算类型可分为赋以有丰富的运算符。按运算类型可分为赋值运算符、算术运算符、逻辑运算符、关值运算符、算术运算符、逻辑运算符、关系运算符、位运算符等;按运算对象(又系运算符、位运算符等;按运算对象(又称为操作数)的个数又可分为单目运算符、称为操作数)的个数又可分为单目运算符、双目运算符和三目运算符。双目运算符和三目运算符。1算术运算符算术运算符2关系运算符关系运算符3逻辑运算符逻辑运算符4赋值运算符赋值运算符5类型转换运算符类型转换运算符6条件运算符条件运算符