面向对象程序设计Java实验指导书09信管.docx
- 文档编号:10156411
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:34
- 大小:79.69KB
面向对象程序设计Java实验指导书09信管.docx
《面向对象程序设计Java实验指导书09信管.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计Java实验指导书09信管.docx(34页珍藏版)》请在冰豆网上搜索。
面向对象程序设计Java实验指导书09信管
南昌工程学院
《面向对象程序设计(Java)》
实验指导书
09信息管理与信息系统
专业
雷金娥编
2011年9月
实验一JavaApplication程序的编辑、编译和运行
一、实验目的
1.熟悉JDK开发环境。
2.熟悉Edit编辑器的使用。
3.掌握JavaApplication的程序结构和开发过程。
二、实验设备和仪器
电脑
三、实验内容及要求
1.JDK开发环境
(1)JDK1.4.1开发环境安装在“C:
\JDK1.4.1\”目录下。
(2)设置环境变量PATH和CLASSPATH(如果在autoexec.bat中没有进行设置)。
进入命令行(MS-DOS)方式,进行如下设置:
SETPATH=C:
\JDK1.4.1\BIN;%PATH%
SETCLASSPATH=.;%CLASSPATH%
2.Edit编辑器
3.掌握JavaApplication程序开发过程
四、实验原理及步骤
1.实验原理
一个java应用程序是由若干个类组成的,其中最多能有一个public类。
有且只能有一个类含有main方法。
Java源程序的扩展名为java。
Java源程序的名字必须和public类的类名相同,如果没有public类,只要和其中任一类的类名相同就行。
编译java源程序会产生字节码(.class)文件,源程序有几个类就会产生几个class文件。
运行时,只运行含有main方法的class文件。
2.步骤
(1)打开Edit编辑器。
(2)键入如下程序:
importjava.io.*;
publicclassHelloWorld1{
publicstaticvoidmain(Stringarg[]){
System.out.println("HelloWorld!
");
}
}
(3)检查无误后(注意大小写)保存文件。
可将文件保存在“D:
\Java\”目录中,注意文件名为HelloWorld1.java。
(4)进入命令行(MS-DOS)方式,设定当前目录为“D:
\Java\”,运行Java编译器:
D:
\Java>javacHelloWorld1.java
(5)如果输出错误信息,则根据错误信息提示的错误所在行返回Edit编辑器进行修改。
常见错误是类名与文件名不一致、当前目录中没有所需源程序、标点符号全角等。
如果没有输出任何信息或者出现“deprecation”警告,则认为编译成功,此时会在当前目录中生成HelloWorld1.class文件。
(6)利用Java解释器运行这个JavaApplication程序,并查看运行结果。
D:
\Java>javaHelloWorld1
五、实验结果分析及实验报告要求
1.写出JAVA开发环境配置按步骤
2.编写、运行一个简单的JAVA应用程序,将源代码写清楚
实验二Java程序设计基础
一、实验目的
1.掌握标识符的定义规则。
2.掌握表达式的组成。
3.掌握各种数据类型及其使用方法。
4.理解定义变量的作用,掌握定义变量的方法。
5.掌握各种运算符的使用及其优先级控制。
6.掌握Java数组的声明、初始化以及使用方法,理解Java数组是Java对象的含义。
7.掌握String类的常用成员方法。
二、实验设备和仪器
电脑
三、实验内容及要求
1.定义一个数组,具有以下方法:
publicstaticintmax(inttable[]);
publicstaticintmin(inttable[]);
publicstaticvoidsort(inttable[]);
publicstaticintindexOf(inttable[],intkey);
publicstaticbooleanisSorted(inttable[]);
2.找出一个二维数组的鞍点。
3.判断该字符串是否是回文,回文是如下形式的字符串:
abcdcba
四、实验原理及步骤
1.实验原理
Java中数据类型分为基本数据类型与复合数据类型,相应地变量分为基本类型与引用类型。
基本类型变量有8种,而类、接口和数组变量是引用类型。
基本类型变量使用和C及C++完全一样,但引用类型的使用有点与C中的指针相同(注意Java中并没有指针的概念)。
引用类型变量的使用有引用空间与数据空间的概念,当变量声明时只是给该变量分配引用空间(或可以理解为地址空间),数据空间并没有分配。
例如定义:
Mydatetoday;定义的变量名today为引用空间的变量名
today=newMydate();实例化Mydate类的一个对象,也即产生了数据空间用于存放该对象的数据。
并且将该对象的地址赋给today,这样对象名today就指向了相应的数据空间。
数组的定义和使用举例inta[]=newint[6];
程序的流程控制结构和C语言基本类同,有顺序结构、选择结构、循环结构。
但初学面向对象编程容易犯程序结构上的毛病,许多同学编出的程序和面向过程语言的一样只是换成Java的语法。
原则上面向对象编程的结构,应该以类为基本组织单位。
2.步骤
略
五、实验结果分析及实验报告要求
1.总结出Java基本语法和C语言语法的区别。
2.写出上述三个程序代码。
要求记录编译和执行Java程序当中的系统错误信息提成示,并给出解决办法。
实验三类的封装
一、实验目的
通过编程和上机实验理解Java语言是如何体现面向对象编程基本思想,了解类的封装方法,以及如何创建类和对象,了解成员变量和成员方法的特性,掌握面向对象程序设计的方法。
二、实验设备和仪器
电脑
三、实验内容及要求
编写Point类包括横坐标x,纵坐标y,声明构造方法和拷贝构造方法,声明若干get()和set()方法获得和设置坐标,声明move()方法将当前坐标移动若干位置。
四、实验原理及步骤
1、设计类来描述真实客观世界中的事物,使用类的成员变量来表示事物的属性和状态,使用类的成员方法来提供对成员变量的访问或修改
2、使用修饰符来限定类的成员变量或成员方法的属性
有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目的。
常用的修饰符如下:
publicprivateprotectedpackagestaticfinaltransientvolatile
不同修饰符的访问控制权限如表3.1所示。
访问权限修饰符
类
子类
包
所有类和包
public
√
√
√
√
private
√
protected
√
√
√
package
√
√
表3.1
五、实验结果分析及实验报告要求
将上述程序运行,写出运行结果,并分析。
实验四类的继承
一、实验目的
1.掌握类的继承方法。
2.掌握变量的继承。
3.掌握方法的继承。
二、实验设备和仪器
电脑
三、实验内容及要求
1掌握子类定义方法
2理解成员变量的继承与隐藏
3理解方法的继承
四、实验原理及步骤
1.类的继承性练习
新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。
新类还可添加新的变量和方法。
这种现象就称为类的继承。
当建立一个新类时,不必写出全部成员变量和成员方法。
只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。
被继承的类称为父类或超类(superclass),这个新类称为子类。
Java提供了一个庞大的类库让开发人员继承和使用。
设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。
你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。
所以,通常要对子类进行扩展,即添加新的属性和方法。
这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。
继承的意义就在于此。
4.1、创建父类
定义一个表示长方形的类Rectangle,其中包含两个private的double型的成员变量length和width分别表示长方形的长和宽,定义一个有参数的构造方法Rectangle(doublelength,doublewidth),在其中为长方形对象初始化,定义一个无参数的构造方法,在其中调用有参数的构造方法,使创建的对象的长和宽都为0。
再定义用来求长方形周长的方法perimeter()和求面积的方法area()。
4.2、创建子类
定义一个长方体类Cuboid,使其继承Rectangle类,其中包含一个表示高的double型成员变量height;定义一个构造方法Cuboid(doublelength,doublewidth,doubleheight);再定义一个求长方体表面积的方法area(doubleheight)和求体积的方法volume()。
编写一个名为CuboidTest的应用程序,求一个长、宽和高都为10的长方体的体积。
五、实验结果分析及实验报告要求
将上述程序运行,写出运行结果,并分析。
实验五类的多态
一、实验目的
1.掌握成员变量的隐藏和方法的覆盖;
2.掌握this和super关键字的使用;
3.理解final类和abstract类的含义,掌握如何定义和使用final类和abstract类;
4.掌握多态的概念,
二、实验设备和仪器
电脑
三、实验内容及要求
1理解方法的重载
2理解方法的覆盖
类的继承发生在多个类之间,而类的多态只发生在同一个类上。
在一个类中,可以定义多个同名的方法,只要确定它们的参数个数和类型不同。
这种现象称为类的多态。
多态使程序简洁,为程序员带来很大便利。
在OOP中,当程序要实现多个相近的功能时,就给相应的方法起一个共同的名字,用不同的参数代表不同的功能。
这样,在使用方法时不论传递什么参数,只要能被程序识别就可以得到确定的结果。
类的多态性体现在方法的重载(overload)上,包括成员方法和构造方法的重载。
4.1、方法的重载
(1)程序功能:
使用同名方法对两个、三个或用数组容纳的一组数进行排序
(2)程序源代码如下。
classIntSort{
publicStringsort(inta,intb){
if(a>b)
returna+""+b;
else
returnb+""+a;
}
publicStringsort(inta,intb,intc){
intswap;
if(a
swap=a;
a=b;
b=swap;
}
if(a swap=a; a=c; c=swap; } if(b swap=b; b=c; c=swap; } returna+""+b+""+c; } publicStringsort(intarr[]){ Strings=""; intswap; for(inti=0;i for(intj=0;j if(arr[j]>arr[j+1]){ swap=arr[j]; arr[j]=arr[j+1]; arr[j+1]=swap; } for(inti=0;i s=s+arr[i]+""; returns; } } publicclassEXP3_11{ publicstaticvoidmain(String[]args){ IntSorts=newIntSort(); inta=30,b=12,c=40; intarr[]={34,8,12,67,44,98,52,23,16,16}; System.out.println("两个数的排序结果: "+s.sort(a,b)); System.out.println("三个数的排序结果: "+s.sort(a,b,c)); System.out.println("数组的排序结果: "+s.sort(arr)); } } 实验记录内容要求: 写出上述程序的运行结果,并总结方法重载的合法条件。 4.2、构造函数的重载 构造方法的名称和类同名,没有返回类型。 尽管构造方法看起来和一般的成员方法没有差别,但它不是方法,也不是类的成员。 因此,构造方法不能直接调用,只能由new操作符调用。 构造方法对于类是十分重要的,对象的初始化任务要靠构造方法来完成。 重载构造方法的目的是提供多种初始化对象的能力,使程序员可以根据实际需要选用合适的构造方法来初始化对象。 实验记录内容: 找出实验四中的父子类中的构造方法重载语句。 4.3、方法的覆盖 通过继承子类可以继承父类中所有可以被子类访问的成员方法,但如果子类的方法与父类方法同名,则不能继承,此时称子类的方法覆盖了父类的方法,简称为方法覆盖(override)。 方法覆盖为子类提供了修改父类成员方法的能力。 例如,子类可以修改层层继承下来的Object根类的toString方法,让它输出一些更有用的信息。 下面的程序显示了在子类Circle中添加toString方法,用来返回圆半径和圆面积信息。 (1)下列有一个Circle类,要求编写两个方法覆盖Object类的equals方法(如果两个圆半径相等就认为两个圆相等)和toString方法(输出结果: 圆半径: x厘米,圆面积y平方厘米,其中x,y是相应的值) classCircle{ privateintradius; publicCircle(intr){ this.setRadius(r); } publicvoidsetRadius(intr){ radius=r; } publicintgetRadius(){ returnradius; } publicdoublearea(){ return3.14159*radius*radius; } /*此处定义toString()方法定义*/ publicbooleanequals(Objecto){ Circlec=(Circle)o; returnradius==c.radius; } /*此处定义equals()方法定义*/ publicStringtoString(){ return"圆半径: "+radius+"圆面积为: "+3.14*radius*radius; } } publicclassTest{ publicstaticvoidmain(Stringargs[]){ Circlec1=newCircle(10); Circlec2=newCircle(10); System.out.println("\n"+c1.equals(c2)+c1.toString()); } 4.4抽象类的编程应用。 编写一个能产生三个柱体对象,分别是底部形状分别是Circle、Triangle(三角形),Rectangle(长方形)的情况,并计算相应体积。 思路: 该程序有两种实现方式。 1)定义三个柱体类,分别是CirclePillar类、TrianglePillar类、RectanglePillar类,分别生成三个类的实例,但该方法的缺陷是什么? 2)设计一个Shape抽象类,该类有一个抽象方法area(),设计一个Pillar(柱体)类,该类有两个成员变量: Shape和height,并创建3个实例: 底部形状分别为Circle、Triangle(三角形),Rectangle(长方形)的柱体类,并计算相应体积。 实验记录要求: 写出相应代码。 五、实验结果分析及实验报告要求 分析程序运行结果 实验六接口与实现接口的类 一、实验目的 1.理解接口的概念和作用 2.掌握接口的定义 3.掌握如何实现接口 4.掌握API基础 5.掌握String类型和其他基本数据类型之间的相互转换 二、实验设备和仪器 电脑 三、实验内容及要求 1.产生三个柱体对象,分别是底部形状分别是Circle、Triangle(三角形),Rectangle(长方形)的情况,并计算相应体积。 (提示定义一个Pillar类,成员变量底面积用Shape接口实现) 2.编程判断用户输入的电子邮箱、电话号码(包括家庭电话和手机号码)是否合法,并将该程序打包至tools包下。 3.写出String和基本数据类型(int、boolean、double)相互类型转换的语句。 四、实验原理及步骤 1.接口概念和定义 概念: Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 定义 [public]interface接口[extends父接口列表] { [public][static][final]数据类型成员变量=常量值; [public][abstract]返回值类型成员方法[(参数列表)]; } 2.实现接口的类 定义: [修饰符]class类<泛型>[extends父类][implements接口列表] 实现接口的非抽象类必须实现所有接口中的所有抽象方法,否则声明为抽象类。 3.正则表达式 可以表示字符串的组成规则,由字符和量词构成。 1).预定义字符类(转义字符序列): \d——代表任何数字字符,即[0-9] \D——代表任何非数字字符 \w——代表任何单字字符(字母a~z、A~Z、下划线、0~9),即[a-zA-Z_0-9] \W——代表任何非单字字符 \s——代表任何空白字符 \S——代表任何非空白字符 没有预定义字符类的字符,可在方括号[]指明,如[246]表示2或者4或者6三个字符 2).量词——表示匹配字符的个数: *——代表匹配字符个数为0个或多个 +——代表匹配字符个数为1个或多个 ? ——代表匹配字符个数为0个或1个 {n}——代表匹配字符个数正好为n个 {n,}——代表匹配字符个数至少为n个 {n,m}——代表匹配字符个数至少为n个,最多为m个 4.package打包语句 格式: packagemypackage; 必须放在程序的第一行,其作用是将当前程序的class文件打包至mypackage包(文件夹)中。 5.String和其他基本类型转换 1)将字符串转换成基本类型数据 通过各个基本类型的类方法parseXXX来实现的 2)将基本类型数据转换成字符串 通过String的类方法valueOf来实现,该方法有多个重载,一般形式为: s.valueOf(parament) 五、实验结果分析及实验报告要求 填写实验内容的结果,要详细 实验七异常的抛出、捕获并处理 一、实验目的 1.了解异常类的作用 2.掌握对异常的捕获和处理方式 二、实验设备和仪器 电脑 三、实验内容及要求 将每个知识点都进行上机实践,具体内容见实验原理与步骤。 四、实验原理及步骤 1、使用try…catch语句处理异常 1.1、异常类型匹配的处理方式 (1)程序功能: 在程序中主动产生一个ArithmeticException类型被0除的异常,并用catch语句捕获这个异常。 最后通过ArithmeticException类的对象e的方法getMessage给出异常的具体类型并显示出来。 (2)程序源代码如下。 publicclassEXP5_1{ publicstaticvoidmain(String[]arg3){ System.out.println("这是一个异常处理的例子\n"); try{ inti=10; i/=0; } catch(ArithmeticExceptione){ e.printStrackTrace(); } finally{ System.out.println("finally语句被执行"); } } } 实验记录要求: 写出上述程序的输出结果。 1.2、包含多个catch子句的异常处理方式 (1)程序功能: : 在try子句中设计两个可能出现的异常,当a为0时会发生异常。 另外一个是肯定的异常,因为数组c的长度为1,定义c[42]是为法的。 通过两个catch子句分别来捕获异常。 (2)程序源代码如下。 publicclassEXP5_3{ publicstaticvoidmain(String[]args){ try{ inta=args.length; System.out.println("\na="+a); intb=42/a; intc[]={1}; c[42]=99; } catch(ArithmeticExceptione){ System.out.println("发生了被0除: "+e); } catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("数组下标越界: "+e); } } } 实验记录要求: 上述源代码运行结果,总结多个catch语句捕获异常方式。 2、使用throw语句抛出异常 在上面的实验中,可以发现,异常对象是Java运行时由系统抛出的。 抛出异常也可以通过使用throw语句实现。 throw是Java语言的关键字,用来告知编译器此处要发生一个异常。 throw后面要跟一个新创建的异常类对象,用于指出异常的名称和类型。 (1)程序源代码如下。 publicclassEXP5_4{ staticvoidthrowProcess(){ try{ thrownewNullPointerException("空指针异常"); } catch(NullPointerExceptione){ System.out.println("\n在throwProcess方法中捕获"+e.getMessage()); throwe; } } publicstaticvoidmain(Stringargs[]){ throwProcess(); } } 实验报告要求: 请写出该程序运行结果。 3、使用throws语句 throws子句一般用来表明在使用该方法时可能抛出异常
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 Java 实验 指导书 09