java实验指导书

更新时间:2023-10-17 23:32:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一 JAVA基础 .............................................................................................................................1 实验二 初识类与对象 .......................................................................................................................2 实验三 类的继承与多态 ................................................................................................................. 10 实验四 字符串 ................................................................................................................................. 18 实验五 时间、日期与数字 ............................................................................................................. 20 实验六 AWT组件及事件基础 ....................................................................................................... 21 实验七 多线程的创建 ..................................................................................................................... 28 实验八 文件输入输出流 ................................................................................................................. 30

《Java语言程序设计》实验指导书

实验一 Java基础

实验目的

? ? ? ? ? ?

熟悉基本数据类型;变量的命名规则;常量的表达。 熟悉数据类型的强制转换和自动转换。 熟悉数组的应用。

掌握各种运算符、表达式;运算符的优先级。

掌握Java程序的三种基本结构,即顺序结构、分支结构和循环结构。 掌握break、cotinue作用。

实验内容

1. 编写程序,求1!+2!+3!+…+10!

2. 编写一个应用程序,求100以内的全部素数。

3. 编写程序,用do-while和for循环计算1+1/2!+1/3!+1/4!+??的前20项和。

第 1 页 共 32页

《Java语言程序设计》实验指导书

实验二 初识类与对象

实验目的

? ? ? ? ?

掌握类的定义和使用。 掌握对象的声明和使用。 掌握构造函数的概念和使用。

掌握类变量与实例变量,以及类方法与实例区别。 掌握包的概念与使用。

实验内容

1. 分析并运行下面程序。程序源代码如下:

public class Excise2_1 {

int i;

public void Excise2_1(int i) {

this.i=i;

System.out.println(“******构造方法******”); }

public static void main(String arg[]) {

Excise3_1 e=new Excise3_1();

} } 问题:

(1) 改正程序中错误的地方,使其能正确执行?

(2) 程序中构造方法是哪个方法?构造方法的目的是什么? (3) 请指出this在程序中的作用。

2. 分析并运行下面程序。程序源代码如下:

class Circle {

第 2 页 共 32页

《Java语言程序设计》实验指导书

float f1=3.14f; static float f2=100; void method1() {

System.out.println(“f1=”+f1);

}

static void method2()

{

System.out.println(“f2=”+f2);

} }

public class DifferFun {

public static void main(String arg[]) {

float f3;

Circle c1=new Circle(); f3=c1.f1+Circle.f2; c1.method1(); Circle.method2(); } }

问题:

(1) 变量f1和f2的引用方式有何不同?

(2) 方法method1()和method2()的调用方式有何不同? (3) 程序中哪些是实例变量?哪些是类变量?

3. 编写一个java应用程序,该程序中有3个类:Trangle,Lader和Circle,分别用来刻画

“三角形”、“梯形”和“圆形”。具体要求如下:

? Trangle类具有类型为double的三个边,以及周长、面积属性,Trangle类具有

返回周长、面积以及修改三个边的方法。另外,Trangle类还具有一个boolean型的属性,该忏悔用来判断三个数能否构成一个三角形。 ? Lader类具有类型为double的上底、下底、高、面积属性,具有返回面积的方法。 ? Circle类具有类型为double的半径、周长和面积属性,具有返回周长、面积的

功能。

程序模板:

请按模板要求,将【代码】替换为java程序代码。

AreaAndLength.java

第 3 页 共 32页

《Java语言程序设计》实验指导书

