···························································· 第3 章 chapter3 Java语言基础 本章要点 本章介绍Java语言编程技术。主要内容包括Java语言简介、Java语言的基本语法、 Java语言的类与对象。 3.1 Java 语言简介 本章主要介绍Java语言编程技术,通过本章的学习,读者可以掌握Java语言的基本 语法、Java语言的类与对象,并结合案例加以练习,最终实现在HTML页面中熟练编写 Java脚本,完成JSP页面的开发。 3.1.1 Java 的由来 自计算机问世以来,计算机技术的发展可谓日新月异。尤其是进入21世纪以后互 联网技术异军突起,使得基于网络的应用更加普遍。Java出现之前,Internet上的信息只 是一些简单的HTML文档,节点之间仅可以传送一些文本和图片,交互性能较差。同 时,Internet的发展又使得Internet的安全问题显得极为突出。这些都是传统的编程语 言所无法解决的。 Java语言起初是Sun公司开发的一种与平台无关的软件技术,是为一些消费性电子 产品而设计的一个通用环境。后来Sun公司将这种技术应用于Web上并于1994年开 发出了HotJava(Java的第一个版本)。1995年Sun公司正式推出了Java语言。 3.1.2 Java 的特点 Java语言的出现实现了页面的互动,而且Java语言以其平台无关性、强安全性、语言 简洁、面向对象以及适用于网络等特点,已成为Internet网络编程语言事实上的标准。 1.平台无关性 Java语言引进虚拟机原理,并运行于虚拟机,用Java编写的程序能够运行于不同平 台上。 ◆ 54 W eb 编程技术(第 2 版) 2. 简单性 Java语言去掉了C++语言的许多功能,又增加了一些很有用的功能,使得Java语言 的功能更加精准。 3. 面向对象 Java语言类似于C++语言,继承了C++语言的面向对象技术,是一种完全面向对象 的语言。 4. 安全性 Java语言抛弃了C++的指针运算,程序运行时,内存由操作系统分配,从而避免病毒 通过指针侵入系统,同时,a语言对程序提供了安全管理器,防止程序的非法访问。 Jav 5. 分布性 Java语言建立在扩展TCP/IP 网络平台上。库函数提供了用HTTP 和FTP 协议传 送和接收信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。 6. 动态性 Java语言适应动态变化的环境。Java程序需要的类能动态地被载入到运行环境,也 可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java语言中的类有一 个运行时刻的表示,能进行运行时刻的类型检查。 7. 健壮性 Java语言的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保 证。对指针的丢弃是Java的明智选择。Java致力于检查程序在编译和运行时的错误。 类型检查可帮助查出许多开发早期出现的错误。Java自己操纵内存减少了内存出错的 可能性。Java的安全检查机制使得Java更具健壮性。 8. 多线程性 Java环境本身就是多线程的。若干系统线程运行,负责必要的无用单元回收、系 统维护等系统级操作;另外,Java语言内置多线程控制,可以大大简化多线程应用程序 的开发。Java提供了一个类Thread,由它负责启动运行,终止线程,并可检查线程 状态。 9. 可移植性 Java主要靠Java虚拟机(JVM)在目标码级实现平台无关性。用Java编写的应用程 序不用修改就可在不同的软硬件平台上运行。 第◆3 章 Java 语言基础5 5 3.1.3 Java 语言程序简介 Java语言程序实际上有两种:一种是Java应用程序(Application),它是一种独立的 程序,不需要任何Web浏览器来执行,可运行于任何具备Java运行环境的机器中。另一 种是Java小应用程序(Applet),是运行于Web浏览器中的一个程序,它通常由浏览器下 载到客户端,并通过浏览器运行。Applet通常较小,下载时间较短,通常嵌入HTML页 面中。 1.应用程序 Java应用程序是在本地机上运行的程序,它含有一个main()方法,并以该方法作为 程序的入口,可以通过解释器(java.exe)直接独立运行,文件名必须与main()所在类的类 名相同。 下面我们给出一个简单的Java程序ex3-1.java,其源程序如下所示。 ex3-1.java 源程序 class ex3-1 { public static void main(String args[]) { System.out.print("This is a Java Example!"); }} 图3-1 ex3-1的运行结果 我们在DOS命令提示符下输入“javacex3-1. java”,将编译ex3-1.java 程序,如果成功将生成 FirstJavaPrg.class 字节码文件。然后输入“java ex3-1”运行该程序,结果显示如图3-1所示。 2.小应用程序 下面我们给出一个简单的Applet小程序ex3-2.java,其源程序如下所示。 ex3-2.java 源程序 import java.awt.*; import java.applet.*; public class ex3-2 extends Applet {p ublic void paint(Graphics g) { g.drawString("This is Second Java Example!",100,20); } } 我们在DOS命令提示符下输入“javacex3-2.java”,将编译该程序,如果成功将生成 SecondJavaPrg.class字节码文件。然后建立一个与类名ex3-2相同但扩展名为html的 文件ex3-2.html,内容如下: 5 6 ◆W eb 编程技术(第2 版) SecondJavaPrg.html 在DOS方式下输入“appletviewerex3-2.html”后按Enter键,将执行上述Applet程 序,结果如图3-2所示。 图3-2 ex3-2.html的运行结果 3.2 Java 的基本语法 3.2.1 Java 语言的标识符与关键字 1.标识符 与其他高级语言类似,Java语言中的标识符可以定义变量、类或方法等。Java语言 中规定标识符是以字母、下画线(_)或美元符号($)开始的,其后也可跟数字、字母、下画 线或美元符号组成的字符序列。 注意: (1)标识符区分大小写,例如a和A 是两个不同的变量名,没有长度限制,我们可以 为标识符取任意长度的名字。 (2)标识符不能是关键字,但是它可以包含关键字作为它的名字的一部分。例如, thisone是一个有效标识符,但this却不是,因为this是一个Java关键字。 下面是合法的标识符:score,stu_no,sum,$123,total1_2_3。下面是非法的标识 符:stu.name,2sum,class。 Java语言采用的是Unicode编码字符集(即统一编码字符集),在这种字符集中,每 个字符用2字节即16位来表示,包含65535个字符。其中前256个字符表示ASCII码, 使其对ASCII码具有兼容性,后面26000个字符用来表示汉字、日文片假名、平假名和朝 鲜文等。但Unicode编码字符集只用于Java平台内部,当涉及打印、屏幕显示、键盘输入 等外部操作时,仍由具体计算机操作系统决定表示方法。 2.关键字 在Java语言中,有些标识符已经具有固定的含义和专门的用途,不能在程序中当作 第◆3 章 Java 语言基础5 7 一般的标识符来随意使用,这样的标识符称为关键字。Java语言中的保留字均用小写字 母表示。 Java语言中的关键字如下: abstract,boolean,break,byte,case,catch,class,char,continue,default,do,double, else,extends,false,final,finally,float,for,if,implements,import,inner,instanceof,int, interface,long,native,new,null,package,private,protected,public,rest,return,short, static,super,switch,synchronized,this,throw,throws,transient,true,try,void,volatile, while。 注意: (1)true、false和null必须为小写。 (2)无sizeof运算符,因为Java语言的平台无关性,所有数据类型的长度和表示是 固定的。 (3)goto和const不是Java语言的关键字。 3.2.2 Java 语言的基本数据类型 Java语言数据类型有简单数据类型和复合数据类型两大类。简单数据类型包括整 数类型(byte,short,int,long)、浮点类型(float,double)、字符类型char、布尔类型 (boolean);复合数据类型包括类(class)、接口(interface)、数组。 1.整数类型 在Java语言中有4种整数类型,可分别使用关键字byte,short,int和long来进行声 明(见表3-1)。 表3-1 Java语言的整数类型 数据类型所占位数数的范围 byte 8 -27~27-1 short 16 -215~215-1 int 32 -231~231-1 long 64 -263~263-1 整数类型的数字有十进制、八进制和十六进制三种表示形式。首位为“0”表示是八 进制的数值,首位为“0x”表示是十六进制的数值。例如12表示十进制数12;012是八进 制整数,表示十进制数10;0x12是十六进制整数,表示十进制数18。 2.浮点类型 Java语言有两种浮点类型:float(单精度)和double(双精度)(见表3-2)。如果一个 数字后带有字母F或f为float类型;带有字母D或d,则该数为double类型;如果不明 确指明浮点数的类型,默认为double类型。例如: 5 8 ◆W eb 编程技术(第2 版) 2.5876(double型浮点数); 1.5E12(double型浮点数); 3.14f(float型浮点数)。 表3-2 Java语言的浮点类型 数据类型所占位数数的范围 float 32 3.4e-038~3.4e+038 double 64 1.7e-308~1.7e+308 3.字符类型char 使用char类型可表示单个字符,字符型数据代表16位的Unicode字符,字符常量是 用单引号括起来的一个字符,如‘c’,‘F’等。与C、C++ 相同,Java也提供转义字符(见 表3-3),以反斜杠(\)开头,将其后的字符转变为另外的含义。 表3-3 Java语言的转义字符 转义字符含 义 \b 退格 \t Tab制表 \n 换行 \r 硬回车 \" 双引号 \' 单引号 \\ 反斜杠 \ddd 1~3位八进制数据所表示的字符 \uxxxx 1~4位十六进制数据所表示的Unicode字符 4.布尔类型boolean 布尔类型只有两个值:false和true。 注意:在Java语言中不允许将数字值转换成逻辑值,这一点与C语言不同。 5.常量 Java语言中的常量是用关键字final来定义的。其定义格式为: final Type varName = value [, varName [=value]…]; 例如: final int StuNum = 50,Cnum=6; 第◆3 章 Java 语言基础5 9 6.变量 变量是Java程序中的基本存储单元,它的定义包括变量名、变量类型和作用域几个 部分。其定义格式为: Type varName [= value ][{, varName [=value]}]; 例如: int n = 3, n1 = 4; char c='a'; 3.2.3 Java 语言的运算符与表达式 1.运算符 在程序设计中,我们经常要进行各种运算,而运算符正是用来表示某一种运算的符 号。按照运算符功能来分,Java语言所提供的运算符可分为算术运算符(见表3-4)、赋值 运算符、关系运算符、逻辑运算符、位运算符、条件运算符等。 表3-4 Java语言的算术运算符 运 算 符功 能运 算 符功 能 +(一元) 取正值/ 除法 -(一元) 取负值% 求模运算(即求余数) + 加法++ 加1 - 减法-- 减1 * 乘法 1)算术运算符 (1)自增运算符在操作数左右出现的不同。i++,i--先使用变量的值,然后再自 增或自减,而++i,--i先自增或自减然后再使用变量的值。 (2)Java语言中,运算符“+”除完成普通的加法运算外,还能够进行字符串的连接。 如“ab”+“cd”,结果为“abcd”。 (3)与C、C++语言不同的是取模运算(%)其操作数可以是浮点数,例如13.4%4=1.4。 2)赋值运算符 赋值运算符就是用来为变量赋值的。最基本的赋值运算符就是等号“=”,其格 式为: 变量名=值 例如: int a=1; 6 0 ◆W eb 编程技术(第2 版) 在Java语言中,还提供了一种叫算术赋值运算符(见表3-5)。 表3-5 Java语言的赋值运算符 运 算 符实 例说 明 += X+=2 等价于X=X+2 -= X-=2 等价于X=X-2 *= X*=2 等价于X=X*2 /= X/=2 等价于X=X/2 %= X%=2 等价于X=X%2 3)关系运算符 在使用Java语言进行程序设计时,也常常需要对两个对象进行比较,关系运算符用 来比较两个值。关系运算符都是二元运算,关系运算的结果返回布尔类型的值true或 false(注意不是C或C++中的1或0)。关系运算符常与布尔逻辑运算符一起使用,作为 流控制语句的判断条件。 Java语言提供了6种关系运算符:>、>=、<、<=、==、!=。Java语言中,任何 数据类型的数据(包括基本类型和组合类型)都可以通过==或!=来比较是否相等(这 与C或C++不同)。 4)逻辑运算符 逻辑运算符(见表3-6)又称为布尔运算符,是用来处理一些逻辑关系的运算符,它最 常应用于流程控制。Java语言中逻辑运算符包括与运算符“&&”、或运算符“‖”、非运 算符“!”。&&、‖为二元运算符,实现逻辑与、逻辑或;!为一元运算符,实现逻辑非。 表3-6 Java语言的逻辑运算符 op1 op2 op1&&op2 op1||op2 !op1 false false false false true false true false true true true false false true false true true true true false 对于布尔逻辑运算,先求出运算符左边的表达式的值。对或运算如果为true,则整 个表达式的结果为true,不必对运算符右边的表达式再进行运算;同样,对与运算,如果 左边表达式的值为false,则不必对右边的表达式求值,整个表达式的结果为false。 5)位运算符 位运算符用来对二进制位进行操作。Java中提供的位运算符有:&(按位与)、|(按 位或)、^(按位异或)、~(按位取反)、>>(向右移位)、< <(向左移位)、> > >(向右移位,用 零来填充高位)。位运算符中,除~以外,其余均为二元运算符,操作数只能为整型和字 符型数据。 第◆3 章 Java 语言基础6 1 Java语言使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位 为0,负数的符号位为1。补码的规定如下:对正数来说,最高位为0,其余各位代表数值 本身(以二进制表示),如+42的补码为00101010。对负数而言,把该数绝对值的补码按 位取反,然后对整个数加1,即得该数的补码。如-42的补码为11010110(即+42的补 码00101010按位取反11010101,加1即为11010110)用补码来表示数,0的补码是唯一 的,都为00000000。 (1)按位与运算(&):参与运算的两个值,如果两个相应位都为1,则该位的结果为 1,否则为0。按位或运算(|):参与运算的两个值,如果两个相应位都是0,则该位结果为 0,否则为1。按位异或运算(^):参与运算的两个值,如果两个相应位的某一个是1,另一 个是0,那么按位异或(^)在该位的结果为1;也就是说,如果两个相应位相同,输出为0, 否则为1。 (2)按位取反运算(~):按位取反生成与输入位相反的值———若输入0,则输出1; 输入1,则输出0。 (3)右移位运算符>>:执行一个右移位(带符号),左边按符号位补0或1。例如: int a=16,b; b=a>>2; //b=4 (4)运算符>>>:同样是执行一个右移位,只是它执行的是不带符号的移位。也就 是说,对以补码表示的二进制数操作时,在带符号的右移中,右移后左边留下的空位中填 入的是原数的符号位(正数为0,负数为1);在不带符号的右移中,右移后左边留下的空 位中填入的一律是0。 (5)左移位运算符(<<):执行一个左移位。做左移位运算时,右边的空位补0。在 不产生溢出的情况下,数据左移1位相当于乘以2。例如: int a=64,b; b=a<<1; //b=128 6)条件运算符 在Java语言中,条件运算符(?:)使用的形式是: 表达式1 ?表达式2 : 表达式3; 其运算规则与C语言中的完全一致:先计算表达式1的值,若为真,则整个表达式的 结果是表达式2的值,否则,整个表达式的结果取表达式3的值。 7)其他运算符 (1)分量运算符.:用于访问对象实例或者类的类成员函数。 (2)下标运算符[]:是数组运算符。 (3)对象运算符instanceof:用来判断一个对象是不是某一个类或者其子类的实例。 如果对象是该类或者其子类的实例,返回true;否则返回false。 (4)内存分配运算符new:new运算符用于创建一个新的对象或者新的数组。 (5)强制类型转换运算符(类型):强制类型转换的格式是: (数据类型)变量名 6 2 ◆W eb 编程技术(第2 版) 经过强制类型转换,将得到一个在“()”中声明的数据类型的数据,该数据是从指定 变量所包含的数据转换而来的。值得注意的是,指定变量本身不会发生任何变化。 将占用位数较长的数据转化成占用位数较短的数据时,可能会造成数据超出较短数 据类型的取值范围,造成“溢出”。如: long i=10000000000; int j=(int)i; 因为转换的结果已经超出了int型数据所能表示的最大整数(4294967295),造成溢 出,产生了错误。 方法调用运算符():表示方法或函数的调用。 下面给出Java语言中各种运算符的优先级,如表3-7所示。 表3-7 Java语言的运算符优先级 优先次序运 算 符 1 . [] ()(方法调用) 2 ! ~ ++ -- +(一元) -(一元) instanceof 3 (类型) new 4 * / % 5 + - 6 << >> >>> 7 < <= >= > 8 == != 9 & 10 ^ 11 | 12 && 13 || 14 ?: 15 = += -= *= /= &= |= ^= <<= >>= . >>= 2.表达式与数值类型的相互转换 1)表达式 表达式是由操作数和运算符按一定的语法形式组成的符号序列。一个常量或一个 变量名是最简单的表达式,其值即该常量或变量的值;表达式的值还可以用作其他运算 的操作数,形成更复杂的表达式。例如: y=--x; 表达式的计算方法可以归纳成以下两点。 (1)有括号先算括号内的,有乘除先乘除,最后算加减。 第◆3 章 Java 语言基础6 3 (2)存在多个加减或多个乘除,则从左到右进行。 2)数值类型的互相转换 当不同数据类型的数据参加运算时,会涉及不同数据类型的转换问题。Java程序 里,类型转换有两种:自动类型转换(或称隐含类型转换)和强制类型转换。 在实际中常会将一种类型的值赋给另外一种变量类型,如果这两种类型是兼容的, Java将执行自动类型转换。Java语言赋值运算的自动类型转换规则如下: byte→short→int→long→float→double或者byte→char→int→long→float→ double。 以上规则表明byte可以转换成char、short、int、long、float和double类型。short 可以转换成int、long、float和double类型。不是所有的数据类型都允许自动(隐含)转 换。例如,下面的语句把long型数据赋值给int型数据,在编译时就会发生错误: long a=100; int b=a; 这是因为当把占用位数较长的数据转换成占用位数较短的数据时,会出现信息丢失 的情况,因而不能够自动转换。这时就需要利用强制类型转换,执行非兼容类型之间的 类型转换。上面的语句写成下面的形式就不会发生错误: long a=100; int b=(int)a; 3.2.4 Java 语言的基本控制语句 与C、C++相同,Java程序通过控制语句来执行程序。语句可以是单一的一条语句 (如c=a+b;),也可以是复合语句。 Java中的流控制语句包括以下几种。 (1)分支语句:if-else,break,switch,return。 (2)循环语句:while,do-while,for,continue。 (3)例外处理语句:try-catch-finally,throw。 (4)注释语句。 1.分支语句 分支语句是在多条执行路径中选择一条执行的控制结构。 1)条件语句if-else if-else语句根据判定条件的真假来执行两种操作中的一种,格式为: if(条件表达式) {语句序列1;} [else {语句序列2;}] 注意:条件表达式是任意一个返回布尔型数据的表达式(这比C、C++的限制要严格)。 6 4 ◆W eb 编程技术(第2 版) (1)每个单一的语句后都必须有分号。 (2)语句序列1、语句序列2可以为复合语句,这时要用花括号{}括起来。{}外面不 加分号。 (3)else子句是任选的。 (4)若条件表达式的值为true,则程序执行语句序列1,否则执行语句序列2。 (5)else子句不能单独作为语句使用,它必须和if配对使用。else总是与离它最近 的if配对。可以通过使用花括号{}来改变配对关系。 如: if(x>0) y=1; else y=-1; if-else语句的一种特殊形式为: if(条件表达式1){ 语句序列1 }else if(条件表达式2){ 语句序列2 } … }else if(条件表达式M){ 语句序列M }else{ 语句序列N } 如: if(x<0) y=-1; else if(x>0) y=1; else y=0; 2)多分支语句switch switch语句(又称开关语句)是和case语句一起使用的,其功能是根据某个表达式的 值在多个case引导的多个分支语句中选择一个来执行,它的一般格式如下: switch(表达式){ case 值1: 语句序列1;break; case 值2: 语句序列2;break; …c ase 值N: 语句序列N;break; [default: 语句序列N+1;] } 注意: (1)表达式的值必须是符合byte,char,short,int类型的常量表达式,而且所有case 子句中的值是不同的。 (2)default子句是任选的。当表达式的值与任一case子句中的值都不匹配时,程序 第◆3 章 Java 语言基础6 5 执行default后面的语句。如果表达式的值与任一case子句中的值都不匹配且没有 default子句,则程序不作任何操作,而是直接跳出switch语句。 (3)case表达式只是起语句标号作用,并不是在该处进行条件判断,因此应该在执行 一个case分支后,可以用break语句来使流程跳出switch结构。在一些特殊情况下,多 个不同的case值要执行一组相同的操作,这时可以不用break语句。 (4)case分支中包括多个执行语句时,可以不用花括号{}括起。 下面我们给出使用switch语句的例程ex3-3.java,该程序能够根据考试成绩的等级 打印出百分制分数段。其源程序如下。 ex3-3.java 源程序 public class ex3-3 {p ublic static void main(String args[]) { char grade='B'; switch(grade) { case 'A':System.out.println("85-100");break; case 'B':System.out.println("70-84");break; case 'C':System.out.println("60-69");break; case 'D':System.out.println("<60"); break; default:System.out.println("error"); } } } 运行结果如图3-3所示。 图3-3 ex3-3.java的运行结果 上述程序如果写成下面形式: public class ex3-3 {p ublic static void main(String args[]) { char grade='B'; switch(grade) { case 'A':System.out.println("85-100"); case 'B':System.out.println("70-84"); case 'C':System.out.println("60-69"); case 'D':System.out.println("<60"); default:System.out.println("error"); } } } 6 6 ◆W eb 编程技术(第2 版) 运行结果如图3-4所示。 图3-4 改写后的ex3-3.java的运行结果 2.循环语句 在程序中经常需要在一定的条件下反复执行某段程序,这时可以通过循环结构来控 制实现。Java语言中有三种循环控制语句,分别是while、do-while和for语句。 1)while语句 while语句的格式如下: while(条件表达式) { 循环体语句组; } 在循环刚开始时,先计算一次“条件表达式”的值,当结果为真时,便执行循环体,否 则,将不执行循环体,直接跳转到循环体外执行后续语句。每执行完一次循环体,都会重 新计算一次条件表达式,当结果为真时,便继续执行循环体,直到结果为假时结束循环。 下面我们给出用while语句实现1~100累计求和的例程ex3-4.java,其源程序如下。 ex3-4.java 源程序 public class ex3-4{ public static void main(String args[]){ int n=1,sum=0; while(n<101){ sum+=n++; }S ystem.out.println("\nThe sum is "+sum); }} 运行结果如图3-5所示。 图3-5 ex3-4.java的运行结果 2)do-while语句 do-while语句的格式如下: do { 循环体语句组; }while(条件表达式); 第◆3 章 Java 语言基础6 7 do-while循环与while循环的不同在于:它先执行循环中的语句,然后再判断结果 是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执 行一次循环语句。下面我们给出用do-while语句实现1~100累计求和的例程ex3-5. java,其源程序如下。 ex3-5.java 源程序 public class ex3-5 { public static void main(String args[]) { int n=1,sum=0; do{ sum+=n++; }while(n<101); System.out.println("\nThe sum is"+sum); } } 3)for语句 for语句的格式如下: for(表达式1;表达式2;表达式3) { 循环体语句组; } 表达式1一般是一个赋值语句,用来给循环控制变量赋初值;表达式2是一个布尔 类型的表达式,用来决定什么时候终止循环;表达式3一般用来修改循环变量,控制变量 每循环一次后如何变化。这三部分之间用“;”分开。 for语句的执行过程如下。 (1)在循环刚开始时,先计算表达式1。 (2)根据表达式2的值来决定是否执行循环体。表达式2是一个返回布尔值的表达 式,若该值为假,将不执行循环体,并退出循环;若该值为真,将执行循环体。 (3)执行完一次循环体后,计算表达式3。 (4)转入第(2)步继续执行。 for语句通常用来执行循环次数确定的情况(如对数组元素进行操作),也可以根据 循环结束条件执行循环次数不确定的情况。初始化、终止以及迭代部分都可以为空语句 (但分号不能省),三者均为空时,相当于一个无限循环。for语句是三个循环语句中功能 最强,使用最广泛的一个。下面我们给出用for语句实现1~100累计求和的例程ex3-6. java,其源程序如下。 ex3-6.java 源程序 public class ex3-6 {public static void main(String args[]) { int sum=0; 6 8 ◆W eb 编程技术(第2 版) for(int i=1;i<=100;i++) { sum+=i; } System.out.println("\n The sum is" +sum); } } 4)跳转语句 跳转语句用来实现循环执行过程中的流程转移。在Java语言中有两种跳转语句: break语句和continue语句。break语句用于强行退出循环,不再执行循环体中剩余的语 句。而continue语句用来结束本次循环,跳过循环体中剩余的语句,接着进行循环条件 的判断,以决定是否继续循环。下面我们给出用continue语句计算1~100的奇数和的 例程ex3-7.java,其源程序如下。 ex3-7.java 源程序 public class ex3-7 {p ublic static void main(String args[]) { int sum=0; for(int i=1;i<100; i++) { if(i%2==0) continue; sum+=i; } System.out.println("\nThe sum of odd numbers(1~100)is:"+sum); }} 运行结果如图3-6所示。 图3-6 ex3-7.java的运行结果 3.例外处理语句 例外处理语句包括try、catch、finally以及throw语句。与C、C++相比,例外处理语 句是Java所特有的。 4.注释语句 Java语言中的注释语句有以下三种形式。 ∥:用于单行注释,注释从∥开始,终止于行尾。 /*...*/:用于多行注释,注释从/*开始,到*/结束,且这种注释不能互相嵌套。 第◆3 章 Java 语言基础6 9 /**...*/:是Java所特有的doc注释,它以/**开始,到*/结束。这种注释主要是为 支持JDK工具javadoc而采用的。 3.3 Java 语言的类与对象 Java语言是完全面向对象的程序设计语言,Java语言程序的基本单位是类。Java语 言中不允许有独立的变量、常量或函数,即Java程序中的所有元素都要通过类或对象来 访问。 3.3.1 Java 语言的类 1.类声明 Java语言类声明的一般格式如下: [修饰符]class 类名[extends 父类][implements 接口名] { 类体} 其中,class是声明类的关键字,类名与变量名的命名规则一样。修饰符是该类的访 问权限,如public、private等。extends项表明该类是由其父类继承而来的,implements 项用来说明当前类中实现了哪个接口定义的功能和方法。 例如:定义两个类student和catclass: class student {… } public class catclass extends animalclass{ …} 2.类体 每个类中通常都包含数据与函数两种类型的元素,我们一般把它叫作属性和成员函 数(也称为方法),所以类体中包含了该类中所有成员变量的定义和该类所支持的所有 方法。 class 类名 { 类成员变量声明 类方法声明 } 1)成员变量的声明 简单的成员变量声明的格式为: [修饰符] 变量类型 变量名[=变量初值]; 7 0 ◆W eb 编程技术(第2 版) 例如: int x,y; float f=5.0; 2)类方法的声明 类方法相当于C或C++中的函数。类方法声明的格式为: [修饰符] 返回值类型 方法名(参数列表) {方法体} 注意:每一个类方法必须返回一个值或声明返回为空(void)。 3)构造方法 在Java程序设计语言中,每个类都有一个特殊的方法即构造方法。构造方法名必须 与类名相同,且没有返回类型。构造方法的作用是构造并初始化对象,构造方法不能由 编程人员显式地直接调用,是在创建一个类的新对象的时候,由系统来自动调用的。另 外,Java语言支持方法重载,所以类可以有多个构造方法,它们可以通过参数的数目或类 型的不同来加以区分。 例如: class MyAnimals { int dog,cat; count() { dog=10; cat=20; } count(int dognumber,int catnumber) { this.dog=dognumber; this.cat=catnumber; } } 这里的关键字this是用来在方法中引用创建它的对象,this.dog应用的是当前对象 的成员变量dog。 3.3.2 Java 语言的对象 当我们创建了自己的类之后,通常需要使用它来完成某种工作。这时可以通过定义 类的实例———对象来实现这种需求。 1.对象的生成 对象的生成包括声明、实例化和初始化三方面。首先必须为对象声明一个变量,其 格式为: 第◆3 章 Java 语言基础7 1 类型 对象名; 其中,类型为复合数据类型(包括类和接口)。 例如: student st1; 但仅有对象的声明是不够的,还要为对象分配内存空间,即实例化。创建类实例,要 使用关键字运算符new。用new可以为一个类实例化多个不同的对象,这些对象分别占 用不同的内存空间。例如: st1=new student(); 也可表示为: student st1=new student(); student st2=new student("zhang",68,72,85); 2.对象的引用 1)引用对象的成员变量 其引用格式为: objectReference.variable; 其中,objectReference是一个已生成的对象,例如上例中生成了对象st1,就可以用st1. name来访问其成员变量了。 2)调用对象的方法 其引用格式为: objectReference.method(); 下面给出一个有关对象成员变量的引用及方法调用的例程ex3-8.java。 ex3-8.java 源程序 class ex3-8{ String name; float sc1,sc2,sc3,ave; Student(){ name="wang"; sc1=60; sc2=82; sc3=74; }S tudent(String str,float a,float b,float c){ name=str; sc1=a; sc2=b; sc3=c; } 7 2 ◆W eb 编程技术(第2 版) float average(){ ave=(sc1+sc2+sc3)/3; return ave; }p ublic static void main(String args[]){ Student st1=new Student(); Student st2=new Student("zhang",78,89,92); System.out.println("\nName score1 score2 score3 average"); System.out.println(st1.name+" "+st1.sc1+" "+st1.sc2+" "+st1.sc3+" "+st1.average()); System.out.println(st2.name+" "+st2.sc1+" "+ st2.sc2+" "+ st2.sc3+" "+st2.average()); }} 运行结果如图3-7所示。 图3-7 ex3-8.java的运行结果 本章小结 Java是由Sun公司推出的Java程序设计语言和Java平台的总称。用Java实现的 HotJava浏览器(支持JavaApplet)显示了Java的魅力:跨平台、强安全性、动态的Web、 语言简洁、Internet计算、面向对象以及适用于网络,已成为Internet网络编程语言事实 上的标准。本章要求重点理解Java语言的语法基础,掌握Java面向对象编程的思想,了 解JavaApplet编程技术。Java技术的出现推动了Web的迅速发展,常用的浏览器现在 均支持JavaApplet。 习题及实训 1.简述Java面向对象程序设计语言的特点。 2.Java语言包含了哪些基本数据类型? 各自是如何规定的? 3.Java语言包括几种不同类型的控制语句? 4.什么是类和对象? 请说出Java中类和对象之间的关系。 5.请定义一个Java类。 6.给出如下一个Java源程序MyJavaFile.java。请检查其正确性,在JDK 环境下编 译运行该程序并说出该程序实现的功能。