面向对象程序设计实验指导书(2012级适用)
发布时间:2015-06-19 20:50:38
发布时间:2015-06-19 20:50:38
辽东学院自编教材
《面向对象程序设计》
实验指导书
王昕 编
(信息管理及电子商务专业用)
信息技术学院
2014年6月
目 录
实验一 JDK的安装和配置及帮助文档的使用 1
实验二 基本数据类型和控制语句的使用 3
实验三 类与对象的使用 6
实验四 继承和接口的使用 9
实验五 Java基本类库的使用 15
实验六 GUI编程 19
实验七 多线程 22
实验八 输入输出流 24
实验九 网络编程 26
实验类型: 验证型 实验课时: 2 指导教师:
时 间:201 年 月 日 课 次:第 节 教学周次:第 周
实验分室: 实验台号: 实 验 员:
一、 实验目的
1. JDK下载、安装与开发环境设置
2. 学习编写第一个Java 程序
二、 实验内容和要求
1. JDK的安装及配置
1) 下载JDK 1.7或更高版本及其帮助文档。
2) 执行安装文件并按提示进行安装。
3) 设置环境变量,使用鼠标右击“我的电脑”->属性->高级->环境变量
系统变量->新建->变量名:JAVA_HOME 变量值:为JDK的安装目录,例如c:\jdk1.7
系统变量->新建->变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib,注意路径中最前面的.代表当前路径,一定要加上。
修改系统变量Path,在其值的后面加上:%JAVA_HOME%\bin;
2. 编写JAVA程序
1)使用文本编辑器(例如记事本)编写如下代码,并保存为文件:Hello.java(注意:Java区分大小写)。
public class Hello
{
public static void main (String args[ ])
{
System.out.println("你好,很高兴学习Java");
}
}
编译运行:
在DOS环境下进入Hello1.java文件所在的路径,然后输入下列命令进行编译:
javac Hello.java
输入下列命令运行程序:
java Hello
2) 使用文本编辑器(例如记事本)编写如下代码,并保存为文件FirstApplet.java:
import java.applet.*;
import java.awt.*;
public class FirstApplet extends Applet
{ public void paint(Graphics g)
{ g.setColor(Color.red);
g.drawString("我一边喝着咖啡,一边学Java呢",5,30);
g.setColor(Color.blue);
g.drawString("我学得很认真",10,50);
}
}
编译此文件,再编写一个静态网页文件命名为applet.html,内容如下所示:
最后在命令提示符下执行appletviewer applet.html。
3.利用Java帮助文档查看System类的用法。
打开Java帮助文档,单击页面上方的API&Language链接,在弹出的页面中单击上方的Java 2 Platform API Specification链接,在页面左侧窗格中找到System类(所有的类是按字典方式排列),查看其out实例变量的用法。
三、 思考与练习
1. 什么是JDK?
2.什么是Java虚拟机,其工作机制是什么?
实验类型: 验证型 实验课时: 2 指导教师:
时 间:201 年 月 日 课 次:第 节 教学周次:第 周
实验分室: 实验台号: 实 验 员:
一、 实验目的
1. 掌握基本数据类型的运算规则。
2.掌握基本控制结构的使用方法。
二、 实验内容和要求
1. 编写程序
1)针对8种基本类型分别定义8个变量,为变量赋相应的合法值并输出显示出来。
2) 已知本班某名同学各科成绩的平均分(在程序中自定义变量avg,任意赋值),根据该同学的平均分计算其奖学金等级并将结果输出显示出来。奖学金等级计算方法为大于等于90分为一等,大于等于85分为二等,大于等于80分为三等。请写出程序实现上述功能。
2.写出下列程序运行结果
1)
public class Example2_2
{ public static void main(String args[])
{ int x=2,y=1;
switch(x+y)
{ case 1 :
System.out.println(x+y);
break;
case 3:
System.out.println(x+y);
case 0:
System.out.println(x+y);
break;
default: System.out.println("没有匹配的"+(x+y));
}
}
}
2)
public class Example2_3
{ public static void main(String args[])
{ long sum=0,a=5,item=a,n=10,i=1;
for(i=1;i<=n;i++)
{ sum=sum+item;
item=item*10+a;
}
System.out.println(sum);
}
}
三、 思考与练习
1.Java语言的基本数据类型有哪些,哪些数据类型之间可以相互转换?
2.Java语言的表达式有哪些类型?
实验类型: 验证型 实验课时: 4 指导教师:
时 间:201 年 月 日 课 次:第 节 教学周次:第 周
实验分室: 实验台号: 实 验 员:
一、 实验目的
1.掌握类的定义及使用方法。
2. 掌握包的基本使用方法。
二、 实验内容和要求
1.完善程序并正确运行。
public 【代码1】 BubbleSort
{
public static void 【代码2】
{
BubbleSort bs=【代码3】;
int[] array = {10,5,7,12};
System.out.print("排序前;");
bs.print(array);
bs.bubbleAscSort(array);
bs.bubbleDescSort(array);
}
/**
* 冒泡升序排序
* @param array
*/
public void bubbleAscSort(int[] array)
{
int length = array.length;
int temp=0;
for(int i=0;i
{
for(int j=0;j
{
if(array[j+1]
{
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
System.out.println();
System.out.print("升序排序后;");
【代码4】print(array);
}
/**
* 冒泡降序排序
* @param array
*/
public void bubbleDescSort(int[] array)
{
int length = array.length;
int temp=0;
for(int i=0;i
{
for(int j=0;j
{
if(array[j+1]>array[j])
{
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
System.out.println();
System.out.print("降序排序后;");
print(array);
}
public void print(int[] array)
{
int length = array.length;
for(int i=0;i
{
System.out.print(array[i]);
if(i!=length-1)
{
System.out.print(",");
}
}
}
}
2. 上面【代码4】中print(array)前面默认省略了什么关键字,该关键字含义是什么?
3. 将上面程序放到cn.ldxy.sort包中,如何修改程序,并写出编译运行该程序的完整命令。
三、 思考与练习
1.构造方法与普通方法的区别是什么?
2.静态变量/方法与实例变量/方法的区别是什么?
实验类型: 验证型 实验课时: 6 指导教师:
时 间:201 年 月 日 课 次:第 节 教学周次:第 周
实验分室: 实验台号: 实 验 员:
一、 实验目的
1.掌握类的继承、组合、重置和转换方法。
2.掌握接口的基本使用方法。
二、 实验内容和要求
1. 定义了一个接口Shape,在其中声明计算面积和体积的方法,用类Point、Circle、Cylinder实现该接口。完善程序并写出程序运行结果。
//定义接口Shape
interface Shape
{
//计算面积
public abstract double area();
//计算体积
public abstract double volume();
//返回实现该接口的类的名称
public abstract String getName();
}
//定义类Point
class Point implements Shape
{
protected int xPosition, yPosition; //Point的坐标
//没有参数的构造方法,通过setPoint方法设置坐标为(0,0)
public Point()
{
【代码1】
}
//带有两个参数的构造方法,设置坐标为(xPositionCoordinate,yPositionCoordinate)
public Point(int xPositionCoordinate, int yPositionCoordinate)
{
【代码2】
}
//设定Point的坐标值为(xPositionCoordinate,yPositionCoordinate)
public void setPoint(int xPositionCoordinate, int yPositionCoordinate)
{
【代码3】
}
//获取x轴坐标
public int getxPosition()
{
【代码4】
}
//获取y轴坐标
public int getyPosition()
{
【代码5】
}
//实现接口Shape中抽象方法
//计算面积
public double area()
{
【代码6】
}
//计算体积
public double volume()
{
【代码7】
}
//返回当前实现接口Shape的类的名称
public String getName()
{
【代码8】
}
}
//定义类Circle继承Point类
class Circle extends Point
{
protected double radius;
//无参数的构造方法
public Circle()
{
//设置Circle的半径,默认为0
【代码9】
}
//Circle的带有原点和半径参数的构造方法
public Circle(double circleRadius, int xPositionCoordinate,int yPositionCoordinate)
{
//调用父类Point中的构造方法,并设置半径为circleRadius
【代码10】
}
//初始化Circle的半径
public void setRadius(double circleRadius)
{
radius=(circleRadius>=0?circleRadius:0);
}
//取得Circle的半径
public double getRadius()
{
【代码11】
}
//覆盖方法,计算Circle的面积
public double area()
{
【代码12】
}
//覆盖方法,返回当前实现接口Shape的类的名称
public String getName()
{
【代码13】
}
}
//定义类Cylinder.
class Cylinder extends Circle
{
protected double height; //Cylinder的高度
//无参数构造方法
public Cylinder()
{
//调用父类的构造方法,并设置高为0
【代码14】
}
//带有详细参数的构造方法
public Cylinder(double cylinderHeight,double cylinderRadius,
int xPositionCoordinate, int yPositionCoordinate)
{
//调用父类的构造方法,并设置高为cylinderHeight
【代码15】
}
//设置Cylinder的高度
public void setHeight(double cyPositionlinderHeight)
{
height=(cyPositionlinderHeight>=0?cyPositionlinderHeight:0);
}
//获取Cylinder的高度
public double getHeight()
{
【代码16】
}
//覆盖方法,计算Cylinder的面积,这里是表面积
public double area()
{
【代码17】
}
//覆盖方法,计算Cylinder的体积
public double volume()
{
【代码18】
}
//以字符串的形式返回Cylinder的信息,如Center =(xPositionCoordinate,yPositionCoordinate),Height = height
public String toString()
{
return super.toString()+"; Height = "+height;
}
//覆盖方法,返回当前实现接口Shape的类的名称
public String getName()
{
【代码19】
}
}
public class InterfaceTest
{
public static void main(String args[])
{
//创建对象
Point point=new Point(3,15);
Circle circle=new Circle(5.5,23,10);
Cylinder cylinder=new Cylinder(10,6.5,20,20);
//创建一个Shape数组
Shape Shapes[]=new Shape[3];
Shapes[0]=point;
Shapes[1]=circle;
Shapes[2]=cylinder;
//获取各个对象的信息
String output=point.getName()+": "+point.toString()+"\n"+circle.getName()+":
"+circle.toString()+"\n"+cylinder.getName()+": "+cylinder.toString();
for (int i=0;i
{
output+="\n\n"+Shapes[i].getName()+": "+Shapes[i].toString()+"\nArea = "
+Shapes[i].area()+"\t\tVolume = "+Shapes[i].volume();
}
System.out.println();
System.out.println(output);
}
}
三、 思考与练习
1.子类将继承父类的哪些成员变量和方法?
2.子类在什么情况下隐藏父类的成员变量和方法?
实验类型: 验证型 实验课时: 4 指导教师:
时 间:201 年 月 日 课 次:第 节 教学周次:第 周
实验分室: 实验台号: 实 验 员:
一、 实验目的
掌握常用工具类的使用方法。
二、 实验内容和要求
1.完善下面程序并正确运行
class StringExample
{ public static void main(String args[])
{ String s1=new String("you are a student"),
s2=new String("how are you");
if(【代码1】) // 使用equals方法判断s1与s2是否相同
{
System.out.println("s1与s2相同");
}
else
{
System.out.println("s1与s2不相同");
}
String s3=new String("210602198********");
if(【代码2】) //判断s3的前缀是否是“210602”。
{
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="c:\\java\\jsp\\A.java";
position=【代码5】 //获取path中最后出现目录分隔符号的位置
System.out.println("c:\\java\\jsp\\A.java中最后出现\\的位置:"+position);
String fileName=【代码6】//获取path中“A.java”子字符串。
System.out.println("c:\\java\\jsp\\A.java中含有的文件名:"+fileName);
String s6=new String("100"),
s7=new String("123.678");
int n1=【代码7】 //将s6转化成int型数据。
double n2=【代码8】 //将s7转化成double型数据。
double m=n1+n2;
System.out.println(m);
String s8=【代码9】 //String调用valuOf(int n)方法将m转化为字符串对象
position=s8.indexOf(".");
String temp=s8.substring(position+1);
System.out.println("数字"+m+"有"+temp.length()+"位小数") ;
String s9=new String("ABCDEF");
char a[]=【代码10】 //将s9存放到数组a中。
for(int i=a.length-1;i>=0;i--)
{
System.out.print(" "+a[i]);
}
}
}
2.写出下面程序运行结果
1)
import java.util.*;
public class CalendarExample
{ public static void main(String args[])
{ System.out.println(" 日 一 二 三 四 五 六");
Calendar calendar=Calendar.getInstance();
calendar.set(2014,6,1); //将日历翻到2014年6月1日。
int 星期几=calendar.get(Calendar.DAY_OF_WEEK)-1;
String a[]=new String[星期几+31];
for(int i=0;i<星期几;i++)
{ a[i]="**";
}
for(int i=星期几,n=1;i<星期几+31;i++)
{ if(n<=9)
a[i]=String.valueOf(n)+" ";
else
a[i]=String.valueOf(n) ;
n++;
}
for(int i=0;i
{ if(i%7==0)
{ System.out.println("");
}
System.out.print(" "+a[i]);
}
}
}
2)
public class TestMath
{
double x=-6.4;
double y=3.2;
public static void main(String args[])
{
double d = Math.random();
System.out.println("得到一个随机数是:"+d);
TestMath tm=new TestMath();
double p = 2 * Math.PI*Math.abs(tm.x);
System.out.println("半径为"+Math.abs(tm.x)+"的圆的周长是:"+p);
System.out.println(tm.x+"和"+tm.y+"的最大值是:"+Math.max(tm.x,tm.y));
System.out.println(tm.x+"和"+tm.y+"的最小值是:"+Math.min(tm.x,tm.y));
System.out.println("以"+tm.y+"为底,以"+tm.x+"为指数的幂值是:"+
Math.pow(tm.y,tm.x));
System.out.println(tm.y+"的平方根是:"+Math.sqrt(tm.y));
}
}
实验类型: 设计型 实验课时: 4 指导教师:
时 间:201 年 月 日 课 次:第 节 教学周次:第 周
实验分室: 实验台号: 实 验 员:
一、 实验目的
1.掌握事件处理机制。
2.掌握常用布局管理器的使用方法。
3.掌握常用Swing组件的使用方法。
。
二、 实验内容和要求
1. 写一个带菜单的窗口程序,要求具有一个“调色”菜单,菜单中包括“红色”和“蓝色”两个命令项,单击其中任意一个命令能够将窗口背景色调整为相应颜色。
2.下面程序代码的功能是模拟某种应用软件界面,请写出程序的输出结果。
import java.awt.*;
import javax.swing.*;
public class Align extends JFrame
{
private GridLayoutPane gridPanel;
public Align()
{
Container container=getContentPane();
gridPanel=new GridLayoutPane();
container.add(gridPanel);
container.add(new JButton("9"),BorderLayout.SOUTH);
setSize(400,300);
setVisible(true);
}
public static void main(String[] args)
{
Align application=new Align();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class GridLayoutPane extends JPanel
{
static final int n=3;
public GridLayoutPane()
{
setLayout(new GridLayout(n,n));
for (int i=0; i
{
for(int j=0; j
{
int k=i*n+j;
add(new JButton(""+k));
}
}
}
}
实验类型: 设计型 实验课时: 4 指导教师:
时 间:201 年 月 日 课 次:第 节 教学周次:第 周
实验分室: 实验台号: 实 验 员:
一、 实验目的
1. 掌握多线程程序的编写方法。
2. 掌握线程的常见操作。
二、 实验内容和要求
1. 利用多线程机制实现一个简单的英文打字程序
三、 思考与练习
1.实现多线程可以用哪两种基本方法?两种方法有何不同。
实验类型: 设计型 实验课时: 2 指导教师:
时 间:201 年 月 日 课 次:第 节 教学周次:第 周
实验分室: 实验台号: 实 验 员:
一、 实验目的
1.掌握操作文件的基本方法。
2.掌握基本输入输出流的使用方法。
二、 实验内容和要求
1. 编写一个实现文件复制功能的程序(复制任意文件即可)。
三、 思考与练习
1.InputStream和OutputStream的基本方法是什么,写出两个以上即可?
2. 字符流和字节流的区别是什么?。
实验类型: 设计型 实验课时: 4 指导教师:
时 间:201 年 月 日 课 次:第 节 教学周次:第 周
实验分室: 实验台号: 实 验 员:
一、 实验目的
掌握套接字的基本使用方法。
二、 实验内容和要求
1.编写一个简单的C/S模式聊天室应用程序。