《Java实验指导书》word版.doc_第1页
《Java实验指导书》word版.doc_第2页
《Java实验指导书》word版.doc_第3页
《Java实验指导书》word版.doc_第4页
《Java实验指导书》word版.doc_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java程序设计实验指导书湖南科技学院前言 一、上机实验目的 上机实验的目的是提高学生的分析问题、解决问题的能力和动手能力,通过实践环节理解 Java 语言的基本结构和程序设计方法。通过亲手编程掌握 Java 语言编程的方法。 二、实验基本内容 为了使学生在上机实验时目标明确,本实验指导书针对课程内容编写了 10 个实验。学生可以在课内机时先完成指导书中给出的程序,理解所学的知识,在此基础上再编写其他应用程序。指导书中的 10 个实验如下。 1面向对象编程练习。 2包、接口与异常处理(exception)。 3数组、向量和字符串。 4常用系统类的使用。 5建立图形用户界面。6图形与多媒体处理。 7综合练习。 8流与文件。 9多线程。10网络编程三、实验任务与时间安排 Java 语言是一门实践性很强的课程,除了在课内安排的实验外,鼓励同学在课外用相关技术 进行编程练习。Java 语言上机实验时间为 36学时,分为两大部分:Java基础、Java核心。具体实践课时安排如下:模块实验序号知识点实践课时备注Java基础1面向对象编程练习42包、接口与异常处理(exception)23数组、向量和字符串44常用系统类的使用25流与文件46多线程47建立图形用户界面2Java核心8图形与多媒体处理49综合练习210网络编程8合计36目 录前言一、上机实验目的二、实验基本内容三、实验任务与时间安排目 录实验 1 面向对象编程练习一、实验目的二、实验要求三、实验内容(一)创建 Applet 应用小程序(二)创建对象并使用对象(三)编写显示当前日期和时间的程序(四)使用修饰符(五)方法中参数传递的练习(六)类的继承性练习(七)类的多态性练习四、思考题实验 2 包、接口与异常处理(exception)一、实验目的二、实验要求三、实验内容(一)了解并使用 Java 的系统包(二)创建并使用自定义包(三)使用接口技术(四)了解异常处理机制实验 3 数组、向量和字符串一、实验目的二、实验要求三、实验内容(一)使用数组(二)使用向量类(三)使用字符串与字符串类实验 4 常用系统类的使用一、实验目的二、实验要求三、实验内容(一)了解 Applet 的生命周期(二)使用数学函数类(三)使用日期类实验 5 建立图形用户界面一、实验目的二、实验要求三、实验内容(一)创建图形用户界面(二)了解事件处理机制(三)建立独立运行的窗口界面并使用匿名类(四)使用 Swing 组件(五)使用自定义对话框与内部类实验 6 图形与多媒体处理一、实验目的二、实验要求三、实验内容(一)使用图形类 Graphics(二)插入图像与播放音乐实验 7 综合练习一、实验目的二、实验要求三、实验内容(一)幻灯机效果连续显示多幅图像(二)使用滚动条改变背景颜色(三)Applet 与 Application 合并运行(四)创建电闪雷鸣的动画实验8 流与文件一、实验目的二、实验要求三、实验内容(一)使用标准数据流的应用程序(二)使用文件输入输出流的应用程序(三)使用随机文件类的应用程序(四)使用数据输入输出流与文件输入输出流类的应用程序(五)使用对象输入输出流的应用程序实验9 线程一、实验目的二、实验要求三、实验内容(一)Thread子类的方法实现多线程(二)实现Runnable接口的方法实现多线程四、思考题实验10 网络编程一、实验目的二、实验要求三、实验内容(一)使用InetAddress类的方法(二)Socket编程(三)UDP编程(四)获取URL信息(五)利用URL类获取网络资源(六)利用URLConnection对URL资源的读取(七)掌握URLConnection对URL资源的写入四、思考题实验 1 面向对象编程练习 一、实验目的 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想,了解类的封装方法,以及 如何创建类和对象,了解成员变量和成员方法的特性,掌握 OOP 方式进行程序设计的方法,了解类的继承性和多态性的作用。 二、实验要求 1 编写一个体现面向对象思想的程序。 2 编写一个创建对象和使用对象的方法的程序。3 编写一个显示当前日期和时间的程序。 4 编写不同成员变量修饰方法的程序。 5 编写不同成员方法修饰方法的程序。 6 编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序。 7 编写体现类的多态性(成员方法重载、构造方法重载)的程序。三、实验内容 (一)创建 Applet 应用小程序 1创建一个 Applet 应用程序 KY3_1.java 文件。 (1)程序功能:建立一个 Applet 小程序,使其可以进行简单的加法运算。该程序要包含类、接口、属性、方法、事件等面向对象的基本元素。 (2)程序源代码如下。 import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class KY3_1 extends Applet implements ActionListener Label label1=new Label(+); Label label2=new Label(=); TextField field1=new TextField(6); TextField field2=new TextField(6); TextField field3=new TextField(6); Button button1=new Button(相加); public void init() / 初始化 add(field1); add(label1); add(field2); add(label2); add(field3); add(button1); button1.addActionListener(this); public void actionPerformed(ActionEvent e) / 处理按钮事件 int x=Integer.parseInt(field1.getText()+Integer.parseInt(field2.getText(); field3.setText(Integer.toString(x); / 数值转换为字符串 2 编写一个浏览 Applet 应用程序的页面文件 KY3_1.HTML,源代码如。 3 将 KY3_1.java 源程序编译为 KY3_1.class 文件 4 使用浏览器或使用小程序查看器浏览 KY3_1.HTML 文件(即在命令提示符窗口输入:appletviewer KY3_1.HTML),运行。(二)创建对象并使用对象 1编写 Applet 程序 程序功能:这个 Applet 程序要在页面上输出两个矩形,并伴有文字输出。 KY3_2.java 程序的源代码如下。 import java.awt.*; import java.applet.Applet; public class KY3_2 extends Applet MyBox b1=new MyBox();/创建对象 b1 MyBox b2=new MyBox(170,20,60,60); /创建对象 b2 public void paint(Graphics g) b1.setPosition(20,20); b1.setSize(60,60); b1.draw(g); g.drawString(矩形 1 的 X 位置: +b1.getX(), 20, 100); g.drawString(矩形 1 的 Y 位置: +b1.getY(), 20, 120); b2.draw(g); g.drawString(矩形 2 的 X 位置: +b2.getX(), b2.getX(), b2.getY()+80); g.drawString(矩形 2 的 Y 位置: +b2.getY(), b2.getX(), b2.getY()+100); class MyBox private int x, y, width, height; MyBox() x=0; y=0; width=0; height=0; MyBox(int xPos, int yPos, int w, int h) x=xPos; y=yPos; width=w; height=h; public void setPosition (int xPos, int yPos) x=xPos; y=yPos; public void setSize (int w, int h) width=w; height=h; public int getX() return x; public int getY() return y; public void draw(Graphics g) g.drawRect(x, y, width, height); 2编写一个浏览 Applet 应用程序的页面文件 KY3_2.HTML 3 将 KY3_2.java 源程序编译为 KY3_2.class 文件 4 使用浏览器或使用小程序查看器浏览KY3_2.HTML文件(即在命令提示符下输入:appletviewer KY3_2.HTML),运行.思考:程序的结构。类与对象的关系。对象创建、使用、销毁的过程。(三)编写显示当前日期和时间的程序1 编写Applet 类文件KY3_3.java 程序功能:该程序通过使用一个自定义类Time,实现显示当前日期和时间的功能 KY3_3.java 程序源代码如下。import java.awt.Graphics;import java.applet.Applet;import java.util.Calendar;class Time private Calendar t;private int y, m, d, hh, mm, ss;Time ()t=Calendar.getInstance();y=t.get(t.YEAR);m=t.get(t.MONTH)+1;d=t.get(t.DATE);hh=t.get(t.HOUR_OF_DAY);mm=t.get(t.MINUTE);ss=t.get(t.SECOND);public String getDate() return y+ 年+m+月+d+日;public String getTime() String s=hh+ 时+mm+分+ss+秒;return s;public class KY3_3 extends Applet Time t=new Time();public void paint(Graphics g) g.drawString(当前日期:+t.getDate(),50,40);g.drawString(当前时间:+t.getTime(),50,80);2 编写浏览KY3_3 类的页面文件KY3_3.html3 在浏览器中浏览程序运行结果。(四)使用修饰符有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目的。常用的修饰符如下。Public,private,protected,package,static,final,transient,volatile1 程序功能:通过两个类StaticDemo、KY3_4 说明静态变量/方法与实例变量/方法的区别。2 编写类文件KY3_4.java,程序源代码如下。class StaticDemo static int x;int y;public static int getX() return x;public static void setX(int newX) x = newX;public int getY() return y;public void setY(int newY) y = newY;public class KY3_4 public static void main(String args) System.out.println(静态变量x=+StaticDemo.getX();System.out.println(实例变量y=+StaticDemo.getY(); / 非法,编译时将出错StaticDemo a= new StaticDemo();StaticDemo b= new StaticDemo();a.setX(1);a.setY(2);b.setX(3);b.setY(4);System.out.println(静态变量a.x=+a.getX();System.out.println(实例变量a.y=+a.getY();System.out.println(静态变量b.x=+b.getX();System.out.println(实例变量b.y=+b.getY();3 对上面的源程序进行编译,排错并运行(五)方法中参数传递的练习1 编写一个传值调用的程序文件KY3_5.java。 程序功能:程序首先给整型变量x 和y 赋一个初值10,然后使用传值调用方式调用方法ff1对x 和y 做乘方及输出x 和y 的乘方值,最后再输出x 和y 的乘方值。 程序源代码如下。class KY3_5 public static void main(String args) int x=10, y=10;ff1(x, y);System.out.println(x=+x+, y=+y);static void ff1(int passX, int passY) passX=passX*passX;passY=passY*passY;System.out.println(passX=+passX+, passY=+passY); 编译KY3_5.java 分析其运行结果2 编写一个调用对象方法的程序文件KY3_6.java。 程序功能:通过调用对象的方法在方法调用后修改了成员变量的值。 KY3_6.java 程序源代码如下。class KY3_6 public static void main(String args) Power p=new Power();p.ff2(10,10);System.out.println(方法调用后 x=+p.x+, y=+p.y);class Powerint x=10, y=10;void ff2(int passX, int passY) System.out.println(初始时 x=+x+, y=+y);x=passX*passX;y=passY*passY;System.out.println(方法调用中 x=+x+, y=+y); 编译KY3_6.java以上两个实验例子仅仅是为了说明Java 编程中参数传递时要注意的问题,在实际编程中是不可取的,因为完全可以采用其它更好的方法来实现参数的传递。例如,前面还使用过传递对象的方式。思考:方法的参数传递有哪些方式?区别时什么?(六)类的继承性练习 1 进一步理解继承的含义 新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。新类 还可添加新的变量和方法。这种现象就称为类的继承。 当建立一个新类时,不必写出全部成员变量和成员方法。只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。被继承的类称为父类或超类(superclass),这个新类称为子类。Java 提供了一个庞大的类库让开发人员继承和使用。设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。所以,通常要对子类进行扩展,即添加新的属性和方法。这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。继承的意义就在于此。 2 创建公共类 KY3_7_P (1)编写程序文件 KY3_7_P.java,源代码如下。 public class KY3_7_P protected String xm; /具有保护修饰符的成员变量 protected int xh; void setdata(String m,int h) /设置数据的方法 xm =m; xh = h; public void print() /输出数据的方法 System.out.println(xm+, +xh); (2)编译 KY3_7_P.java,产生类文件 KY3_7_P.class。 3创建继承的类 (1)程序功能:通过 KY3_7_P 类产生子类 KY3_8,其不仅具有父类的成员变量 xm(姓名)、xh(学号),还定义了新成员变量 xy(学院)、xi(系)。在程序中调用了父类的 print 方法,同时可以看出子类也具有该方法。(2)编写 KY3_8.java 程序,源代码如下。 class KY3_8 extends KY3_7_P protected String xy; protected String xi; public static void main(String args) KY3_7_P p1 = new KY3_7_P(); p1.setdata(帅零,12321) ; p1.print(); KY3_8 s1 = new KY3_8() ; s1.setdata(郭丽娜,12345); /调用父类的成员方法 s1.xy=经济管理学院; /访问本类的成员变量 s1.xi=信息管理系; /访问本类的成员变量 s1.print(); System.out.print(s1.xm+, +s1.xy+, +s1.xi); (3)编译并运行程序注意:公共类 KY3_7_P 与 KY3_8 类要在同一文件夹(路径)内。 (七)类的多态性练习1 理解类的多态性类的继承发生在多个类之间,而类的多态只发生在同一个类上。在一个类中,可以定义多个同名的方法,只要确定它们的参数个数和类型不同。这种现象称为类的多态。多态使程序简洁,为程序员带来很大便利。在OOP 中,当程序要实现多个相近的功能时,就给相应的方法起一个共同的名字,用不同的参数代表不同的功能。这样,在使用方法时不论传递什么参数,只要能被程序识别就可以得到确定的结果。类的多态性体现在方法的重载(overload)上,包括成员方法和构造方法的重载。2 方法的重载方法的重载是指对同名方法的不同使用方式。 程序功能:对不同的数进行排序输出。在IntSort 类中定义3 个同名的方法sort,在 编写KY3_9.java 文件,源代码如下。import java.awt.Graphics;import java.applet.Applet;class IntSort public String sort(int a, int b) if (ab)return a+ +b;elsereturn b+ +a;public String sort(int a, int b, int c) int swap;if (ab) swap=a;a=b;b=swap;if (ac) swap=a;a=c;c=swap;54if (bc) swap=b;b=c;c=swap;return a+ +b+ +c;public String sort(int arr) String s= ;int swap;for (int i=0; iarr.length; i+)for (int j=0; jarrj+1) swap=arrj;arrj=arrj+1;arrj+1=swap;for (int i=0; iarr.length; i+)s=s+arri+ ;return s;public class KY3_11 extends Applet IntSort s=new IntSort();public void paint(Graphics g) int a=30, b=12, c=40;int arr=34,8,12,67,44,98,52,23,16,16;g.drawString(两个数的排序结果:+s.sort(a,b),30,30);g.drawString(三个数的排序结果:+s.sort(a,b,c),30,60);g.drawString(数组的排序结果:+s.sort(arr),30,90); 编译并运行程序 三个同名方法public String sort (int a, int b)public String sort (int a, int b, int c)public String sort (int arr) 编写KY3_10 类文件的页面文件KY3_11.html3 构造方法的重载构造方法的名称和类同名,没有返回类型。尽管构造方法看起来和一般的成员方法没有差别,但它不是方法,也不是类的成员。因此,构造方法不能直接调用,只能由new 操作符调用。构造方法对于类是十分重要的,对象的初始化任务要靠构造方法来完成。重载构造方法的目的是提供多种初始化对象的能力,使程序员可以根据实际需要选用合适的构造方法来初始化对象。 编写构造方法RunDemo 的重载程序文件KY3_11,源代码如下。class RunDemo private String userName, password;56RunDemo() System.out.println(全部为空!);RunDemo(String name) userName=name;RunDemo(String name, String pwd) this(name);password=pwd;check();void check() String s=null;if (userName!=null)s=用户名:+userName;elses=用户名不能为空!;if (password!=12345678)s=s+ 口令无效!;elses=s+ 口令:*;System.out.println(s);public class KY3_12 public static void main(String args) new RunDemo();new RunDemo(刘新宇);new RunDemo(null,邵丽萍);new RunDemo(张驰,12345678); 编译并运行程序 三个构造方法,其中第一个无参构造方法RunDemo() 的实际作用是对成员变量赋缺省初值,由于userName和password都是String 类,所以它们的缺省初值为null。第二个构造方法RunDemo(String) 只有一个参数,用来对成员变量userName 赋初值。第三个构造方法RunDemo(String, String) 有两个参数,并有更多的内容,首先调用this(name),其实际作用就是调用当前类的构造方法RunDemo(String name);然后对成员变量password 赋值;最后调用check 方法来检查userName 和password,类似于一般程序的口令验证。重载构造方法的执行由对象根据实际参数的个数、类型和顺序确定。四、思考题1 说明使用变量之前是不是都要先声明变量。说明使用变量之前是不是都要先赋值,为什么?2 说明什么是构造方法。3 说明程序中有多个类时如何确定源程序文件的名称。4 说明类的继承和多态有什么作用,在使用上应该注意什么问题。实验 2 包、接口与异常处理(exception) 一、实验目的 了解 Java 中包(package)、接口(interface)和异常处理(exception)的作用,掌握包、接口、 异常处理的设计方法。 二、实验要求 1 了解 Java 系统包的结构。 2 掌握创建自定义包的方法。 3 掌握使用系统接口的技术和创建自定义接口的方法。4 理解系统异常处理的机制和创建自定义异常的方法。 三、实验内容 (一)了解并使用 Java 的系统包 包是类和接口的集合。利用包可以把常用的类或功能相似的类放在一个包中。Java 语言提供系统 包,其中包含了大量的类,可以在编写 Java 程序时直接引用它们。为便于管理和使用它们,将这些类 分为了不同的包。包又称类库或 API 包,所谓 API(Application Program Interface)即应用程序接口。API 包方面提供丰富的类与方法供大家使用,如画图形、播放声音等,另一方面又负责和系统 软硬件打交道,圆满实现用户程序的功能。所有 Java API 包都以“java.”开头,以区别用户创建的包。 接口解决了 Java 不支持多重继承的问题,可以通过实现多个接口达到与多重继承相同的功能。 处理程序运行时的错误和设计程序同样重要,只有能够完善处理运行时出错的程序,软件系统才 能长期稳定地运行,异常处理就是说明如何处理程序运行时出错的问题。 (二)创建并使用自定义包 1自定义包的声明方式 声明包语句必须添加在源程序的第一行,表示该程序文件声明的全部类都属于这个包。 2创建自定义包 Mypackage 在存放源程序的文件夹中建立一个子文件夹 Mypackage。例如,在“E:java程序”文件夹之中创建一个与包同名的子文件夹 Mypackage(E:java程序Mypackage),并将编译过的 class 文件放入该文件夹中。注意:包名与文件夹名大小写要一致。再添加环境变量 classpath 的路径,例如: E:j2sdk1.4.2_01lib; E:java程序 3在包中创建类 YMD.java 程序功能:在源程序中,首先声明使用的包名 Mypackage,然后创建 YMD 类,该类 具有计算今年的年份,可以输出一个带有年月日的字符串的功能。 编写 YMD.java 文件,源代码如下。 package Mypackage; /声明存放类的包 import java.util.*; /引用 java.util 包 public class KY4_1_YMD private int year,month,day; public static void main(String arg3) public KY4_1_YMD(int y,int m,int d) year = y; month = (m=1) & (m=1) & (d=31) ? d : 1); public KY4_1_YMD() this(0,0,0); public static int thisyear() return Calendar.getInstance().get(Calendar.YEAR);/返回当年的年份 public int year() return year;/返回年份 public String toString() return year+-+month+-+day;/返回转化为字符串的年-月-日 编译 KY4_1_YMD.java 文件,然后将 KY4_1_YMD.class 文件存放到 Mypackage 文件夹中。 3编写使用包 Mypackage 中 KY4_1_YMD 类的程序 KY4_2.java 程序功能:给定某人姓名与出生日期,计算该人年龄,并输出该人姓名,年龄,出生日期。程序使用了 KY4_1_YMD 的方法来计算年龄。 编写 KY4_2.java 程序文件,源代码如下。 import Mypackage.KY4_1_YMD; /引用 Mypackage 包中的 KY4_1_YMD 类 public class KY4_2 private String name; private KY4_1_YMD birth; public static void main(String args) KY4_2 a = new KY4_2(张驰,1990,1,11); a.output(); public KY4_2(String n1,KY4_1_YMD d1) name = n1; birth = d1; public KY4_2(String n1,int y,int m,int d) this(n1,new KY4_1_YMD(y,m,d);/初始化变量与对象 public int age() /计算年龄 return KY4_1_YMD.thisyear() - birth.year(); /返回当前年与出生年的差即年龄 public void output() System.out.println(姓名 : +name); System.out.println(出生日期: +birth.toString(); System.out.println(今年年龄 : +age(); 编译并运行程序,结果如图 4.3 所示。(三)使用接口技术 1实现 MouseListener 和 MouseMotionListener 两个接口 编写实现接口的程序文件 KY4_3.java,源代码如下。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class KY4_3 extends Applet implements MouseListener, MouseMotionListener int x1, y1, x2, y2; public void init() addMouseListener(this); addMouseMotionListener(this); public void paint(Graphics g) g.drawLine (x1, y1, x2, y2); public void mousePressed(MouseEvent e) / 记录起点坐标 x1=e.getX(); y1=e.getY(); public void mouseClicked(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseReleased(MouseEvent e) public void mouseDragged(MouseEvent e) / 记录终点坐标 x2=e.getX(); y2=e.getY(); repaint(); public void mouseMoved(MouseEvent e) 编译 KY4_3.java 文件。 编写 KY4_3.html 文件,源代码如下。 (5)在浏览器中打开 KY4_3.html 文件,在窗口中拖动鼠标可以随意画出一条线(四)了解异常处理机制 1 编写使用 trycatch 语句处理异常的程序文件 KY4_4.java,源代码如下。 public class KY4_6 public static void main(String arg3) System.out.println(这是一个异常处理的例子n); try int i=10; i /=0; catch (ArithmeticException e) System.out.println(异常是:+e.getMessage(); finally System.out.println(finally 语句被执行); 编

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论