Java程序设计实验报告 哈工大.docx

上传人:b****8 文档编号:9314454 上传时间:2023-02-04 格式:DOCX 页数:15 大小:21.91KB
下载 相关 举报
Java程序设计实验报告 哈工大.docx_第1页
第1页 / 共15页
Java程序设计实验报告 哈工大.docx_第2页
第2页 / 共15页
Java程序设计实验报告 哈工大.docx_第3页
第3页 / 共15页
Java程序设计实验报告 哈工大.docx_第4页
第4页 / 共15页
Java程序设计实验报告 哈工大.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

Java程序设计实验报告 哈工大.docx

《Java程序设计实验报告 哈工大.docx》由会员分享,可在线阅读,更多相关《Java程序设计实验报告 哈工大.docx(15页珍藏版)》请在冰豆网上搜索。

Java程序设计实验报告 哈工大.docx

Java程序设计实验报告哈工大

Java语言基础

实验指导、报告书

(2012-2013年秋季学期使用)

 

班级:

____________________

姓名:

____________________

计算机科学与技术学院

实验一Java编程开发环境

一、实验学时:

1学时

二、实验目的:

1.学习从网络下载JDK开发工具与帮助文档。

2.学习安装JDK开发工具及其文档。

3.掌握JavaApplication程序的开发过程并编写一个JavaApplication程序。

4.学习使用JDK的帮助文档。

三、必须学习和掌握的知识点:

1.掌握使用JDK开发Java程序的步骤。

2.掌握Java程序的基本语法。

四、实验内容:

1.创建一个“Hello,World”程序,该程序只要输出这句话即可。

你所编写的类里只需一个方法(“main”方法会在程序启动时被执行)。

记住要把它设为static形式,并指定参数列表——即使根本不会用到这个列表。

用javac进行编译,再用java运行它。

2.观察程序的运行结果

3.打印源程序清单

4.改变工作目录,观察编译程序和运行程序是否可以正常工作,思考为什么,如何做?

 

 

实验二Java程序流程控制

一、实验学时:

1学时

二、实验目的:

1.Java语言基本元素

2.Java数据类型

3.Java语言结构

4.Java控制语句

5.Java类定义规范

三、必须学习和掌握的知识点:

1.分支语句:

if-else,switch

2.循环语句:

while,do-while,for

3.与程序转移有关的其它语句:

4.break,continue,return

四、实验内容:

1.写一个接收两个字符串参数的方法,用各种布尔值的比较关系来比较这两个字符串,然后把结果打印出来。

做==和!

=比较的同时,用equals()作测试。

在main()里面用几个不同的字符串对象调用这个方法。

 

2.写一个会随机生成25个整型值的程序。

对每一个值,用if-else语句判断其是大于、小于,还是等于下一个随机生成的值。

 

3.写一个打印从1到100的值的程序。

 

实验三对象的初始化与清除

一、实验学时:

2学时

二、实验目的:

1.掌握Java程序面向对象编程的基本架构

2.掌握子类的对象就是父类的对象的规律

3.熟悉和掌握一维和二维数组的使用

三、必须学习和掌握的知识点:

1.掌握类的创建(属性与方法的定义和声明)

2.掌握构造函数的定义和声明(重载的构造函数:

默认构造函数与参数)

3.使用get../set..字段读写

4.初始化(定义初始化和静态初始化)

5.数组和数组类Arrays的使用

四、实验内容

1.创建一个名为Dog的类,具有重载的bark()方法。

此方法应根据不同的基本数据类型进行重载,并根据被调用的版本,打印出不同类型的狗吠(barking)、咆哮(howling)等信息。

编写main()来调用所有不同版本的方法。

 

 

2.编写名为Tank的类,此类的状态可以是满的或空的。

其“终结条件”是:

对象被清除时必须处于空状态。

请编写finalize()以检验终结条件是否成立。

在main()中测试Tank可能发生的几种使用方式。

 

