Java 程序设计实验指导书
桂林电子科技大学计算机科学与工程学院
汪华登 编著
修订日期:2013.3.7
桂林电子科技大学计算机科学与工程学院 Java 实验指导书
前 言
面向对象是当今最流行的软件系统设计和开发思想。Java 作为一门完全面向对象的程序设计语言,
具有可移植性强、健壮安全、支持多线程与分布式系统设计等优点,已在很多大中型企业和移动设备的
应用系统开发中广泛应用。Java 语言的以上特点,使得它成为当前的主流软件开发语言之一。作为推出
Java 这门语言及其开发包 JDK 的 SUN 公司(现已被 Oracle 公司合并),它所推出的关于 Java 程序设计
的 SCJP(Sun 认证 Java 程序员)以及 SCJD(Sun 认证 Java 开发员)等认证也广受业界认可。目前的全国计
算机水平考试和计算机等级考试也都设置了 Java 语言语种。由于 Java 具有完全面向对象的特性而语法
又相对比 C++语言简单,它也越来越多地被用在面向对象程序设计的教学当中,避免了学生因 C++语法太
难而难以入门的缺点。
除了涉及桌面应用软件开发的 Java SE 开发技术(即以前的 J2SE)之外,以 Java 语言为基础的 Java
EE(即以前的 J2EE)开发技术,通过 JSP、Servlet、JavaBean、EJB 等组件技术和 Struts、Spring、Hibernate
等框架技术的应用来实现企业版应用系统,在目前的企业级系统开发中占有重要的市场份额,与
Microsoft 公司的.Net 平台一起成为企业级系统开发的两大主流方向。此外以 Java 语言为基础的 Java ME
(即以前的 J2ME)开发技术,则广泛应用在手机、信息家电等各类移动设备中。
Java 语言最大的特点是入门容易,但要想掌握它所被主要应用的 Java EE 和 Java ME 两个方向的开
发技术,则需要付出很大的努力。尤其是 Java EE,它所涉及到的语法以及组件、容器和框架技术非常
多,知识点庞杂,并要求具有 Java 语言、XML、数据库、计算机网络、数据结构以及 UML 等课程和开发
技术作为基础。因此要想真正学好 Java,是需要下一番功夫的。
我们目前学习的 Java 程序设计,只是掌握 Java 语言本身,重在语法和面向对象编程思想。根据近
几年来承担 Java 程序设计实践教学的经验和对桂电计算机学院 7 个计算机相关专业同学们学习状况的了
解,我们编写了这本实验指导书。
本指导书的特点和希望达到的目的是:
1、每个实验项目中都会给大家提供完成实验内容所需的知识储备和讲解,并配合特别设计的典型示
例,给大家提供完成实验所需的各种引导和指导,使同学们凭借本指导书书即可基本满足实验所需。本
实验教材独自成书,无论理论教材怎么更换,基本不会影响同学们完成实验。
2、实验项目和题目尽量达到难易适当和均衡,在几年来的实践教学中不断检验和完善。
3、每个实验都特别编写了预备知识部分,对完成该次实验所需要了解的理论知识点尽量进行简练的
讲述。使得大家基本不需要再查阅过多的理论教材和其它参考书,凭借本实验教材即可基本了解所需的
预备知识。
4、每个实验的预备知识部分都设计和安排了各种典型示例。这些示例前面均有详细文字说明,示例
代码有详细注释。这些示例会详细告诉大家例子的目的、所要解决的问题,在例子当中展现完成实验项
目所需的知识点的应用,并展示程序设计的规范、方法和思想。这些例子虽然并不直接告诉大家该怎么
完成实验题目,但同学们在阅读、模仿这些例子程序的过程中,会潜移默化地学到相应所需掌握的知识
点和设计方法,自然而言地能够想到解决实验题目的方法。
5、实验内容安排上,注重从基础到复杂,从易到难,在前面的实验中会提前把后面实验所需的知识
进行铺垫。使得大家的学习具有渐进性。杜绝突兀的难点和无法下手的情况,尽量做到前后连贯,统筹
兼顾。
6、关注 java 语言的版本变化和 java 语言权威认证的考点覆盖范围,在有限的学时内尽量使实验项
目内容的取舍和安排更合理。
因学时所限,Java 程序设计中的集合框架等部分重要内容在实验教材和课堂上无法全部涉及,大家
可以在课余时间继续扩大阅读面和学习深度。
1
桂林电子科技大学计算机科学与工程学院 Java 实验指导书
目 录
JAVA语言程序设计的预备知识············································································· 4
实验一 JAVA开发环境及基本语法······································································· 6
实验二 系统类和数组·····················································································13
实验三 图形界面程序的界面设计······································································19
实验四 图形界面程序的事件处理······································································26
实验五 异常·································································································35
实验六 多线程······························································································42
实验七 流与文件···························································································56
实验八 网络·································································································66
2
桂林电子科技大学计算机科学与工程学院 Java 实验指导书
《Java 语言程序设计》实验要求和注意事项(根据学校相关教学管理规定)
1、 预习报告:每次实验前必须先写好预习报告,在讲解完该次实验后老师将逐个检查并记录预习报告成
绩作为平时成绩的参考。实验的预习报告主要是该次实验内容所对应的程序,而且必须是对应该次实
验内容完整的、全部的程序,仅仅从所给的指导资料或他人处抄写一部分代码或算法的视为无效。程
序可手写或打印在普通的稿纸上,也可用 U 盘等工具带过来以电子版的形式展示。在实验完后再将
完整的实验程序手写或打印在正规的实验报告纸上,附录在最终的实验报告的后面。
2、 实验报告:按照学校实验规定,每个实验最后都要交一份实验报告。大家每做完一个实验,回去后即
利用课余时间写好实验报告。实验报告基本格式参考如下:
一、 实验目的与内容。
二、 分析设计过程:主要包括自己对题目的分析,自己的设计思想和理由,自己的设计方法等。
三、 测试数据和程序运行的结果:使用了哪些典型数据进行了一些怎样的测试,运行结果如何,程
序的交互性如何。
四、 问题与总结:所遇到的具体问题和分析解决过程,尚存在的一些问题,所获得的与课程相关、
技术相关的心得与体会。
五、 附录: 包括完整、正确的程序代码(若代码较多可截取关键代码段)及注释,特别是主要的算
法或代码必须有适当的注释,使得他人可凭借注释较快地读懂该程序。无注释的程序无成绩。
【注意】:最终的实验报告可打印,但必须使用正规实验报告纸或 A4 大小的纸张。报告雷同者成绩为不及格!
3、 实验验收:无论是预习报告还是最后的实验报告均会被打分,均严禁抄袭、雷同和潦草,否则会酌情
扣分直至无成绩。凡无预习报告者,老师可按实验教学规定给予该次实验成绩为 0 分。每次实验原则
上应当堂完成,做出来后可请老师验收,并获得动手能力这一项的成绩,原则上每次实验时只能验收
当次实验以及前 1 次实验,验收时会适当询问,非自己完成以及自己不懂者请勿申请验收,浪费彼此
的时间,请抓紧时间及时自己完成。
4、 课堂纪律:请勿迟到早退。上课时请不要听歌或聊天,不要带耳塞,不要在实验室内吃东西和扔任何
形式的废弃物。未经允许不能随便调整实验批次,有客观原因不能上课者必须有医院、年级主任等单
位或领导的书面证明和签字盖章,随意口头请假者一般均视为无效。
3
桂林电子科技大学计算机科学与工程学院 Java 实验指导书
JAVA语言程序设计的预备知识
这里的“预备知识”是贯穿于 java 程序设计始终的一些必须要注意的思想和方法,如果对这些方面
不了解、不注意,那么很可能一动手写出来的 java 程序就有错误,根本不可能通过编译,直接造成信心
和兴趣上的打击。所以请大家务必先建立起这些概念。
一、java 程序从编写到运行的一般过程和原理:先由编译器编译成后缀为 class 的字节码文件,然后由
JVM(java 虚拟机)来解释运行,可移植于不同的操作系统平台上(只要有 java 运行环境)。
二、java 的特点:从 C++演变而来,保留其优点,去除了易产生错误的功能,简化了内存管理。Java 中
没有虚函数、多继承、模板、运算符重载等 C++中相对较难的语法,其基本语法比 C++简单了很多。
具体特点有:完全面向对象、平台独立性、安全性(不支持指针,一切对内存的访问都必须通过对
象的实例变量来实现)、网络功能、数据库功能、内建的多线程功能等。
三、程序设计过程:先用文本编辑器如记事本、UltraEdit 编辑器、EditPlus 编辑器等文本编辑工具或者用
其它的 IDE(集成开发环境)软件所带的编辑功能,来编写好源代码。存成后缀为 java 的文件。然
后用 javac 和 java 命令,或其它 IDE 的编译运行功能选项,对程序进行编译、运行。
四、常用的集成开发环境(IDE)软件有:Eclipse、NetBeans、JBuilder、IntelJ、Jcreater、BlueJ 等,其中
前三种为实际开发中常用的中大型开发工具,后三种为小型、教学型编译器。Eclipse 来源于 IBM 等
公司的开源项目,它是基于插件的开发环境,除可支持 java 开发之外,如果安装了相应的插件,也
可支持其它诸如 C++等的开发,因其优异的性能和开源的特点,现在已经成为非常知名的开发平台。
其官方站点是 www.eclipse.org ,下载后解压即可使用。NetBeans 为 Sun 公司(现已被知名的甲骨文
公司(ORACLE)收购)自己推出的编译器。其特点是免费下载使用,版本更新快,汉化版也能及
时推出,并且有各种集成 Tomcat 等服务器的版本,安装方便。JBuilder 为 Borland 公司产品,其功能
也较强较全面,但比较庞大,属于不开源的商业软件。本实验指导书推荐使用 Eclipse。
五、关于 java 程序的结构。对于 java 的 Application(应用程序)而言,一个 java 程序中最多只能有一个
(也可以没有)以 public 说明的类,而且当存在 public 类时,该文件保存时的名字必须和这个类的
名称相同。而且注意,如果是在控制台下编译、执行过程中,编译命令 javac 后面应跟文件名,而执
行命令 java 后面应该跟主类名。当然如果是在 IDE 环境中则不必考虑太多这个问题,只要编译成功,
一般 IDE 软件都具有自动搜寻主类来执行的功能,但有时需要向 IDE 指明主类。java 程序文件的命
名是学习者初始阶段经常容易出错的一个问题,会导致无法编译文件,所以请务必注意。另外请特
别注意,Application 程序中是必须有 main 函数的,而且 main 函数除了其参数的名字可以改变以外,
不能遗漏任何其它的修饰符。 下面通过两个基本示例程序程序命名的问题进行理解:
//以下为第一个示例程序Helloworld.java,用于练习。这是一个非常简单的java程序:
public class HelloWorld
{
public static void main(String args[])
{
System.out.println(“Hello world!”);
}
}
4
桂林电子科技大学计算机科学与工程学院 Java 实验指导书
int a1,a2;
void pntOut(String s)
{
}
System.out.println(s);
Hello2 a_string;
a_string=new Hello2();
a_string.a1=1;
a_string.a2=2;
System.out.print("1+2 = ");
System.out.println(a_string.a2+ a_string.a1);
a_string.pntOut("hello world!");
public static void main (String args[ ])
{
}
//以下为第二个示例程序,在此程序中,按前述规则文件名应为Hello2.java,但是主类名
//却是Hello1,所以在控制台环境下编译执行时候的命令应该为javac Hello2.java , 会
//生成Hello1.class和Hello2.class两个类,然后运行的时候的命令却是java Hello1
public class Hello2
{
}
class Hello1
{
}
请注意:java 编程中,文件名、系统和自定义的类名和标识符等都是区分大小写的!标识符是由字母、
下划线或美元符开头,后接数字、字母等组成的字符序列,标识符长度不限,且不能和关键字(如 if、
while、do、int 等)同名。注释符和 C++中一样有“/* 代码段 */”和“//代码行”两种。
5
桂林电子科技大学计算机科学与工程学院 Java 实验指导书
实验一 Java开发环境及基本语法
一、实验目的
1、掌握常用的 Java 集成开发环境的使用,特别是 Eclipse 和 NetBeans。
2、掌握 Java 基本语法,重点是面向对象的思想和语法。
3、掌握控制台下(应用程序)的输入输出方法,作为后续部分实验的基础。
二、实验类型
设计型。
三、实验内容
1、打开实验室计算机上的集成开发环境 Eclipse 或 NetBeans(重点是 Eclipse),掌握其基本使用方法。
了解开发软件的各个菜单功能。会创建 java 项目(Project),会编辑和编译、运行项目代码。
2、验证和学习所给的几个例子程序及其讲解。然后自己编写一个至少由一个类构成的 Java 程序,其
功能是在运行后,能接收用户输入一个学生的姓名以及 java 课的成绩(百分制),并输出对该学生成绩是
否达到 60 分的及格分的判断(可使用 if 语句)。例如,输入学生姓名李明,然后输入成绩 50,则输出“李
明的成绩为不及格”。
3、编写一个程序来表示长方体的长宽高等数据并有计算体积的函数可供调用,长方体类从矩形类继
承而来。程序运行时能接受输入任意的 3 个数作为长方体的长、宽和高,然后能够输出所输入的长宽高
及所计算出的体积。注意不能把代码全部写在 main 函数里面,不能直接输出长宽高的乘积。在解决该问
题的程序设计中,将体积计算等功能封装成方法调用,长宽高等属性封装到矩形类和长方体类中,尽量
多地用到接口的定义、类的定义、成员变量的定义、成员函数的定义、类的继承等面向对象的语法和知
识点。在此基础上熟悉、理解和解释类的封装、继承等面向对象编程思想和概念。
四、预备知识
作为一门完全面向对象的程序设计语言,Java 语言编写的所有程序都是由类(以及接口)构成的。
所以我们需要重点掌握类的定义、修饰,对象的创建,类的继承,以及接口等面向对象语法知识。Java
中没有模板、多继承、运算符重载等 C++中比较复杂的语法部分,其面向对象语法相对简单。
大家此前一般学过 C 或 C++语言等,那么请注意,由于 Java 是“完全”面向对象的语言,任何程序
代码都是类或接口构成,所以请务必摒弃在 C 语言等的学习过程中形成的喜欢在 main 函数外部定义全局
变量等习惯,因为这些做法在 Java 中将直接成为错误。Java 程序都只由接口和(或)类构成,类中才可
定义普通数据类型或复合数据类型的成员变量。对于初学面向对象程序设计的学习者而言,类看起来很
复杂,实际上我们应该注意到:类只是由两种东西构成的,一种是成员变量,另一种是成员函数(或称
成员方法)。对于 Java 程序而言,只有在成员函数中,才可以编写和存在具体的执行语句。而在 Java 程
序的类中的成员函数中,就涉及到数据类型和循环语句等基本语法。
Java 的基本语法与 C 语言是很接近的。同样有普通数据类型变量(在 Java 中包括整型、字符型、布
尔型等)的定义,同样有 if 语句,if-else 语句,switch 语句,以及 while 循环,for 循环,do-while 循环。
此处不单独举例,大家首先可在 main 函数中自己编写简单的代码对这些基本语法概念进行练习和验证。
然后应用 Java 的面向对象语法,设计类和定义对象等,进行 Java 面向对象编程思想和语法的熟悉。
下面有多个例子程序给大家演示 Java 的部分基础语法以及如何进行数据输入和输出。
6
桂林电子科技大学计算机科学与工程学院 Java 实验指导书
/*
* 例子1.1,Output.java如下。本例告诉大家如何在控制台下输出数据。System.out对象的print方法
* 输出数据和println方法输出数据有何区别。
*/
public class Output // Java程序都由类及接口构成,所以程序至少要定义一个类
public static void main(String[] args) {
System.out.println("这是一行会换行的输出。"); // println输出一串字符并换行
System.out.print("这是一行不会换行的输出。");
System.out.print("@这也是一行不会换行的输出,会跟前一行输出连在一起。发现了吗?");
}
{
}
/*
* 例子1.2,Input.java如下,本例介绍一种在控制台下接受用户输入数据的方法:使用
* Scanner类中的方法来接收用户输入,大家可打开JDK的API帮助文档查看Scanner类及其
* 所具有的方法的介绍。
*/
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
String str; // 定义一个字符串变量str
int i;
// 定义一个整型变量i
float f;
// 定义一个浮点型变量f
Scanner sc = new Scanner(System.in); // 定义一个Scanner对象,从System.in接受输入
str = sc.next(); // 等待用户输入任意一个字符串,它会被存到str中
System.out.println("你刚输入的一串字符是:" + str); // 输出字符串str
i = sc.nextInt(); // 等待用户输入任意一个整数,它会被存到i中
System.out.println("你刚输入的一个整数是:" + i); // 输出整数i
f = sc.nextFloat(); // 等待用户输入任意一个浮点型的数,它会被存到str中
System.out.println("你刚输入的一个浮点型的数是:" + f); // 输出浮点型数f
}
}
/*
* 例子1.3 ,Stream.java如下,下面介绍另一种接受用户输入的方法:该程序段涉及
* 到java中“流”和“异常”的概念,大家可先使用做初步体会,后面的实验和讲解会
* 逐步学习这方面内容。如下代码可以接受从键盘输入一字符串并存入字符串变量str中。
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
7