class Trangle{ double sideA,sideB,sideC,area,length; boolean boo; public Trangle(double a,double b,double c){ 【代码1】//参数a,b,c分别赋值给sideA,sideB,sideC if(【代码2】){//a,b,c构成三角形的条件表达式 【代码3】//给boo赋值 }else{ 【代码4】//给boo赋值 } } double getLength(){ 【代码5】//方法体,要求计算出length的值并返回 } public double getArea(){ if(boo){ double p=(sideA+sideB+sideC)/2.0; area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC)); return area; }else{ System.out.println(\不是一个三角形,不能计算面积\ return 0; } } public void setABC(double a,double b,double c){ 【代码6】//参数a,b,c分别赋值给sideA,sideB,sideC if(【代码7】){//a,b,c构成三角形的条件表达式 【代码8】//给boo赋值 }else{ 【代码9】//给boo赋值 } } }

class Lader{ double above,bottom,height,area; Lader(double above,double bottom,double height){ 【代码10】//方法体,将参数a,b,c分别赋值给above,bottom,height } double getArea(){

第 4 页 共 32页

《Java语言程序设计》实验指导书

实验三 类的继承与多态

实验目的

? ? ? ? ?

掌握类的继承。 掌握上转型对象。 掌握接口回调。

掌握Java捕捉异常机制

实验内容

1.分析并运行下面程序。程序源代码如下:

public class ConstExam {

public static void main(String args[]) {

final int value=100; value=200;

System.out.println(“变量value的值为:”+value); } } 问题:

(1) 程序的运行结果是什么?为什么? (2) 程序中哪条语句是定义常量的?

2.编写一个Java应用程序,除了主类外,该程序中还有4个类:

People,ChinaPeople,AmericanPeople和BeijingPeeople。要求如下: ? People类有访问权限是protected的double型成员变量:height和weight,以及public void

speakHello(),public void averageHeight()和public void averageWeight()方法。 ? ChinaPeople类是People的子类,新增了public void chinaGongfu()方法。要求

ChinaPeople重写父类的public void speakHello(),public void averageHeight()和public void averageWeight()方法。

? AmericanPeople类是People的子类,新增了public void AmericanBoxing()方法。要求

第 10 页 共 32页

《Java语言程序设计》实验指导书

AmericanPeople重写父类的public void speakHello(),public void averageHeight()和public void averageWeight()方法。

? BeijingPeople类是ChinaPeople的子类,新增了public void BeijingOpera()方法。要求

ChinaPeople重写父类的public void speakHello(),public void averageHeight()和public void averageWeight()方法。

程序运行效果示例:

程序模板 Example.java

class People {

protected double weight,height;

第 11 页 共 32页

《Java语言程序设计》实验指导书

public void speakHello() {

System.out.println(\ }

public void averageHeight() {

height=173;

System.out.println(\ }

public void averageWeight() {

weight=70;

System.out.println(\ } }

class ChinaPeople extends People {

【代码1】 //重写public void speakHello()方法,要求输出类似“你好,吃了吗”这样的

//汉语信息

【代码2】 //重写public void averageHeight()方法,要求输出类似 //“中国人的平均身高:168.78厘米”这样的汉语信息 【代码3】 //重写public void averageWeight()方法,

//要求输出类似“中国人的平均体重:65公斤”这样的汉语信息 public void chinaGongfu() {

【代码4】//输出中国武术的信息,例如:\坐如钟,站如松,睡如弓\等 } }

class AmericanPeople extends People {

【代码5】 //重写public void speakHello()方法,要求输出类似 //“How do you do”这样的英语信息。 【代码6】 //重写public void averageHeight()方法 【代码7】 //重写public void averageWeight()方法 public void americanBoxing() {

【代码8】//输出拳击的信息,例如,“直拳”、“钩拳”等 } }

第 12 页 共 32页

《Java语言程序设计》实验指导书

class BeijingPeople extends ChinaPeople {

【代码9】 //重写public void speakHello()方法,要求输出类似“您好”这样的汉语信息

【代码10】 //重写public void averageHeight()方法

【代码11】 //重写public void averageWeight()方法 public void beijingOpera() {

【代码12】//输出京剧的信息 } }

public class Example {

public static void main(String args[]) {

ChinaPeople chinaPeople=new ChinaPeople();

AmericanPeople americanPeople=new AmericanPeople(); BeijingPeople beijingPeople=new BeijingPeople(); chinaPeople.speakHello(); americanPeople.speakHello(); beijingPeople.speakHello(); chinaPeople.averageHeight(); americanPeople.averageHeight(); beijingPeople.averageHeight(); chinaPeople.averageWeight(); americanPeople.averageWeight(); beijingPeople.averageWeight(); chinaPeople.chinaGongfu();

americanPeople.americanBoxing(); beijingPeople.beijingOpera() ; beijingPeople.chinaGongfu(); } }

3.要求有一个abstract类,类名为Employee。Employee的子类有YearWorker, MonthWorker, WeekWorker。YearWorkerr对象按年领取薪水,MonthWorker对象按月领取薪水,WeekWorker对象按周领取薪水。Employee类有一个abstract方法:

public abstract earnings();

子类必须重写父类earnings()方法,给出各自领取报酬的具体方式。

有一个Company类,该类和Employee数组作为成员,Employee数组的单元可以

第 13 页 共 32页

《Java语言程序设计》实验指导书

是YearWorker,MonthWorker或WeekWorker对象的上转型对象。程序能输出Company对象一年需要支付的薪水总额。 模板代码 HardWork.java

abstract class Employee {

public abstract double earnings(); }

class YearWorker extends Employee {

【代码1】 //重写earnings()方法 }

class MonthWorker extends Employee {

【代码2】 //重写earnings()方法。 }

class WeekWorker extends Employee {

【代码3】 //重写earnings()方法。 }

class Company {

Employee[] employee; double salaries=0;

Company(Employee[] employee) {

this.employee=employee; }

public double salariesPay() {

salaries=0;

【代码4】 //计算salaries。 return salaries; } }

public class HardWork {

public static void main(String args[])

第 14 页 共 32页

《Java语言程序设计》实验指导书

{

Employee[] employee=new Employee[20]; for(int i=0;i

if(i%3==0)

employee[i]=new WeekWorker(); else if(i%3==1)

employee[i]=new MonthWorker(); else if(i%3==2)

employee[i]=new YearWorker(); }

Company company=new Company(employee);

System.out.println(\公司年工资总额:\ } }

4.卡车要装载一批,货物有3种商品:电视、计算机和洗衣机。需要计算出大货车和小货车各自所装载的3种货物的总重量。

要求有一个ComputeWeight接口,该接口中有一个方法: public double computeWeight()

有3个实现该接口的类:Television、Computer和WashMachine。这3个类通过实现接口ComputeWeight接口给出自重。(Television、Computer和WashMachine 的重量分别为45.5,65.5和145) 有一个Car类,该类用ComputeWeight接口类型的数组作为成员,那么该数组的单元就可以存放Television对象的引用、Computer对象的引用或WashMachine对象的引用。程序能输出Car对象所装载的货物的总重量。

程序模板

Road.java

interface ComputeWeight{ public double computeWeight(); }

class Television implements ComputeWeight{ 【代码1】//实现computeWeight()方法 }

class Computer implements ComputeWeight{

第 15 页 共 32页

《Java语言程序设计》实验指导书

【代码2】// 实现computeWeight()方法 }

class WashMachine implements ComputeWeight{ 【代码3】// 实现computeWeight()方法 }

class Car{ ComputeWeight[] goods; double totalWeights; public Car(ComputeWeight[] goods) { this.goods=goods; } public double getTotalWeights(){ totalWeights=0; 【代码4】//计算totalWeights return totalWeights; } }

public class Road { public static void main(String[] args) { ComputeWeight[] goodsOne=new ComputeWeight[50], goodsTwo=new ComputeWeight[22]; for(int i=0;i

第 16 页 共 32页

《Java语言程序设计》实验指导书

}

}

} }

Car bigCar=new Car(goodsOne);

System.out.println(\大货车装载的货物重量:\Car smallCar=new Car(goodsTwo);

System.out.println(\小货车装载的货物重量:\

5. 试设计boolean prime(int n)方法,可用来判断n是否为质数,若为质数,则响应true,若不是,则响应false,若n小于0,则抛出自定义异常ArgumentOutOfBounds。

第 17 页 共 32页

《Java语言程序设计》实验指导书

实验四 字符串

实验目的

? 掌握String类的常用方法。

实验内容

1.使用String类的public String toUpperCase()方法可以将一个字符串中的小写字母变成大写字母,使用 public String toLowerCase()方法可以将一个字符串中的大写字母变成小写字母。编写一个程序,使用这两个方法实现大小写的转换。

2.使用String类的public String concat(String str)方法可以把调用该方法的字符串与参数指定的字符串连接,把str指定的串连接到当前串的尾部获得一个新的串。编写一个程序通过连接两个串得到一个新串,并输出这个新串。

3.String类的public char charAt(int index)方法可以得到当前字符串index位置上的一个字符。说出下列程序的输出结果。

public class E3{

public static void main(String[] args){

String s=\辽宁科技大学\

char a=s.charAt(2),b=s.charAt(4); System.out.print(a); System.out.println(b); } }

4.编写一个java应用程序,判断两个字符串是否相同,判断字符串的前缀、后缀是否和某个字符串相同,按字典顺序比较两个字符串的大小关系,检索字符串,创建子字符串,将数字型字符串转换为数字,将字符串存放到数组中,用字符数组创建字符串。

程序模板

StringExample.java

public class StringExample {

第 18 页 共 32页

《Java语言程序设计》实验指导书

}

public static void main(String[] args) { String s1=new String(\ s2=new String(\ if(【代码1】){//使用equals方法判断s1与s2是否相同 System.out.println(\ }else{ System.out.println(\与s2不相同\ } String s3=new String(\ if(【代码2】){//判断3的前缀是否是\ System.out.println(\吉林省的身份证\ } String s4=new String(\你\ s5=new String(\我\ if(【代码3】){//按字典顺序s4大于s5的表达式 System.out.println(\按字典顺序s4大于s5的表达式\ }else{ System.out.println(\按字典顺序s4小于s5的表达式\ } int position=0; String path=\ position=【代码4】//获取path中最后出现目录分隔符号的位置 System.out.println(\中最后出现\\\\的位置:\ String fileName=【代码5】//获取path中\子字符串 System.out.println(\中含有的文件名:\ String s6=new String(\ s7=new String(\ int n1=【代码6】//将s6转换成int型数据 double n2=【代码7】//将s7转换成double型数据 double m=n1+n2; System.out.println(m); String s8=【代码8】//String调用valuOf(int n)方法将m转换为字符串对象 position=s8.indexOf(\ String temp=s8.substring(position+1); System.out.println(\数字\有\位小数\ String s9=new String(\ char a[]=【代码9】//将s8存放到数组a中 for(int i=a.length-1;i>=0;i--){ System.out.println(\ \ } }

第 19 页 共 32页

《Java语言程序设计》实验指导书

实验八 文件输入输出流

实验目的

? 掌握二进制输入、输出流的用法。 ? 掌握字符输入、输出流的用法。 ? 掌握RandomAccessFile类的使用

实验内容

1.使用二进制文件输入输出流的应用程序。程序源代码如下:

import java.io.*; public class Ex14_1 { public static void main(String args[])throws IOException { FileInputStream fi=new FileInputStream(\; FileOutputStream fo=new FileOutputStream(\ System.out.println(\ byte data[]=new byte[fi.available()]; fi.read(data); fo.write(data); System.out.println(\ fi.close(); fo.close(); } } 问题:

(1) 程序的功能是什么?运行程序,叙述程序结果。

(2) 程序中使用了二进制输入输出流,能不能改用文本输入输出流来实现? 2.使用随机文件类RandomAccessFile的应用程序。

程序功能:将一个文件的内容添加到另外一个文件的末尾。

import java.io.*; import java.util.*;

第 30 页 共 32页

《Java语言程序设计》实验指导书

public class Ex15_1 { public static void main(String args[]) { try { File file1=new File(\ File file2=new File(\ byte data[]=new byte[1024]; RandomAccessFile raf1=new RandomAccessFile(file1,\ RandomAccessFile raf2=new RandomAccessFile(file2,\ raf1.read(data); raf2.seek(raf2.length()); raf2.write(data); raf1.close(); raf2.close(); } catch(IOException e) { e.printStackTrace(); } } } 问题:

(1) 请用记事本编写2个文本文件file1.txt 和file2.txt,然后运行该程序。要注意

文件的存放位置。

(2) 分析程序,理解两个文件如何连接成一个文件的。

3.读一个包含英文的文本文件file.txt,将文件中所有字符都转变为大写,然后写回到原文件中。

第 31 页 共 32页

《Java语言程序设计》实验指导书

实验五 时间、日期与数字

实验目的

? 掌握Date类以及Calendar类的常用方法。 ? 掌握BigInteger类的常用方法。

实验内容

1.用Date类不带参数的构造方法创建日期,要求日期的输出格式是:星期 小时 分 秒。

2.运行下面的程序,说明程序功能。

package myPackage; public class Excise8_3 {

public static void main(String[] args)

{

int num;

for(int i=1;i<=10;i++)

{

num=(int)(Math.random()*1000); System.out.print(num+\ if(i%5==0)

System.out.println(); } } }

3.编写一个java应用程序,计算两个大整数的和、差、积和商,并计算一个大整数的因子个数。

程序模板

BigintegerExample import java.math.BigInteger;

第 20 页 共 32页

《Java语言程序设计》实验指导书

public class BigIntegerExample { public static void main(String[] args){ BigInteger n1=new BigInteger(\ n2=new BigInteger(\ result=null; result=【代码1】//n1和n2做加法运算 System.out.println(\和:\ result=【代码2】//n1和n2做减法运算 System.out.println(\差:\ result=【代码3】//n1和n2做乘法运算 System.out.println(\积:\ result=【代码4】//n1和n2做除法运算 System.out.println(\商:\ BigInteger m= new BigInteger(\ count=new BigInteger(\ final BigInteger ONE=new BigInteger(\ TWO=new BigInteger(\ System.out.println(m.toString()+\的因子有:\ for(BigInteger i=TWO;i.compareTo(m)<0;i=i.add(ONE)){ if((n1.remainder(i).compareTo(BigInteger.ZERO))==0){ count=count.add(ONE); System.out.print(\ \ } } System.out.println(); System.out.println(m.toString()+\一共有\个因子\ } }

4.使用BigInteger类计算1!+3!+5!+7!??的前30项的和。

实验六 AWT组件及事件基础

实验目的

? 掌握java窗口、文本输入框的使用。

第 21 页 共 32页

《Java语言程序设计》实验指导书

? 掌握处理ActioinEvent事件的方法。

? 掌握按钮、标签、菜单项、文本区和面板的使用 ? 掌握布局的使用

实验内容

1.算术测试

编写一个算术测试小软件,用来训练小学生的算术能力。程序由3个类组成,其中Teacher类对象负责给出算术题目,并判断回答者的答案是否正确;ComputerFrame类对象负责为算术题目提供视图,比如用户可以通过ComputerFrame类对象提供的GUI界面看到题目,并通过该GUI界面给出题目的答案;MainClass是软件的主类。

图9.1算术测试

程序模板

Teacher.java

public class Teacher { int num1,num2; String operator; public int giveNum1(int n){ num1= (int)(Math.random()*n)+1; return num1; } public int giveNum2(int n){ num2= (int)(Math.random()*n)+1; return num2; } public String giveOperator(){ double d=Math.random(); if(d>=0.5){ operator=\ }else{ operator=\ }

第 22 页 共 32页

《Java语言程序设计》实验指导书

return operator; } public boolean isRight(int answer){ if(operator.equals(\ if(answer==num1+num2){ return true; }else{ return false; } }else if(operator.equals(\ if(answer==num1-num2){ return true; }else{ return false; } } return false; } }

ComputerFrame.java

import java.awt.*;

import java.awt.event.*;

public class ComputerFrame extends Frame implements ActionListener { TextField text1,text2,textResult; Button getProblem,giveAnswer; Label operatorLabel,message; Teacher teacher; public ComputerFrame(String s) { super(s); teacher=new Teacher(); setLayout(new FlowLayout()); text1=【代码1】//创建text1,其可见字符长是10 text2=【代码2】//创建text2,其可见字符长是10 textResult=【代码3】//创建textResult,其可见字符长是10 operatorLabel=new Label(\ message=new Label(\你还没有回答呢\ getProblem=new Button(\获取题目\ giveAnswer=new Button(\确认答案\

第 23 页 共 32页

《Java语言程序设计》实验指导书

add(getProblem); add(text1); add(operatorLabel); add(text2); add(new Label(\ add(textResult); add(giveAnswer); add(message); textResult.requestFocus(); text1.setEditable(false); text2.setEditable(false); 【代码4】//将当前窗口注册为getProblem的ActionEvent事件监视器 【代码5】//将当前窗口注册为giveAnwser的ActionEvent事件监视器 【代码6】//将当前窗口注册为textResult的ActionEvent事件监视器 setBounds(100, 100, 450, 100); setVisible(true); validate(); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); } public void actionPerformed(ActionEvent e) { if(【代码7】){//判断事件源是否是getProblem int num1=teacher.giveNum1(100); int num2=teacher.giveNum2(100); String operator=teacher.giveOperator(); text1.setText(\ text2.setText(\ operatorLabel.setText(operator); message.setText(\请回答\ textResult.setText(null); } if(【代码8】){//判断事件源是否是giveAnswer String answer=textResult.getText(); try{ int result=Integer.parseInt(answer);

第 24 页 共 32页

《Java语言程序设计》实验指导书

}

}

if(teacher.isRight(result)){ message.setText(\你回答正确\ }else{ message.setText(\你回答错误\ } }catch(NumberFormatException e){ message.setText(\请输入数字字符\ } }

textResult.requestFocus(); validate();

MainClass.java

public class MainClass { public static void main(String[] args) { ComputerFrame frame; frame=【代码9】//创建窗口,其标题为:算术测试 } }

【思考问题】

给上述程序增加测试乘、除的功能。 2.在Frame中使用各种AWT组件

程序功能:在Frame容器中添加组件标签、复选框、单选按钮、文本输入框、文本输入区、按钮。

图10.1 AWT基本组件

程序参考源代码如下:

第 25 页 共 32页

《Java语言程序设计》实验指导书

import java.awt.*;

public class Ex10_1 extends Frame { static Ex10_1 frm=new Ex10_1(); public static void main(String args[]){ frm.setLayout(new FlowLayout()); frm.setTitle(\组件的使用\ frm.setBackground(Color.white); frm.setSize(500,300); frm.add(new Label(\你的名字: \ frm.add(new TextField(30)); frm.add(new Label(\性别: \ CheckboxGroup cbg = new CheckboxGroup(); frm.add(new Checkbox(\男\ frm.add(new Checkbox(\女\ frm.add(new Label(\你喜欢的水果: \ frm.add(new Checkbox(\苹果\ frm.add(new Checkbox(\桔子\ frm.add(new Checkbox(\香蕉\ frm.add(new Checkbox(\桃子\ frm.add(new Label(\你每次吃几个水果: \ Choice c = new Choice(); c.addItem(\少于1个\ c.addItem(\个到3个\ c.addItem(\个以上\ frm.add(c); frm.add(new Label(\你觉得吃水果有什么好处: \ frm.add(new TextArea(\我认为 \ frm.add(new Button(\确定 \ frm.add(new Button(\重写 \ frm.setVisible(true); } }

【思考问题】

(1)怎样在流式布局管理器中指定组件左对齐? (2)文本域组件的滚动条怎样指定?

(3)单选按钮和复选按钮的选中状态怎么设置?

3.使用panel面板

程序功能:在Frame中添加panel面板,将多个组件进行分块管理。

第 26 页 共 32页

《Java语言程序设计》实验指导书

图10.2 panel面板的使用

}

程序参考代码如下: import java.awt.*; public class Ex10_2 {

static Frame frm=new Frame(\

static Panel pnl=new Panel(new GridLayout(3,3)); static Label lab=new Label(\ public static void main(String args[]) { frm.setLayout(null); frm.setSize(200,150); frm.setResizable(false); lab.setBounds(20,30,120,20); lab.setBackground(new Color(240,220,190)); pnl.setBounds(20,60,120,80); for(int i=1;i<=9;i++) pnl.add(new Button(Integer.toString(i))); frm.add(lab); frm.add(pnl); frm.setVisible(true); }

第 27 页 共 32页

《Java语言程序设计》实验指导书

实验七 多线程的创建

实验目的

? ? ? ?

掌握使用Thread的子类创建线程。 掌握使用Runnable接口创建线程。 掌握线程同步的处理方法。 掌握线程间通信的处理方法。

实验内容

1. 运行下面的程序,理解用创建Thread子类的方法实现多线程。

class SimpleThread extends Thread {

public SimpleThread(String str) { super(str); }

public void run() {

for (int i = 0; i < 10; i++) {

System.out.println(i + \ try {

sleep((int)(Math.random() * 1000)); } catch (InterruptedException e) {} }

System.out.println(\ } }

public class TwoThreadsTest {

public static void main (String[] args) {

new SimpleThread(\ \ new SimpleThread(\ } }

第 28 页 共 32页

《Java语言程序设计》实验指导书

问题:

(1) 程序的运行结果和功能分别是什么?

(2) 如果程序中去掉try-catch语句,程序是否仍能正常运行? (3) 如果希望执行三个线程,再显示“Go to Shanghai ”,程序如何修改?比较显示次序,是否相同。为什么会有这样的现象?

2.参照教材例子9.9,要求有3个线程:student1,student2,和teacher,基中student1准备睡10分钟后再开始上课,其中student2准备睡一个小时后再开始上课。teacher在输出3句“上课”后,吵醒休眠的线程stuendt1;stuendt1被吵醒后,负责再吵醒休眠的线程student2.

3.参照教材例子9.19编写一个java应用程序,在主线程中再创建3个线程:“运货司机”、“装运工”和“仓库管理员”。要求线程“运货司机”占有CPU资源后立刻联合线程“装运工”,也就是让“运货司机”一直等到“装运工”完成工作才能开车,而“装运工”占有CPU资源后立刻联合线程“仓库管理员”,也就是让“装运工”一直等到“仓库管理员”打开仓库才能开始搬运货物。

第 29 页 共 32页

本文来源:https://www.bwwdw.com/article/vdtf.html

Top