3.编写一个方法,能够产生二维双精度型数组并加以初始化。

数组的容量由方法的形式参数决定,其初值必须落在另外两个形式参数所指定的区间之内。

编写第二个方法,打印出第一个方法所产生的数组。

在main()中通过产生不同容量的数组并打印其内容来测试这两个方法

实验四隐藏具体实现

一、实验学时:

2学时

二、实验目的:

1.类是如何对它的成员进行访问权限控制的

2.掌握类是如何被打包到一个程序库中的

三、必须学习和掌握的知识点:

1.访问权限控制

四、实验内容

1.创建一个带有public,private,protected,和包访问权限域以及方法成员的类。

创建该类的一个对象,看看在你试图调用所有类成员时,会得到什么类型的编译信息。

请注意,处于同一个目录中的所有类都是缺省包的一部分。

 

2.将local目录加入到CLASSPATH中,然后在local目录下编写以下文件:

packagelocal;

classPackagedClass{

publicPackagedClass(){

System.out.println("Creatingapackagedclass");

}

}

然后另一个目录中创建下列文件:

//foreign:

Foreign.java

packageforeign;

importlocal.*;

publicclassForeign{

publicstaticvoidmain(String[]args){

PackagedClasspc=newPackagedClass();

}

}

解释一下为什么编译器会产生错误。

如果将Foreign类置于local包之中的话,会有所改变吗?

 

实验五复用类

一、实验学时:

2学时

二、实验目的:

1.组合

2.继承

3.掌握继承(属性和方法的继承)的规律

4.掌握构造函数继承的规律

三、重点:

1.组合与继承之间选择

2.名称屏蔽(Namehiding)

3.向上转型(upcasting)

4.final

四、实验内容

1.创建一个Root类,令其含有名为Component1、Component2、Component3的类各一个实例(这些也由你写)。

从Root中派生一个类stem,也含有上述各“组成部分”。

所有的类都应带有可打印出类的相关信息的缺省构造器。

2.

检查包括继承在内的初始化全过程,是很有益的。

请追踪并解释下例的执行结果。

classInsect{

privateinti=9;

protectedintj;

Insect(){

System.out.println("i="+i+",j="+j);

j=39;

}

privatestaticintx1=

print("staticInsect.x1initialized");

staticintprint(Strings){

System.out.println(s);

return47;

}

}

publicclassBeetleextendsInsect{

privateintk=print("Beetle.kinitialized");

publicBeetle(){

System.out.println("k="+k);

System.out.println("j="+j);

}

privatestaticintx2=

print("staticBeetle.x2initialized");

publicstaticvoidmain(String[]args){

System.out.println("Beetleconstructor");

Beetleb=newBeetle();

}

}

 

实验六多态

一、实验学时:

2学时

二、实验目的:

1.多态polymorphism

2.动态绑定dynamicbinding

三、重点:

1.向下转型与运行期类型标识

2.构造器内部的多态方法的行为

3.运行期类型识别

四、实验内容

1.创建一个Rodent(啮齿动物):

Mouse(老鼠),Gerbil(鼹鼠),Hamster(大颊鼠)这样的继承层次结构。

在基类中,提供对所有的Rodent都通用的方法,在基类中,根据特定的Rodent类型重载这些方法,以便执行不同的行为。

创建一个Robent数组,填充不同的Rodent类型,然后调用基类方法,观察发生什么情况。

 

2.

修改以上练习中的Rodent,使其成为一个抽象类。

只要有可能,就将Rodent的方法声明为抽象方法。

 

3.修改以上练习,使其能够演示基类和导出类的初始化顺序。

然后向基类和导出类中添加成员对象,并显示在构建期间初始化发生的顺序。

 

4.创建一个不包含任何方法的抽象类,从它那里导出出一个类,并添加一个方法。

创建一个静态方法,可以接受一个指向基类的引用,将其向下转型到导出类,然后再调用该静态方法。

