mathJava程序设计实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《Java程序设计》实验指导书
淮北师范大学数学科学学院
《Java程序设计语言》实验教学大纲
一、实验教学目的和要求
《JA V A程序设计语言》是一门实践性很强的专业课程。
通过上机实验,不仅可以帮助学生较好地掌握Java语言和面向对象程序设计的基本概念、基本方法和技巧,同时也可培养学生独立设计程序的能力,理解面向对象的编程思想。
实验教学目的:
1.使学生通过实验,验证书本和课堂教学内容:逐步理解、体会、消化、巩固和补充课堂所学主要内容;
2.培养学生设计与动手能力:通过设计性的实验任务,通过实践环节理解Java语言的基本结构和程序设计方法。
通过亲手编程掌握Java 语言编程的方法,从而提高学生的分析问题、解决问题的能力和动手能力。
通过实验,要求学生应达到以下实验能力与标准:
1.熟练掌握Java程序的编辑、编译、运行步骤及程序调试的方法;
2.熟练运用Java语言进行面向对象程序设计;
3.深入理解面向对象的封装、继承和多态等特性
4.利用Java语言进行异常处理
5.能利用Java语言进行磁盘数据文件的建立及读写操作编程。
二、主要仪器设备(所开实验的主要仪器设备)
每个学生上机使用一台PC机进行程序开发,PC机的硬件、软件环境如下:
1)硬件:CPU P4 3.0GHZ 256M内存,80G 硬盘空间。
2)软件:
操作系统:Windows XP
开发工具:Editplus或者eclipse
三、实验项目名称和学时分配
四、实验课考核方式
1.实验报告:
1)在报告中重点给出调试分析过程描述:包括测试数据、测试输出结果,以及对程序
调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等);
2)根据思考题要求,重点描述需求分析、概要设计和详细设计过程,并提交包含详
细注释的源程序清单,最后详细描述程序调试分析过程。
2.考核方式
2.1 实验课成绩根据学生的实验预习、实验纪律、实验动手能力、实验结果和实验报
告等几个部分进行综合评定,并给出优、良、中、及格和不及格共五档成绩。
2.2 实验课成绩占课程总成绩的30%。
I II
目录
实验一熟悉Java程序的编辑、编译和运行环境错误!未定义书签。
实验二初步的面向对象的程序设计练习错误!未定义书签。
实验三面向对象程序设计的继承、多态等特性的练习错误!未定义书签。
实验四异常类的定义及处理 ..... 错误!未定义书签。
实验五流、文件及基于文本的应用错误!未定义书签。
《Java程序设计实验指导书》
实验一熟悉Java程序的编辑、编译和运行环境
一、实验目的
1)掌握设置 Java 程序运行环境的方法,并熟悉Java程序的集成开发工具。
2)掌握编写、编译、运行简单的Java Application和Java Applet程序的方法步骤,
初步了解java程序的特点和基本结构。
3)掌握 Java 基本数据类型、运算符与表达式。
4)理解 Java 程序语法结构,掌握顺序结构、选择结构和循环结构语法的程序设计方法。
二、实验内容
1)安装和配置JDK软件开发包。
2)编写一个Java Application,利用JDK软件包中的工具编译并运行这个程序,使之能
够输出字符串信息“Hello World! ”。
3)编写一个Java Applet,使之能够在浏览器中显示“welcome to Java Applet World”
的字符串信息。
三、实验原理
1)Java application 和Java applet程序
java程序可以分为两类:java application 和java applet。
前者是完整的应用程序,需要独立的解释器来解释运行;后者则是嵌在网页中的非独立程序,由浏览器所自带的java解释器来解释运行。
2)Java程序开发调试过程。
1
图1.1 Java程序开发流程
3) Java Application程序的编辑、编译和运行步骤
(1)在编辑器中输入源程序,文件名与公共类相同,文件后缀为.java(如HelloWorldApp.java),并将其保存到工作目录(如e:\java目录)。
(2)编译源程序
e:\java>
C:\Program Files\Java\jdk1.6.0_01\bin\javac -d . HelloWorldApp.java 若编译通过,在e:\java目录下会生成一个HelloWorldApp.class文件
(3)程序的运行
运行包含main方法的主类所编译生成的字节码文件,不用加.class后缀
e:\java>
C:\Program Files\Java\jdk1.6.0_01\bin\java–classpath . HelloWorldApp 4)Java Applet程序的编辑、编译和运行步骤
(1)在编辑器中输入源程序,将其保存为与公共类同名的java文件。
(2) 编译源程序并生成一个和源文件同名且后缀为class的字节码文件。
(3) 生成一个Html文件,并在其中的<Applet></Applet>标记中嵌入Applet字节码文件。
<APPLET>标记中必须包含三个参数:
●CODE:指明嵌入Html文件中的Java Applet字节码文件的文件名
●HEIGHT:指明Java Applet程序在Html文件所对应的Web页面中占用区域的高度。
●WIDTH:指明Java Applet程序在Html文件所对应的Web页面中占用区域的宽度。
(4)用支持Java的浏览器打开Html文件,就能看到Applet程序的运行效果。
另外JDK
《Java程序设计实验指导书》
中还提供了一个Applet Viewer工具,也可用来浏览Html中的Applet。
四、实验步骤
1)编写一个Java Application,利用JDK软件包中的工具编译并运行这个程序。
步骤(1):编写、编译Java 源程序。
打开Jcreator编辑器,新建一个java文件,键入如下程序代码:
public class Hello
{
public static void main(String args[])
{System.out.println("Hello,World!");}
}
将文件命名为Hello.java,注意保存文件Hello.java到路径
“e:\java\program\”下。
步骤(2):编译Java 源程序
Java 源程序编写后,要使用Java 编译器(javac.exe)将Java 源程序编译成
字节码文件。
Java 源程序都是扩展名为 .java 的文本文件。
编译时首先读入
Java 源程序,然后进行语法检查,如果出现问题就终止编译。
语法检查通过后,
生成可执行程序代码即字节码,字节码文件名和源文件名相同,扩展名为 .class。
打开命令提示符窗口(MS-DOS 窗口)进入Java 源程序所在路径
e:\java\program。
键入编译器文件名和要编译的源程序文件名,具体如下:
javac -d class Hello.java
按回车键开始编译(注意:文件名H 要大写,否则运行会出问题)。
如果源程序没
有错误,则屏幕上没有输出,键入“dir”按回车键后可在当前目录中看到生成了
class子目录,在class子目录下有一个同名字的.class 文件即“Hello. class”。
否则,将显示出错信息。
步骤(3):运行Java 程序
使用Java 解释器(java.exe)可将编译后的字节码文件Hello.class 解释为本地
计算机代码。
在命令提示符窗口或MS-DOS 窗口键入解释器文件名和要解释的字
节码文件名:java –classpath e:\java\program\class Hello或者java Hello,
按回车键即开始解释并可看到运行结果。
3
3)编写一个Java Applet,使之能够在浏览器中显示“welcome to Java Applet World”的字符串信息。
步骤(1):编写 HelloWorldApplet.java 程序文件,源代码如下。
import java.applet.*
import java.awt.*
public class HelloWorldApplet extends Applet
{
public void paint(Graphics g)
{ g.drawString(“welcome to Java Applet World,40,20); } }
步骤(2):保存文件为e:\java\program\HelloWorldApplet.java。
编译该文件,生成HelloWorldApplet.class字节码文件。
步骤(3):编写显示HelloWorldApplet.calss 的页面文件 HelloWorld.html,代码如下。
<html>
<applet codebase=e:/java/program/class code=HelloWorldApplet.calss width=300 height=120>
</applet >
</html>
步骤(4):在提示符窗口调用小程序查看器浏览 HelloWorld.html 页面,观察 Applet 应用程序。
五、思考题
1)编程实现:产生一个20个整数存放到数组中,然后对其按照升序进行排序,最后对排序前后的数组按照每5个数的方式输出。
2)编程实现:产生一个1-12之间的随机整数,并根据该随机整数的值,输出对应月份的英文名称。
提示:
产生0-1之间的随机数方法一:Math.random()
产生一个随机整数方法二:
import java.util.*
《Java程序设计实验指导书》
……
Random r=new Random();
Math.abs(r.nextInt())
5
实验二初步的面向对象的程序设计练习
一、实验目的
1)掌握类和构造方法的定义。
2)掌握创建类实例的方法。
3)初步掌握面向对象的编程思想
二、实验内容
1)编写程序实现如下功能:已知学生类有属性(学号、班号、姓名、性别、年龄)和方
法(获得学号、获得班号、获得性别、获得年龄、修改年龄,显示基本信息),定义一组学生对象,并初始化他们的基本信息,然后依次输出。
2)编写程序实现如下功能:已知学生类有属性(姓名、考号、综合成绩、体育成绩)和
方法(获取综合成绩、获取体育成绩、显示基本信息),学校类有静态变量(录取分数线)和方法(设置录取分数、获取录取分数线),录取类有方法(获取学生是否符合录取条件,其中录取条件为综合成绩在录取分数线之上,或体育成绩在96分以上并且综合成绩大于300分)。
现要求编写程序输出一组学生对象中被某学校录取的学生基本信息。
三、实验原理
1) 类、域、方法
类体中包括属性和方法,都是类的成员。
一个类可以定义多个域和方法。
(1)是类的静态属性,也称为变量、成员变量等,格式为:
类型名属性名;
在定义属性前,还可以加修饰符。
(2)方法是类的动态属性。
Java的方法与其它语言中的函数类似。
由方法头和方法体组成:修饰符1 ……返回类型方法名(形参列表)throws 异常列表
{
方法体语句;
}
其中,形参列表格式为:
《Java程序设计实验指导书》
形参类型形参名1,形参类型形参名2
2)类和对象
(1)类(class):抽象的集合概念。
类包括系统类库中已定义好的类和用户自定义的类(2)对象(实例instance):实际个体。
创建某个类的具体对象(类似变量声明),具体定义格式为:类名对象变量=new 类名([参数]);
(3)构造方法:构造方法的名字与类名相同。
创建对象时自动调用,并对对象进行初始化操作。
注意:构造方法前面没有返回类型定义,它没有返回值,也不是void。
[不能return];JAVA每个类都至少有一个构造方法[系统默认无参数构造方法];一旦定义了构造方法,系统不再提供默认构造方法。
(4)对象的使用:要访问或调用一个对象的域或者方法,使用 . 操作符。
一般形式:引用对象变量名.域/方法名;如 p.sayHello();
由于只能用对象变量来访问这个对象的域或方法,不通过引用变量就没有办法访问,体现了面向对象的“封装性” 。
3)静态属性和静态方法
(1)静态属性
用static修饰的域属于类的静态域(静态量,类变量),不用static修饰的为实例变量(实例域)。
静态域的特点如下:
●它们是类的域,不属于任何一个类的具体对象实例。
它保存在类的内存区域的公共
存储单元。
●对于该类的任何一个实例对象,静态域是一个公共的存储单元。
●任何一个类的对象访问它,取到的都是相同的值;
●任何一个类的对象修改它,那么也是在对同一个内存单元进行操作。
(2)静态方法
用static修饰的方法属于类的静态方法,又称为类方法。
不用static修饰的方法为实例方法。
类方法的本质是该方法属于整个类,而不是属于某个实例。
静态方法具有如下特点:
●static方法是属于整个类的,它在内存中的代码段将随着类的定义而进行分配和
装载。
而非static的方法是属于某个对象的,在这个对象创建时,对象的方法在
内存中有自己的代码段。
●static方法不能操纵属于某个对象的成员变量,只能处理属于类的成员变量,即
只能处理static域和方法。
●类方法中不能访问实例变量,也不能使用this或super。
●调用类方法可以使用类名,也可以用具体对象名。
7
四、实验步骤
1)编写程序实现如下功能:已知学生类有域变量(学号、班号、姓名、性别、年龄)和方
法(构造方法、获得学号、获得班号、获得性别、获得年龄、修改年龄,显示基本信息),定义一组学生对象,并初始化他们的基本信息,然后依次输出。
步骤(1):定义类Stduent,并添加如下域变量:
String sno; String classno; String name; char sex; int age;
步骤(2):在类Student中添加如下方法,并编写代码实现具体方法的功能:
Student(String sno,String classno,String name,char sex,int age){……} String getSno(){ ……}
String getClassno(){……}
String getSex(){……}
int getAge(){……}
void updateAge(int age){……}
void print(){……}
步骤(3):定义一个包含main方法的Application程序类TestStudent,初始化一个学生类对象数组,并利用循环语句显示所有学生的基本信息。
步骤(4): 保存文件名为TestStudent.java, 然后编译、调试和运行程序。
2)编写程序实现如下功能:已知学生类有域变量(姓名、考号、综合成绩、体育成绩)和
方法(获取综合成绩、获取体育成绩、显示基本信息),学校类有静态变量(录取分数线)和方法(设置录取分数、获取录取分数线),录取类有方法(获取学生是否符合录取条件,其中录取条件为综合成绩在录取分数线之上,或体育成绩在96分以上并且综合成绩大于300分)。
现要求编写程序输出一组学生对象中被某学校录取的学生基本信息。
步骤(1):定义类Stduent,并添加如下域变量:
String name; String id; float comScore; float score ;
步骤(2):在类Student中添加如下方法,并编写代码实现具体方法的功能:
Student(String name,String id, float comScore, float score){……} float getcomScore(){ ……}
float getscore(){……}
void print(){……}
步骤(3)定义类School,并添加静态变量
static float scoreLine;
《Java程序设计实验指导书》
添加静态方法
static float getScoreLine(){……}
static void setScoreLine(float score){……}
步骤(4)定义一个Application程序类Enroll并添加方法:
public static void main(String args[]){……}
static boolean isEnroll(Student s){……}
步骤(5)保存文件名为Enroll.java, 然后编译、调试和运行程序。
五、思考题
1、1) 定义复数类Complex,其满足如下要求(18分):
●复数类Complex 的属性有:
RealPart : double型,代表复数的实数部分
ImaginPart : double型,代表复数的虚数部分
●复数类Complex 的方法有:
Complex( double rp , double ip ) :
构造函数,形参 rp 为实部的初值,ip为虚部的初值。
Complex complexAdd(Complex a) :
将当前复数对象与形参复数对象相加,所得的结果仍是一个复数,并将结果返回给此方法的调用者。
Complex complexMinus(Complex a) :
将当前复数对象与形参复数对象相减,所得的结果仍是一个复数,并将结果返回给此方法的调用者。
public String toString( ) :
把当前复数对象的实部、虚部组合成 a+bi 的字符串形式,其中a 和 b分别为实部和虚部的数据。
(2) 编写一个完整的Java Application程序,实现如下功能:创建两个复数对象,然后让
用户从键盘输入一个运算符('+'或'-'),求取两个复数对象的和或差的结果并输出。
9
实验三面向对象程序设计的继承、多态
等特性的练习
一、实验目的
1)掌握类的继承机制。
2)熟悉类中成员变量和方法的访问控制。
3)熟悉方法或构造方法多态性。
4)熟悉接口的定义方法。
二、实验内容
1)编写程序实现如下功能:已知Person类包含三个公共域变量(姓名、性别、年龄)
和一个构造方法,Student类是Person类的派生类,包含两个新的公共域变量(学号、班号)、两个公共方法(修改年龄、显示基本信息)及一个构造方法。
定义一组学生对象,并初始化他们的基本信息,然后依次输出。
2)将Shape类分别定义为一个抽象类和接口,然后将源程序进行修改,让其实现相同功
能。
三、实验原理
1)类的继承
面向对象语言允许从一个已有的类[父类]定义新的类[子类],从而形成继承关系。
父类是所有子类的公共域和公共方法的集合,每个子类是父类的特殊化。
子类继承父类的状态和行为,同时也可以修改父类,并可以添加新的状态和行为。
(1)域的继承和添加
子类可以从父类那里继承所有的没有被private和static修饰的域。
那么子类就无需再重复定义。
还可以在子类中定义其独特的域变量:
(2)方法的继承、覆盖和添加
父类的非private方法也可以被子类自动继承。
同时子类也可以重新定义与父类同名的方法,实现对其的覆盖/重置(override/overlay)。
在覆盖父类方法时注意应保持完全相同的方法名、返回值和参数类型列表,即重写父类中的方法。
另外子类还可以重
《Java程序设计实验指导书》
载父类的方法或添加新的方法。
2)访问修饰符
Java提供4种访问权限: public、protected、private和默认。
3)抽象类和接口
(1)抽象类和抽象方法
一个方法如果没有定义方法体,则称该方法为抽象方法。
包含一个或多个抽象方法的类,称为抽象类。
定义抽象类后,其它类可以对它进行扩充并且通过实现其中的抽象方法,使抽象类具体化。
Java语言中,用abstract 关键字来修饰一个类时,这个类叫做抽象类,用abstract 关键字来修饰一个方法时,这个方法叫做抽象方法。
抽象类的语法格式如下
abstract Class{ …} //抽象类
抽象方法的语法格式如下
abstract returnType abstractMethod([paramlist]) //抽象方法抽象类必须被继承,抽象方法必须被重写。
抽象方法只需声明,无需实现,抽象类不能被实例化。
若类中包含了抽象方法,则该类必须被定义为抽象类。
(2)接口
接口是抽象类的一种,只包含常量和方法的定义,而没有方法的实现,且其方法都是抽象方法。
它的用处体现在下面几个方面:
●通过接口指明多个类需要实现的方法。
●通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系。
●通过接口了解对象的交互界面,而无需了解对象所对应的类。
接口的定义包括接口声明和接口体,接口声明的格式如下:
[public] interface interfaceName[extends listOfSuperInterface] { … }
其中,extends 子句与类声明的extends子句基本相同,不同的是一个接口可有多个
11
父接口,用逗号隔开,而一个类只能有一个基类。
4)多态的两种表现形式
(1)同一类中的方法多态(方法重载):同一类中允许多个同名方法,通过参数的数量、类型的差异进行区分。
(2)子类对父类方法的重新定义(方法覆盖):方法名、返回值和参数形态完全一样。
四、实验步骤
1)编写程序实现如下功能:已知Person类包含三个公共域变量(姓名、性别、年龄)和一个构造方法,Student类是Person类的派生类,包含两个新的公共域变量(学号、班号)、两个公共方法(构造方法、修改年龄、显示基本信息)和一个构造方法。
定义一组学生对象,并初始化他们的基本信息,然后依次输出。
步骤(1):定义类Person,并添加以下公共域变量
public String name; public char sex; public int age;
添加构造方法Person(String name,char sex,int age){……}
步骤(2):基于类Person派生类Student,并添加如下公共域变量和方法
public String classno; public String sno;
public void updateAge(int age){……}
void toString(){……}
Student(String name,char sex,int age,String sno,String name)
{ super(name,sex,age);
…….
}
步骤(3):定义一个包含main方法的Application程序类TestStudentPerson,初始化一个学生类对象数组,并利用循环语句显示所有学生基本信息。
2)输入课本例5-4的源程序,观察其运行结果,然后将Shape类分别定义为一个抽象类和接口,然后将源程序进行修改,让其实现相同功能。
步骤(1):在编辑调试工具中输入课本例5-4TestVirtualInvoke.java程序,编译运行,观察程序的运行结果,并思考为什么产生这样的结果。
步骤(2):将Shape类定义为abstact class Shape{……},然后重新定义Shape抽象类的派生类Circle、Triangle、Line,最后编译运行,观察程序的运行结果是否和
上面的结果相同。
步骤(3):将Shape定义为interface Shape{……},然后基于Shape接口实现类Circle、
《Java程序设计实验指导书》
Triangle、Line,最后编译运行,观察程序的运行结果是否和上面的结果相同。
五、思考题
(1)某小型公司,主要有三类人员:经理、兼职技术人员和兼职推销员。
这三类人员共同拥有的相关属性:姓名、编号;相关方法:获取当月薪水的getPay()方法、显示个人信息的toString()方法。
人员编号基数为1000,每创建一个人员实例对象,其编号属性的值顺序加1。
月薪计算方法:经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销人员的月薪按当月的销售额的4%提成。
要求:根据题意,自己确定需要定义的类及各类的属性、构造方法和其他方法,并编写Java Applcation程序实现功能:存储若干个职工信息,然后分行显示所有职工的姓名、编号、月工资等相关信息,另外计算所有职工的月薪总和并显示出来。
13
实验四异常类的定义及处理
一、实验目的
1)了解异常处理方法。
2)熟悉并掌握常见异常的捕获方法。
3)熟悉JDK中已经定义的若干异常类的层次结构。
4)掌握自定义异常类的创建方法。
二、实验内容
1)编写程序实现如下功能:生成并捕获到NegativeArraySizeException和
IndexOutOfBoundsException类型的异常,并显示捕获到的异常信息。
然后在此基础上生成并捕获到NullPointerException类型的异常,并显示捕获到的异常信息。
2)编写程序实现如下功能:计算两个数之和,参与求和运算的每个数的值都必须在10-20
之间,当任意一个数超出范围时,抛出自己的异常。
三、实验原理
1)异常的分类
(1)异常是一个对象,它继承自Throwable类。
(2)Error:由Java虚拟机生成并抛出,Java程序不做处理。
(3)Exception:其它由于编程错误及偶然的外在因素导致的一般性问题。
一般我们所说的异常都是指Exception及其子类。
2)异常处理结构
try{
……
}
catch(异常类名异常形参名)
{
……
《Java程序设计实验指导书》
}
catch(异常类名异常形参名)
{
……
}
finally
{
……
}
说明:
(1)finally总是执行,它是异常处理的统一出口,常用来实现资源释放、文件关闭等功能。
(2)发生异常时,try块内的后续语句不再执行。
(3)catch按照次序进行匹配检查处理,找到一个匹配者,不再找其他;catch的排列要按照先个别化再一般化的次序,不再将父类异常排在前,子类异常排在后。
3) 常见的系统异常
(1) ArithmeticException
(2) ArrayIndexOutOfBandsException
(3) ArrayStoreException
(4) IOException
(5) FileNotFoundException
(6) NullPointerException
(7) MalformedURLException
(8) NumberFormatException
(9) OutOfMemoryException
4) 自定义异常的步骤
(1)声明一个新的异常类,使之以Exception类或其他某个已经存在的系统异常类或用户定义异常类为父类。
(2)为新的异常类定义属性和方法,或重载父类的属性和方法,使这些属性和方法能够体
15
现该类对应的错误信息。
四、实验步骤
1)编写程序实现如下功能:生成并捕获到NegativeArraySizeException和
IndexOutOfBoundsException类型的异常,并显示捕获到的异常信息。
然后在此基础上生成并捕获到NullPointerException类型的异常,并显示捕获到的异常信息。
步骤(1):编写一个包含main方法的Application类TestException,然后定义一个方法void arraySize(){……}生成并捕获NegativeArraySizeException异常。
步骤(2):添加一个方法
void outofBound(){……}生成并捕获IndexOutOfBoundsException异常。
步骤(3):添加一个方法
void nullPointer(){……}生成并捕获IndexOutOfBoundsException异常。
步骤(4):在main方法中分别调用以上三个方法。
步骤(5):将文件保存为TestException.java,然后编译、调试应用程序。
步骤(6):将outofBound()方法中捕获异常的语句注释掉,重新编译程序,看看会不会有什么语法错误?如果没错误,执行程序看结果有什么不同?
步骤(7):将array方法重新定义为如下形式:
void arraySize() throws NegativeArraySizeException{……}
然后修改arraySize方法中捕获NegativeArraySizeException异常的语句执行
部分。
2)编写程序实现如下功能:计算两个数之和,参与求和运算的每个数的值都必须在10-20
之间,当任意一个数超出范围时,抛出自己的异常。
步骤(1):基于系统异常类Exception,定义自己的异常类NumberRangeException。
步骤(2):定义包含main方法的Application类SelfException。
步骤(3):在SelfException类中添加公共方法:
Public static int selfExceptionTest(int int1,int int2) throws NumberRangeException
使之能在求int1,int2两个数和之前检查两个数的数值范围,若符合条件则求
和,否则抛出异常NumberRangeException。
步骤(4):在main方法中调用selfExceptionTest方法。
步骤(5):保存文件为SelfException.java,然后编译并调试程序。
《Java程序设计实验指导书》
步骤(6):修改main方法中调用selfExceptionTest方法的实参,看看程序的运行结果有什么不同。
五、思考题
编写一个程序,用于根据用户输入的命令行参数数量来计算长方形、正方形、三角形的面积。
如果输入的参数个数为1、2、3则它们应分别对应正方形、长方形、三角形,如果参数值为0,则异常处理方法显示错误消息。
[提示]:自己定义一个异常类,表示参数个数0这一异常。
然后定义一个抽象的父类,并提供一个抽象的方法area(),再派生出三个子类,重写area方法,最后在main方法中编写测试逻辑。
17
实验五流、文件及基于文本的应用
一、实验目的
1)理解数据流的概念。
2)理解Java流的层次结构。
3)理解并掌握文件的读写操作方法。
二、实验内容
1)编写一个java Application程序,接受用户输入的10个整数,比较并输出其中的最大
值和最小值。
2)编写一个程序,能将一个源程序中的空行及注释去掉,并将处理后的内容写到目标文件
中。
(源文件名称和目标文件名称均要求以命令行参数形式输入)
三、实验原理
1)字节流和字符流
Java的输入/输出流中,根据它们的数据类型,主要可分为两类:字符流(Character Stream)和字节流(Btye Stream)。
(1)字符流
字符流的输入/输出数据是字符码,即Unicode字符。
字符流有两个基本类:Reader类和Writer类。
Reader类用于处理字符输入流,Writer类用于处理字符输出流。
(2)字节流
字节流是按字节读/写二进制数据。
字节流有两个基本的类:InputStream类和OutputStream类。
InputStream类用于处理字节输入流,OutputStream类用于处理字节输出流。
2)节点流和处理流
按照流是否直接与特定的地方(如磁盘、内存等)相连,分为节点流与处理流。
(1)节点流:可以从或者向一个特定的地方(节点)读写数据。
如文件流FileReader。
(2)处理流:是对一个已经存在的流的连接和封装,通过所封装的流的功能调用实现数。