《Java程序设计》实验指导书
实验一、熟悉JDK环境及主要命令
一、实验目的
1) 熟悉JDK的环境配置
2) 掌握JDK的命令
3) 掌握Java Application程序的开发过程,并编写一个Java Application程序
二、实验内容
1.按照上课所学知识,为自己的机器配置环境变量
2.编辑一个Hello World 的小程序,并试着编译运行它
3.将Vehicle 和VehicleDriver两个文件用自己的文本编辑器重新编辑并编译运行,掌握类和对象的定义和使用
1)Vehicle.java (注意:以下代码有几个错误的地方,需要同学自己把他们找出来并更正过来)
public class Vehicle{
public float journey;
public int wheelNum;
public int loadNum;
public int driveSpeed;
/**
*Vehicle 类构造函数,设定初始值
*/
public Vehicle(){
journey=100.3f;
wheelNum=4;
loadNum=1;
}
/**
*Vehicle类的driveAt行驶方法
*/
public void driveAt(int speed){
if (speed>=60){
System.out.println("行车速度太快,容易造成事故");
//如果要求的车速太快,则机动车自动以40单位速度行驶
driveSpeed=40;
}
else {
System.out.println("你在安全行驶速度内行驶");
driveSpeed=speed;
}
}
}
2)VehicleDriver.java
public class VehicleDriver{
public String name; //定义司机的名字
/**
*VehicleDriver 类构造函数
*/
public VehicleDriver(){
name="TOM";
}
/**
*VehicleDriver 类对象的work方法
*/
public void work(){
Vehicle v=new Vehicle(); //生成Vehicle类的对象v
v.driveAt(70); //调用v对象所固有的driveAt()方法
}
public static void main(String args[]){
//生成VehicleDriver类的对象vb
VehicleDriver vd=new VehicleDriver();
vd.work(); //调用vd对象所固有的work()方法
}
}
3.将Vehicle 和VehilceDriver 两个类放在一个.java文件中,文件名称取名为Vtogether.java (注意:需将Vehicle 或 VehicleDriver中某一个类的名称改名为Vtogether,具体更改哪一个由同学根据实际情况来判断),编译和运行该文件
实验二、类的定义和对象的使用
一、实验目的
1) 掌握类的定义
2) 掌握对象的使用
3) 掌握构造方法的重载
二、实验内容
1.创建一个汽车类CarModel.java,它里面有2个不同的构造函数,CarManufactory.java可以应用这些构造方法创建不同类型的汽车
CarModel.java设计要求如下:
定义style(String),color(String),category(String)注:括号中为变量类型
创建第一个构造函数,分别给以上变量赋值,要求为该构造函数定义三个形参,分别赋给相应的变量,形参的值在对象创建时给出
创建第二个构造函数,此构造函数过程为空
定义三个方法,分别返回style,color,category的值
CarManufactory.java设计要求如下:
使用不同的构造函数创建两辆汽车
显示两辆车相关的属性,属性的值要从CarModel的相关方法中取出
2.判断以下程序的结果,并把它改成两个类的形式,其中一个类专门处理运算。
public class Excer{
public static void main(String args[]){
Excer ex=new Excer();
ex.math();
}
void math(){
int x=130,y=45;
System.out.println("x="+x+" ,y="+y);
System.out.println("x+y="+plus(x,y));
System.out.println("x-y="+minus(x,y));
System.out.println("x*y="+multi(x,y));
System.out.println("x/y="+div(x,y));
}
int plus(int a,int b){
return(a+b);
}
int minus(int a,int b){
return(a-b);
}
int multi(int a,int b){
return(a*b);
}
float div(int a,int b){
return ((float)a/b);
}
}
实验三、继承
一、实验目的
1) 掌握类的继承
2) 掌握类成员的覆盖和重载
二、实验内容
1.Vehicle类的基础上创建一个Tractor(拖拉机)类,他不但拥有journey,wheelNum,loadNum,driveSpeed 四种属性和driveAt()方法,而且还拥有自己的plough(耕地)方法,在该方法中要求能够显示journey, wheelNum, loadNum三个属性的值,在Tractor中覆盖driverAt()方法,速度大于等于35就认为是超速,如果是超速速度就要设为20,在这个类中还要创建一个main()方法,分别调用plough()、driveAt方法和Vehicle类的driverAt()方法。
public class Vehicle{
public float journey;
public int wheelNum;
public int loadNum;
public int driveSpeed;
public Vehicle(){
journey=100.3f;
wheelNum=4;
loadNum=1;
}
public void driveAt(int speed){
if (speed>=60){
System.out.println("行车速度太快,容易造成事故");
//如果要求的车速太快,则机动车自动以40单位速度行驶
driveSpeed=40;
}
else {
System.out.println("你在安全行驶速度内行驶");
driveSpeed=speed;
}
}
}
2.在以下程序中出现了属性的覆盖和方法的重载,编译运行下面程序,掌握产生属性覆盖时属性的变化规则和方法的重载时调用的方法规则。
class NoteX {
public static final int MIDDLE_C = 0;
public static final int C_SHARP = 1;
public static final int C_FLAT = 2;
}
public class Father{
int a=100;
public void miner(){
a--;
}
public void play(int NoteX) {
System.out.println("Father.play()");
}
public static void main(String[] arg){
Father x=new Father();
Son y=new Son();
System.out.println("a of son is :" +y.a);
System.out.println("a of sons super is :" +y.getA());
y.miner();
System.out.println("a of son is :"+y.a);
System.out.println("a of sons super is :" +y.getA());
y.play(NoteX. C_SHARP);
y.play(new NoteX());
}
}
class Son extends Father {
int a=0;
public int getA(){
return super.a;
}
public void play(NoteX n) {
System.out.println("Son.play(NoteX n)");
}
}
实验四、接口与内部类
一、实验目的
1)、掌握接口的定义和使用方法
2)、掌握内部类的定义和使用方法
二、实验内容
1. 将以下图示用接口实现和继承实现
2. 已知有两个接口如下所示,要求定义一个类,其中包含两个内部类,这两个内部类分别实现这两个接口,且设为private,在类中分别定义两个方法,可以返回这两个接口。
public interface Destination {
String readLabel();
}
public interface Contents {
int value();
}
实验五、异常的处理机制
一、实验目的
1) 掌握异常的声明
2) 掌握异常的抛出
3) 掌握异常的捕获
4) 掌握自定义异常的使用
二、实验内容
1.编写一段Java程序,在被调用方法中抛出一个异常对象,并将异常交给调用它的方法来处理
2.编写一段Java程序,创建一个自定义异常类,并在一个方法中抛出自定义异常对象,在该方法的catch处理程序中捕获它并重新抛出,让调用它的方法来处理。
实验六、多线程编程
一、实验目的
1) 了解多线程的定义
2) 理解多线程的互斥和同步
3) 掌握多线程的调度和控制
二、实验内容
1.使用Runnable接口实现以下类的功能:
public class testThread extends Thread{
public testThread(){}
public void run(){
System.out.println("run()方法运行....");
}
public static void main(String arg[]){
testThread t=new testThread();
System.out.println("start() 开始运行...");
t.start();
}
}
2.假设一个银行的ATM机,它可以允许用户存款也可以取款。现在一个账户上有存款200元,用户A和用户B都拥有在这个账户上存款和取款的权利。用户A将存入100元,而用户B将取出50元,那么最后账户的存款应是250元。
实际操作过程如下:
l 先进行A的存款操作:
(1)得到账户的存款数额200,耗时2s。
(2)将账户数额增加100,耗时忽略不计
(3)将新生成的账户结果300返回到ATM机的服务器上,耗时2s
l 在进行B的取款操作:
(4)得到增加后账户存款数额300,耗时2s。
(5)将账户数额减少50,耗时忽略不计。
(6)将新生成的账户结果250返回到ATM机的服务器上,耗时2s。
请同学们根据以上要求,编写一个Java程序实现该功能
注:将A的操作和B的操作分别用线程来表示
3.如下是消费者和生产者的一个简化例子,将次程序看懂,然后写下运行结果。
//CubbyHole.java 存储数据
public class CubbyHole {
private int contents;
private boolean available = false;
public synchronized int get() {
while (available == false) {
try {
wait();
} catch (InterruptedException e) { }
}
System.out.println("Customerer " + "goe: " + contents);
available = false;
notifyAll();
return contents;
}
public synchronized void put(int value) {
while (available == true) {
try {
wait();
} catch (InterruptedException e) { }
}
System.out.println("Producer " + "put " + value);
contents = value;
available = true;
notifyAll();
}
}
// Producer.java 生产者
public class Producer extends Thread {
private CubbyHole cubbyhole;
public Producer(CubbyHole c) {
cubbyhole = c;
}
public void run() {
for (int i = 0; i < 10; i++) {
cubbyhole.put(i);
}
}
}
// Consumer.java 消费者
public class Consumer extends Thread {
private CubbyHole cubbyhole;
public Consumer(CubbyHole c) {
cubbyhole = c;
}
public void run() {
int value = 0;
for (int i = 0; i < 10; i++) {
value = cubbyhole.get();
}
}
}
//测试程序
public class ProducerConsumerTest {
public static void main(String[] args) {
CubbyHole c = new CubbyHole();
Producer p1 = new Producer(c);
Consumer c1 = new Consumer(c);
p1.start();
c1.start();
}
}
实验七、输入输出字节流
一、 实验目的
1)、掌握输入字节流的操作
2)、掌握输出字节流的操作
二、 实验内容
1.定义一个字节数组,将其输出到屏幕上
2.将一个图片的内容读取到字节数组当中
实验八、输入输出字符流
一、实验目的
1)、掌握输入字符流的操作
2)、掌握输出字符流的操作
二、实验目的
1. 从键盘输入一串字符,将其输出到屏幕上
2. 将一个文本文件输出到屏幕上
实验九、文件及其文件流
一、实验目的
1)、掌握文件的操作
2)、掌握文件输入流的操作
3)、掌握文件输出流的操作
二、实验内容
1.使用对象的串行化机制,使用RandomAccessFile构造一个应用程序能够随机存取文件的记录,可显示、修改记录的内容。撰写一个StoreDirList类,令其构造函数可以接收文件路径,并能够产生该路径下的所有文件的名称列表。
2.用DataInputStream输出一个整型数,一个双精度数和一个字符串到文件中,然后用DataOutputStream将这些文件读入并打印到标准输出设备。
实验十、Swing容器及其组件
一、实验目的
1)、掌握容器的属性与方法
2)、掌握Swing不同组件的属性与方法
二、实验内容
1.应用按钮、单选按钮、复选框、文本组件等Swing组件设计一个安装程序的对话框界面
实验十一、布局管理器
一、 实验目的
1)、掌握布局管理器的类型
2)、掌握布局管理器的使用方法
二、 实验内容
1.应用布局方法设计一个手机的界面
实验十二、事件处理
一、 实验目的
1)、掌握事件处理模型
2)、能够用程序实现事件处理
3)、掌握使用内部类的方法处理事件
二、 实验内容
1.在一个窗口中,在四个位置循环显示四种不同颜色的正方形,当鼠标点击时,停止循环显示,再次点击,恢复显示
2.在窗口的一个区域进行鼠标操作:mouseEnter,mouseExit,mousePress,mouseDrage和mouseClick。在窗口的另一个区域以文字显示鼠标所进行的相应操作。另外当鼠标进行mousePress,mouseDrage,mouseClick操作时,将显示一个图片。当鼠标拖拉时,图片随鼠标移动。
展开阅读全文