在main()方法中,证实它的可行性。

然后,将基类加上abstract声明,这样就不再需要进行向下转型。

 

实验七接口与内部类

一、实验学时:

2学时

二、实验目的:

1.掌握接口的使用规律

2.掌握内部类的使用规律

三、重点:

1.嵌套接口

2.在方法和作用域内的内部类

3.匿名内部类

4.从多层嵌套类中访问外部

5.闭包与回调

四、实验内容

1.证明一个接口的属性在缺省情况下是static和final的。

 

2.创建一个接口U,包含三个方法。

创建第一个类A,它包含一个方法,在此方法中写一个匿名内部类,生成U的引用。

创建第二个类B,它包含U的数组。

B应该有几个方法,第一个方法可以接受一个U的引用并存储到数组中;第二方法将数组中的引用设为null;第三个方法遍历此数组。

在U中调用这些方法,在其main()中创建一组A的对象,和单独一个B的对象。

用那些A类对象所产生的U类型的引用填满B对象的数组。

使用B回调所有A的对象。

再从B中移除某些U的引用。

 

实验八异常和错误处理

一、实验学时:

1学时

二、实验目的:

1.熟悉和掌握java中对异常的处理机制

2.异常的抛出和捕捉

三、重点:

1.java的异常处理机制

四、实验内容

1.建立一个三层的异常继承体系,然后创建基类A,它的一个方法能抛出异常体系的基类异常。

用B继承A,并且重载这个方法,让它抛出第二层的异常。

让C继承B,再次重载这个方法,让它抛出第三层的异常。

在main()里面创建一个C类型的对象,把它向上转型为A,然后调用这个方法。

 

实验九JavaI/O系统

一、实验学时:

1学时

二、实验目的:

1.熟悉和掌握流式输入输出的基本原理

2.标准输入输出操作接口

三、重点:

1.InputStreamReader、OutputStreamReader的使用

2.PrintWriter类的使用

四、实验内容

1.创建一个叫做SortedDirList的类,具有一个可以接受文件路径信息,并能构建该路径下所有文件的排序目录列表的构造器。

创建两个重载的list(),根据参数产生整个列表或者列表子集。

添加size()方法,能够接受文件名并产生该文件的大小。

 

实验十多线程编程

一、实验学时:

2学时

二、实验目的:

1.熟悉和理解线程的概念、线程的生命周期

2.熟悉和掌握多线程的实现方法:

继承Thread类与使用Runnable接口

三、重点:

1.线程的生命周期

2.使用Runnable接口编写多线程程序

四、实验内容

1.写一个“忙等待”的例子。

一个线程休眠一段时间然后把一个标志设为真。

第二个线程在一个while循环中观察这个标志(这就是“忙等待”),当标志变为真的时候,把这个标志设置为假,并向控制台报告这个变化。

注意程序在“忙等待”里花费的时间,然后重写这个程序,这时使用wait()而不是“忙等待”。

 

2.

使用wait()和notify()解决一个生产者,一个消费者的问题。

生产者不能覆盖消费者的缓冲区,这在生产的速度大于消费的时候有可能发生。

如果消费者的速度大于生产者,那么它一定不能把同样的数据读取两遍。

不要对生产者和消费者的速度做任何假设。

实验十一杂货店模拟系统

下载BlueJ工程,其中有两个基本类:

PriceAndStockManager和Cashier。

1.完成Cashier类;

2.创建Grocery类,测试PriceAndStockManager和Cashier的正确性。

要求其中包含main方法,由main方法创建一个PriceAndStockManager对象和与Manager对象相关的两个Cashier对象。

调用Cashier对象的buy方法,并检查两种产品的库存状况。

3.修改PriceAndStockManager,使它包含并管理Product对象。

在Product类中存储产品价格price及其库存量;要求PriceAndStockManager管理三种产品。

要求修改后Cashier和Grocery依然能照常工作。

此时,工程中共有四个类:

:

Grocery,Product,PriceAndStockManager,Cashier。

4.创建一个Javaapplication,模拟杂货店里的操作。

要求此应用程序要跟踪所有的产品售出情况。

由收银员负责产品的售出,产品售出纪录要针对各个顾客进行。

对每个顾客的每次结账,收银员要检查产品的价格和数量,并计算应收总数。

与此同时,产品的库存量要随着售卖进行相应的更新。

在一天结束后,需要打印两种报表:

一张用来纪录每个收银员的交易,另一个打印每种产品的库存余额。

为了简化任务,我们也可以假设顾客总有足够的钱付账。

即我们假设交易不成功只能是由库存不足引起,而不会是由于顾客没有足够的资金。

另外,我们假设杂货店里有三件产品,分别是“apples”,“oranges”,和“pomelos”.请将它们的价格和库存初值设置为:

"apples":

15.75pesos,50items

“oranges”:

12.50pesos,80items

"pomelos":

95.25pesos,25items

要求Cashier类提供以下方法:

1.publicvoidstartPurchase(doublemoney):

标志交易的开始,参数money代表顾客在购买之初拥有的资金量。

2.publicvoidbuy(StringproductName,intqty):

买产品名为productName的产品共qty件。

同时检查可能出现的错误,如qty为负值、没有足够的资金或库存。

如果产品名称不是店里有的产品,只需提醒库存不足。

这里注意需要定义一些常用的异常,并在适当的地方抛出。

3.publicvoidendPurchase():

标志交易的结束,打印交易金额和找回钱数。

4.publicvoidprintSalesSummary():

相当于盘账。

打印出全天的顾客总数及收回的资金总数。

Cashier类提供需要以下属性应能跟踪总交易数、当日接待的总顾客数、当前顾客的交易金额及顾客实际给出的金额。

注意Cashier的构造函数需要的参数:

PriceAndStockManager对象。

Cashier需要调用这个对象的方法。

PriceAndStockManager类应提供以下方法:

1.返回给定产品的价格

2.返回给定产品的库存

3.完成产品的交易,名字随意起。

4.打印每种产品的库存的方法:

printInventoryReport()

该类当然还应该定义并创建Product对象,并通过Product对象获得产品价格和库存,包括更新库存量等。

要求在实例化PriceAndStockManager时创建Product对象。

Product类用于保存价格和库存信息。

其方法的实现可以发挥大家的自由。

最后,请创建一个测试类GrocerySimulation.java,要求在其中创建一个(唯一的)PriceAndStockManager对象,同时创建与之相关的几个Cashier对象。

让这几个cashiers执行一些交易任务,最后调用每个cashier的printSalesSummary()方法及PriceAndStockManager对象的printInventoryReport()方法。

 

实验十二成绩管理系统

1.简单介绍:

创建一个GUI应用程序(或Applet),用来帮助老师管理学生的成绩。

能实现对成绩的增、删、改以及排序等任务。

2.所需类的描述:

1.GradeSheetApplet–主类。

2.Row–继承java.awt.Panel;包括一些用来输入成绩的TextFields。

3.Grid–通过管理Students数组保存数据;提供方法实现增、删、改以及排序等任务;通过管理Rows数组保存用户的输入数据;数组的大小由学生的数量决定。

4.Student–用来封装某个特定学生的数据:

IDNumber,LastName,FirstName,NumericGrade,LetterGrade(A,B,C,D,E几个等级,由成绩来决定)。

5.StudentInput–包含一些TextFields使得用户可以在程序中输入数据。

3.其它要求

错误检查:

程序应能从各种异常(如输入数据错误或其他任何异常)中返回,并提供足够的数据证明当一种错误的情况发生时,程序是异常终止或是正常退出。

程序注释和可读性:

要求程序遵循业界的编码规范。

GUI设计:

学生可以自己设计。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 卡通动漫

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1