为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

《Java程序设计》实训指导书

2018-11-09 39页 doc 79KB 30阅读

用户头像

is_353097

暂无简介

举报
《Java程序设计》实训指导书《Java程序设计》实训指导书 项目(实训)指导书 系 别: 计算机系 专 业: 软件技术 课 程: Java程序设计 制 订 人: 葛汉强 审 核 人: 聂军 制订时间: 2012年2月 目 录 项目一 Java 运行环境的安装、配置与运行 1 项目二 Java 基本语法练习 9 项目三 Java语言面向对象基础 19 项目四 包、接口与异常处理 39 项目五 数组、向量和字符串 46 项目六 常用系统类的使用 51 项目七 建立图形用户界面 57 项目八 流与文件 72 项目九 线程 79 项目十...
《Java程序设计》实训指导书
《Java程序设计》实训指导书 项目(实训)指导书 系 别: 计算机系 专 业: 软件技术 课 程: Java程序设计 制 订 人: 葛汉强 审 核 人: 聂军 制订时间: 2012年2月 目 录 项目一 Java 运行环境的安装、配置与运行 1 项目二 Java 基本语法练习 9 项目三 Java语言面向对象基础 19 项目四 包、接口与异常处理 39 项目五 数组、向量和字符串 46 项目六 常用系统类的使用 51 项目七 建立图形用户界面 57 项目八 流与文件 72 项目九 线程 79 项目十 网络编程 83 项目一 Java 运行环境的安装、配置与运行 一、项目(实训)名称 Java 运行环境的安装、配置与运行 二、项目(实训)学时数 8课时 三、项目(实训)目标 1. 阶段目标 掌握下载 Java SDK 软件包,掌握设置 Java 程序运行环境的方法,了解 Java 语言的概貌,安装、掌握Eclipse软件,为学习 Java 语言和进行 Java 程序的实验做好准备工作,安装、掌握Eclipse软件,为学习 Java 语言和进行 Java 程序的实验做好准备工作,浏览Applet 程序。 2. 最终成果形式 通过课堂实操,熟练掌握Eclipse的安装技巧,能搭建Java 程序运行环境。 3. 获得的知识 通过本次课堂实验学生了解到Java平台的搭建过程,掌握了Java源文件的编译与运行,了解到什么是Java的字节码文件。 四、项目(实训)中的具体任务 1. SDK 的下载与安装 2. 设置环境变量 3. 编写、编译Java 源程序 4. 运行Java 程序 5. 安装、使用Eclipse软件 五、教师知识和能力要求 1. 教师应了解Java平台的搭建过程; 2. 教师应了Java的编译器和解释器; 六、学生知识和能力准备 1. 学生应了解一般软件的安装方法; 2. 学生应了解文件的搜索方法。 七、工具与设备 1. Eclipse软件 2. 教室网络系统 八、辅助教学资料 1. 课堂教学软件 2. 《JAVA语言程序设计》 陈 锐主编,机械工业出版社 九、实施步骤与技术要点 (1)SDK 的下载与安装 1(机器要求 Java 对机器运行要求不高。下面给出的是基于Windows 平台的机器要求。 硬件要求:CPU PII 以上,64M 内存,1OOM 硬盘空间即可。 软件要求:Windows98/Me/XP/NT/2000,IE 5 以上。 2(下载SDK 为了建立基于SDK 的Java 运行环境,需要先下载Sun 的免费SDK 软件包。 SDK 包含了一整套开发工具,其中包含对编程最有用的是Java 编译器、Applet 查看器和Java 解释器。 在浏览器中输入 J2SE v 1.4.2_19 ”栏可以选择下载 J2SE v 1.4.2_19 SDK 软件包。有两种选择:一种是在线安装“Windows Installation”;一种是离线安装“Windows Offline Installation”。 3(安装SDK 运行下载的“j2sdk-1_4_2_19-windows-i586.exe”软件包,可安装SDK,在安装过程中可以设置安装路径及选择组件,系统默认的安装路径为C:\ j2sdk1.4.2_09,默认的组件选择是全部安装。安装过程如图1-1和图1-2所示: 图1-1 SDK安装过程(1) 图1-2 SDK安装过程(2) 4(SDK 中的主要文件夹和文件 安装成功后,E:\ j2sdk1.4.2_19 中的文件和子目录其中,bin 文件夹中包含编译器(javac.exe)、解释器(javac.exe)、Applet 查看器(appletviewer.exe)等可执行文件,如图1-3所示: 图1-3 SDK的主要文件夹 (2)设置环境变量 为了能正确方便的使用SDK,可手工配置一些Windows 的环境变量,Windows 98 与Windows/xp/NT/2000 的配置略有不同。下面以Windows/xp/NT/2000为例说明相关配置。 1(设置Windows XP/NT/2000 在桌面“我的电脑”图标上单击右键,选择“属性”菜单,将出现系统特性设置界面,如图1-4所示: 图1-4 “我的电脑” 右键“系统属性” 在“高级”选项卡中单击“环境变量”按钮。将出现“环境变量”设置界面,如图1-5所示: 图1-5 环境变量 在“系统变量”框中选择“Path”,然后单击“编辑”按钮,在出现的“编 辑系统变量”对话框中, 在“变量值”栏的命令前添加“C:\j2sdk1.4.2_19\bin;”命令,用同样方法设置环境变量“classpath”,其值为“C:\j2sdk1.4.2_19\lib;”命令。如图1-6所示: 图1-6 设置Path变量值 设置完成后,单击“开始”?“所有程序”?“附件”?“命令提示符”打开DOS 窗口,如图1-7所示: 图1-7 打开DOS窗口 在命令提示符下输入“java”或“javac”,回车后,如果出现其用法参数提示信息,则安装正确,如图1-8所示: 图1-7 用javac命令测试 2. 设置DOS 起始位置 为了在打开DOS 窗口时可以直接进入包含你开发的java 程序的路径下,下面以Windows XP/2000为例说明设置过程。 首先建立一个存放java 源程序的路径和文件夹,如将实验中建立的java 源程序都存放在为“d:\java\”文件夹中。 单击“开始”?“所有程序”?“附件”?“命令提示符”,选择“命令提示符”选项右击, 在出现的下拉菜单中选择“属性”菜单,将打开“命令提示符 属性”对话框,如图1-8 所示。 图1-8 命令提示符 在“命令提示符 属性”对话框中选择“快捷方式”选项,在“起始位置”栏输入“d:\java\”,单击“确定”按钮,如图1-9所示: 图1-9 命令提示符属性设置 进行了上面的设置后,打开DOS 窗口时将直接进入“d:\java ”路径下。 如果没有进行上述设置,可使用DOS 命令,直接输入“d:”按回车进入到d 盘,再输入“cd java”到d 盘的java 子目录下。 (3)编写、编译Java 源程序 1(打开一个纯文本编辑器,键入如下程序: public class Hello public static void main String args[] System.out.println "Hello,welcome!" ; 2(将文件命名为Hello.java,保存为文本文件格式文件,注意保存文件的路径。根据前面环境变量的设置,Hello.java 应该保存在“d:\java\”的路径下。3(Java 源程序编写后,要使用Java 编译器(javac.exe)进行编译,将Java 源程序编译成可执行的程序代码。Java 源程序都是扩展名为 .java 的文本文件。编译时首先读入Java 源程序,然后进行语法检查,如果出现问题就终止编译。语法检查通过后,生成可执行程序代码即字节码,字节码文件名和源文件名相同,扩展名为 .class。打开命令提示符窗口(MS,DOS 窗口)进入Java 源程序所在路径。键入编译器文件名和要谝译的源程序文件名:javac Hello.java。按回车键开始编译 注意:文件名H 要大写,否则运行会出问题 。如果源程序没有错误,则屏幕上没有输出,键入 “dir”按回车键后可在目录中看到生成了一个同名字的.class 文件“Hello. class”。否则,将显示出错信息。 (4)运行Java 程序 使用Java 解释器(java.exe)可将编译后的字节码文件Hello.class 解释为本地计算机代码。在命令提示符窗口或MS,DOS 窗口键入解释器文件名和要解释的字节码文件名java Hello,按回车键即开始解释并可看到运行结果,如果看到如图1.19 所示结果,表明程序运行成功了 (5)安装、使用Eclipse软件 在Eclipse环境下编辑、编写、运行Java程序。 十、考核或评价标准 能做到以下3点即完成任务: 1. 能正确安装Java平台; 2. 能正确设置环境变量; 3. 能正确编译并运行Java程序。 项目二 Java 基本语法练习 一、项目(实训)名称 Java 基本语法练习 二、项目(实训)学时数 8课时 三、项目(实训)目标 1. 阶段目标 了解 Java 的数据类型,掌握各种变量的声明方式,理解运算符的优先级,掌握 Java 基本数据类型、运算符与表达式,理解 Java 程序语法结构,掌握顺序结构、选择结构和循环结构语法的程序设计方法,通过以上内容,掌握 Java 语言的编程规则。 2. 最终成果形式 掌握 Java 语言的编程规则,能用Java编写简单的程序。 3. 获得的知识 了解各种变量的声明方式、运算符的优先级、Java 基本数据类型、运算符与表达式,理解 Java 程序语法结构,理解顺序结构、选择结构和循环结构语法的程序设计方法。 四、项目(实训)中的具体任务 1. 编写一个声明 Java 不同数据类型变量的程序。 2. 编写一个使用运算符、表达式、变量的程序。 3. 编写一个使用 Java 数组的的程序。 4. 编写表达式语句、复合语句的程序。 5. 编写使用不同选择结构的程序。 6. 编写使用不同循环结构结构的程序。 五、教师知识和能力要求 教师应了解Java语法规则,应能熟练应用Java编写程序 六、学生知识和能力准备 学生应了解二进制的转换方法 七、工具与设备 1. Eclipse软件 2. 教室网络系统 八、辅助教学资料 1. 课堂教学软件 2. 《JAVA语言程序设计》 陈 锐主编,机械工业出版社 九、实施步骤与技术要点 (1)声明不同数据类型的变量 1(编写声明不同数据类型变量的程序文件 KY2_1.java,源代码如下: public class KY2_1 public static void main String args[] byte b 0x55; short s 0x55ff; int i 1000000; long l 0xffffL; char c 'a'; float f 0.23F; double d 0.7E-3; boolean B true; String S "这是字符串类数据类型"; System.out.println "字节型变量 b "+b ; System.out.println "短整型变量 s "+s ; System.out.println " 整型变量 i "+i ; System.out.println "长整型变量 l "+l ; System.out.println "字符型变量 c "+c ; System.out.println "浮点型变量 f "+f ; System.out.println "双精度变量 d "+d ; System.out.println "布尔型变量 B "+B ; System.out.println "字符串类对象 S "+S ; 2( 编译并运行该程序 (2)了解变量的使用范围 1(建立 KY2_2.java 文件,通过本程序了解变量的使用范围,源代码如下。 public class KY2_2 static int i 10; public static void main String args[] int k 10; System.out.println "i "+i ; System.out.println "k "+k ; System.out.println "i "+i ; System.out.println "k "+k ; //编译时将出错,已超出 k 的使用范围 2(编译 KY2_2.java 此时会出现错误提示。因为变量 k 在方法块中声明,在方法块之外它是不 存在的, 所以编译时会出错。 3(修改上面的程序。 4(成功运行该程序。 思考:KY2_2.java 程序说明了什么问题, (3)使用关系运算符和逻辑运算符 1(建立使用关系运算符和逻辑运算符的程序文件,源代码如下。 class KY2_3 public static void main String args[] int a 25, b 20, e 3, f 0; boolean d a b; System.out.println "a 25,b 20,e 3,f 0" ; System.out.println "因为关系表达式 a b 为假,所以其逻辑值为 : "+d ; if e! 0 && a/e 5 System.out.println "因为 e 非 0 且 a/e 为 8 大于 5,所以输出 a/e , "+a/e ; if f! 0 && a/f 5 System.out.println "a/f "+a/f ; else System.out.println "因为 f 值为 0,所以输出 f "+f ; 2(编译并运行该程序,结果如图2-1所示。 图2-1 运行结果 (4)使用表达式语句与复合语句 1(建立包含表达式语句程序,源代码如下。 class KY2_4 public static void main String[] args int k, i 3, j 4; k 20*8/4+i+j*i; System.out.println "表达式(20*8/4+i+j*i),"+k ; 2(建立包含复合语句程序,源代码如下。 class KY2_5 public static void main String args[] int k, i 3, j 4; k i+j; System.out.println "在复合块外的输出 k "+k ; float f; f j+4.5F; i++; System.out.println "在复合块内的输出 f "+f ; System.out.println "在复合块内的输出 k "+k ; System.out.println "在复合块外的输出 i "+i ; 3(编译并运行上述两个源程序 4(将变量 i 在块内定义会怎样,改变其他变量的位置看看会发生什么变化。 思考:指出程序的复合结构以及变量的使用范围。 (5)使用选择语句 1(使用 if...else 语句 (1)程序功能:使用 if...else 语句构造多分支,判断某一年是否为闰年。闰年的条件是符合下面二者之一:能被 4 整除,但不能被 100 整除;能被 4 整除,又能被 100 整除。 (2)编写源程序文件,代码如下: public class KY2_6 public static void main String args[] boolean leap; int year 2005; if year%4 0 && year%100! 0 || year%400 0 // 方法 1 System.out.println year+" 年是闰年" ; else System.out.println year+" 年不是闰年" ; year 2008; // 方法 2 if year%4! 0 leap false; else if year%100! 0 leap true; else if year%400! 0 leap false; else leap true; if leap true System.out.println year+" 年是闰年" ; else System.out.println year+" 年不是闰年" ; year 2050; // 方法 3 if year%4 0 if year%100 0 if year%400 0 leap true; else leap false; else leap false; else leap false; if leap true System.out.println year+" 年是闰年" ; else System.out.println year+" 年不是闰年" ; (3)编译运行程序 思考:本程序中有几个选择语句,哪些具有嵌套关系, 2(使用 switch 语句 (1)程序功能:在不同温度时显示不同的解释说明。 (2)程序源代码如下。 class KY2_7 public static void main String args[] int c 38; switch c 10?1:c 25?2:c 35?3:4 case 1: System.out.println " "+c+"? 有点冷。要多穿衣服。" ; case 2: System.out.println " "+c+"? 正合适。出去玩吧。" ; case 3: System.out.println " "+c+"? 有点热。" ; default: System.out.println " "+c+"? 太热了!开空调。" ; (3)编译运行程序 (6)使用循环语句 1(for 循环语句练习 (1)程序功能:按 5 度的增量打印出一个从摄氏温度到华氏温度的转换表。 (2)程序源代码如下。 class KY2_8 public static void main String args[] int h,c; System.out.println "摄氏温度 华氏温度" ; for c 0; c 40; c+ 5 h c*9/5+32; System.out.println " "+c+" "+h ; 编译并运行程序,其结果如图 2-2 所示。 图2-2 运行结果 2(while 循环语句练习 (1)程序功能:运行程序后从键盘输入数字 1/2/3 后,可显示抽奖得到的 奖品;如果输入其它数字或字符显示“没有奖品给你!”。 (2)程序源代码如下。 import java.io.*; class KY2_9 public static void main String args[] throws IOException char ch; System.out.println "按 1/2/3 数字键可得大奖!" ; System.out.println "按空格键后回车可退出循环操作." ; while ch char System.in.read ! ' ' System.in.skip 2 ; // 跳过回车键 switch ch case '1': System.out.println "恭喜你得大奖,一辆汽车!" ; break; case '2': System.out.println "不错呀,你得到一台笔记本电脑!" ; break; case '3': System.out.println "没有白来,你得到一台冰箱!" ; break; default: System.out.println "真不幸,你没有奖品!下次再来吧。" ; (3)编译源程序。 (4)在命令提示符窗口运行程序,然后分别按 1、2、3、r ,结果。 3(do„while 循环语句练习 (1)程序功能:求 1,2,„+100 之和,并将求和表达式与所求的和显示 出来。 (2)程序源代码如下。 class KY2_10 public static void main String args[] int n 1, sum 0; do sum+ n++; while n 100 ; System.out.println "1+2,...+100 "+sum ; (3)编译并运行程序 4(多重循环练习 (1)输出九九乘法表的程序,源代码如下。 public class KY2_11 public static void main String args[] int i,j,n 9; System.out.print " * |" ; for i 1;i n;i++ System.out.print " "+i ; System.out.print "\n-------|" ; for i 1;i n;i++ System.out.print "----" ; System.out.println ; for i 1;i n;i++ System.out.print " "+i+" |" ; for j 1;j i;j++ System.out.print " "+i*j ; System.out.println ; (2)编译并运行程序 十、考核或评价标准 能做到以下5点即完成任务: 1(编写一个声明 Java 不同数据类型变量的程序; 2(编写一个使用运算符、表达式、变量的程序; 3(编写一个使用 Java 数组的的程序; 4(编写使用不同选择结构的程序; 5(编写使用不同循环结构结构的程序。 项目三 Java语言面向对象基础 一、项目(实训)名称 Java语言面向对象基础 二、项目(实训)学时数 8课时 三、项目(实训)目标 1. 阶段目标 能用Java编写类和对象。 2. 最终成果形式 学生能动手编写程序,设计类的属性及成员方法。 3. 获得的知识 了解Java语言是如何体现面向对象编程基本思想,了解类的封装方法,以及如何创建类和对象,了解成员变量和成员方法的特性,掌握面向对象程序设计的方法,了解类的继承性和多态性的作用,了解接口的作用。 四、项目(实训)中的具体任务 1. 设计类来描述真实客观世界中的事物,使用类的成员变量来表示事物的属性和状态,使用类的成员方法来提供对成员变量的访问或修改。 2. 创建类的对象,使用对象的方法(类的非静态方法)来访问或修改对象的变量(类的非静态变量)。 3. 编写显示当前时间和日期的程序。 4. 使用修饰符来限定类的成员变量或成员方法的属性。 5. 调用方法时参数传递的练习。 6. 类的继承性练习。 7. 类的多态性练。 8. 使用接口技术。 五、教师知识和能力要求 教师应了解Java语法规则,应能熟练应用Java编写程序 六、学生知识和能力准备 学生应了解二进制的转换方法 七、工具与设备 1. Eclipse软件 2. 教室网络系统 八、辅助教学资料 1. 课堂教学软件 2. 《JAVA语言程序设计》 陈 锐主编,机械工业出版社 九、实施步骤与技术要点 1(设计类来描述真实客观世界中的事物,使用类的成员变量来表示事物的 属性和状态,使用类的成员方法来提供对成员变量的访问或修改 (1)程序功能:设计一个用来描述汽车的类,使用类的非静态成员变量来 表示汽车的车主姓名、当前的速率和当前方向盘的转向角度,使用类的非静态成 员方法来表示改变汽车的速率和停车两个操作。 (2)程序源代码如下。 public class EXP3_1 private String ownerName; //车主姓名 private float curSpeed; //当前车速 private float curDirInDegree; //当前方向盘转向角度 public EXP3_1 String ownerName this.ownerName ownerName; public EXP3_1 String ownerName, float speed, float dirInDegree this ownerName ; this.curSpeed speed; this.curDirInDegree dirInDegree; public String getOwnerName //提供对车主姓名的访问 return ownerName; public float getCurDirInDegree //提供对当前方向盘转向角度的访问 return curDirInDegree; public float getCurSpeed //提供对当前车速的访问 return curSpeed; public void changeSpeed float curSpeed //提供改变当前的车速 this.curSpeed curSpeed; public void stop //提供停车 this.curSpeed 0; (3)编译源程序。 2(创建类的对象,使用对象的方法(类的非静态方法)来访问或修改对象 的变量(类的非静态变量) (1)创建类EXP3_1的对象,在调用类的构造函数时指定对象的变量的初始 值,以后再使用对象的方法来访问或修改对象的变量的值。 程序代码如下。 public class EXP3_2 public static void main String[] args EXP3_1 car new EXP3_1 "成龙",200f,25f ; System.out.println "车主姓名: "+car.getOwnerName ; System.out.println "当前车速: "+car.getCurSpeed ; System.out.println "当前转向角度: "+car.getCurDirInDegree ; car.changeSpeed 80 ; System.out.println "在调用changeSpeed 80 后,车速变为: " + car.getCurSpeed ; car.stop ; System.out.println "在调用stop 后, 车速变为: "+car.getCurSpeed ; (2)编译并运行,结果如图3-1所示。 图3-1 EXP3_2.java运行结果 3(编写显示当前时间和日期的程序 (1)程序功能:该程序通过使用一个自定义类Time,实现显示当前日期和时间的功能。 (2)程序代码如下。 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 return hh+" 时"+mm+"分"+ss+"秒"; public class EXP3_3 public static void main String[] args Time t new Time ; System.out.println "当前日期:"+t.getDate ; System.out.println "当前时间:"+t.getTime ; (3)编译并运行,结果如图3-2所示。 图 3.2ublic、private、protected、package、static、final、transient、volatile 不同修饰符的访问控制权限如表3.1 所示。 表 3.1 类 子类 包 所有类和包 public ? ? ? ? private ? protected ? ? ? package ? ? (1)程序功能:通过两个类StaticDemo、EXP3_4 说明静态变量/方法与实例变量/方法的区别。 (2)程序源代码如下。 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 EXP3_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)对上面的源程序进行编译,会出现如图3-3所示的出错提示。 图 33 EXP3_4.java运行结果 (4)将源程序中的出错语句删除或使用解释符//隐藏起来,例如,//System.out.println "实例变量y "+StaticDemo.getY ; (5)重新编译并运行该程序,结果如图3-4所示。 图 34 重新编译运行结果 5(调用方法时参数传递的练习 在其它语言中,函数调用或过程调用时参数有传值调用和传地址调用之分。在Java 中,方法中的参数传递可以分为传值调用或对象方法调用等方式。传值调用即传递的参数是基本数据类型,调用方法时在方法中将不能改变参数的值,这意味着只能使用它们。对象调用是指先调用对象,再调用对象的方法,这种方式可以修改允许存取的成员变量。所以,如果不想改变参数的值,可以采用传值 调用的方法。如果想改变参数的值,可采用对象调用的方法,间接修改参数的值。 5.1(编写一个传值调用的程序 (1)程序功能:程序首先给整型变量x 和y 赋一个初值10,然后使用传值调用方式调用方法ff1对x 和y 做乘方及输出x 和y 的乘方值,最后再输出x 和y 的乘方值。 (2)程序源代码如下。 class EXP3_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 ; (3)编译并运行,结果如图3-5: 图35 EXP3_5.java运行结果 5.2(编写一个调用对象方法的程序 (1)程序功能:通过调用对象的方法在方法调用后修改了成员变量的值。 (2)程序源代码如下: class EXP3_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 Power int 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 ; (3)编译并运行,结果如图3.6。 图 36 EXP3_6.java运行结果 6(类的继承性练习 新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。新类还可添加新的变量和方法。这种现象就称为类的继承。 当建立一个新类时,不必写出全部成员变量和成员方法。只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。被继承的类称为父类或超类(superclass),这个新类称为子类。 Java 提供了一个庞大的类库让开发人员继承和使用。设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。所以,通常要对子类进行扩展,即添加新的属性和方法。这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。继承的意义就在于此。 6(1(创建将被继承的类 (1)程序源代码如下。 public class EXP3_7 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)编译源程序。 6(2(创建将被继承的类 (1)程序功能:通过EXP3_7类产生子类EXP3_8,其不仅具有父类的成员 变量xm(姓名)、xh(学号),还定义了新成员变量xy(学院)、xi(系)。在程 序中调用了父类的print 方法,同时可以看出子类也具有该方法。 (2)程序源代码如下。 class EXP3_8 extends EXP3_7 protected String xy; protected String xi; public static void main String args[] EXP3_7 p1 new EXP3_7 ; p1.setdata "李四",12321 ; p1.print ; EXP3_8 s1 new EXP3_8 ; s1.setdata "张三",12345 ; //调用父类的成员方法 s1.xy "成都信息学院"; //访问本类的成员变量 s1.xi "计算机系"; //访问本类的成员变量 s1.print ; System.out.print s1.xm+", "+s1.xy+", "+s1.xi ; (3)编译并运行,结果如图3-7所示。 图37 EXP3_7.java运行结果 6(3(了解成员方法的覆盖方式 通过继承子类可以继承父类中所有可以被子类访问的成员方法,但如果子类的方法与父类方法同名,则不能继承,此时称子类的方法覆盖了父类的方法,简称为方法覆盖(override)。方法覆盖为子类提供了修改父类成员方法的能力。例如,子类可以修改层层继承下来的Object 根类的toString 方法,让它输出一些更有用的信息。下面的程序显示了在子类Circle 中添加toString 方法,用来返回圆半径和圆面积信息。 (1)编写覆盖Object 类toString方法的程序文件EXP3_9.java,源代码如下。 class Circle private int radius; Circle int r setRadius r ; public void setRadius int r radius r; public int getRadius return radius; public double area return 3.14159*radius*radius; public String toString return "圆半径:"+getRadius +" 圆面积:"+area ; public class EXP3_9 public static void main String args[] Circle c new Circle 10 ; System.out.println "\n"+c.toString ; (2)编译并运行,结果如图3-8所示。 图38 EXP3_9.java运行结果 6(4(this、super和super 的使用 (1)程序功能:程序功能:说明this、super 和super 的用法。程序首先定义Point(点)类,然后创建点的子类Line(线)。最后通过LX3_10 类输出线段的长度。程序中通过super a,b 调用父类Point 的构造方法为父类的x 和y 赋值。在子类Line 的setLine方法中,因为参数名和成员变量名相同,为给成员变量赋值,使用this 引用,告诉编译器是为当前类的成员变量赋值。在length 和toString 方法中使用父类成员变量时,使用super 引用,告诉编译器使用的是父类的成员变量。 (2)程序源代码如下。 class Point protected int x, y; Point int a, int b setPoint a, b ; public void setPoint int a, int b x a; y b; class Line extends Point protected int x, y; Line int a, int b super a, b ; setLine a, b ; public void setLine int x, int y this.x x+x; this.y y+y; public double length int x1 super.x, y1 super.y, x2 this.x, y2 this.y; return Math.sqrt x2-x1 * x2-x1 + y2-y1 * y2-y1 ; public String toString return "直线端点:[" + super.x + "," + super.y + "] [" + x + "," + y + "] 直线长度:" + this.length ; public class EXP3_10 public static void main String args[] Line line new Line 50, 50 ; System.out.println "\n"+line.toString ; (3)编译并运行,结果如图3-9。 图39 EXP3_10.java运行结果 7(类的多态性练习 类的继承发生在多个类之间,而类的多态只发生在同一个类上。在一个类中, 可以定义多个同名的方法,只要确定它们的参数个数和类型不同。这种现象称为 类的多态。多态使程序简洁,为程序员带来很大便利。在OOP 中,当程序要实 现多个相近的功能时,就给相应的方法起一个共同的名字,用不同的参数代表不同的功能。这样,在使用方法时不论传递什么参数,只要能被程序识别就可以得到确定的结果。类的多态性体现在方法的重载(overload)上,包括成员方法和构造方法的重载。 7.1(方法的重载 (1)程序功能:使用同名方法对两个、三个或用数组容纳的一组数进行排序 (2)程序源代码如下。 class IntSort public String sort int a, int b if a b return a+" "+b; else return b+" "+a; public String sort int a, int b, int c int swap; if a b swap a; a b; b swap; if a c swap a; a c; c swap; if b c swap b; b c; c swap; return a+" "+b+" "+c; public String sort int arr[] String s " "; int swap; for int i 0; i arr.length; i++ for int j 0; j arr.length-1; j++ if arr[j] arr[j+1] swap arr[j]; arr[j] arr[j+1]; arr[j+1] swap; for int i 0; i arr.length; i++ s s+arr[i]+" "; return s; public class EXP3_11 public static void main String[] args IntSort s new IntSort ; int a 30, b 12, c 40; int arr[] 34,8,12,67,44,98,52,23,16,16 ; System.out.println "两个数的排序结果:"+s.sort a,b ; System.out.println "三个数的排序结果:"+s.sort a,b,c ; System.out.println "数组的排序结果:"+s.sort arr ; (3)编译并运行,结果如图3-10所示。 图310 EXP3_11.java运行结果 7.2(构造函数的重载 构造方法的名称和类同名,没有返回类型。尽管构造方法看起来和一般的成员方法没有差别,但它不是方法,也不是类的成员。因此,构造方法不能直接调用,只能由new 操作符调用。构造方法对于类是十分重要的,对象的初始化任务要靠构造方法来完成。重载构造方法的目的是提供多种初始化对象的能力,使程序员可以根据实际需要选用合适的构造方法来初始化对象。 (1)程序源代码如下。 class RunDemo private String userName, password; RunDemo 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; else s "用户名不能为空~"; if password! "12345678" s s+" 口令无效~"; else s s+" 口令:********"; System.out.println s ; public class EXP3_12 public static void main String[] args new RunDemo ; new RunDemo "张三" ; new RunDemo null,"李四" ; new RunDemo "王五","12345678" ; (2)编译并运行,结果如图3-11所示。 图311 EXP3_12.java运行结果 8(使用接口技术 (1)程序功能:在程序中声明一个自定义接口NL,用来计算一个人年龄。 程序源代码如下。 interface NL //定义接口 int year 2004; int age ; void output ; public class EXP3_13 implements NL //实现接口 String xm; //类自己的成员变量(姓名) int csrq; //类自己的成员变量(出生日期) public EXP3_13 String n1,int y //类构造方法 xm n1; csrq y; public int age //实现接口的方法 return year - csrq; //这里直接使用了接口中的常量year public void output //实现接口的方法 System.out.println this.xm +"今年的年龄是"+ this.age +"岁" ; public static void main String args[] //类自己的成员方法 NL a new EXP3_13 "张三",1990 ; a.output ; (2)编译并运行,结果如图3-12。 图312 EXP3_13.java运行结果 十、考核或评价标准 能做到以下2点即完成任务: 1. 能编写复杂程序; 2. 能编写接口程序。 项目四 包、接口与异常处理 一、项目(实训)名称 包、接口与异常处理 二、项目(实训)学时数 8课时 三、项目(实训)目标 1. 阶段目标 了解 Java 中包(package)、接口(interface)和异常处理(exception) 的作用,掌握包、接口、 异常处理的设计方法。 2. 最终成果形式 学生通过学习,能设计包、接口,正确处理异常情况。 3. 获得的知识 了解 Java 系统包的结构,掌握创建自定义包的方法,掌握使用系统接口的 技术和创建自定义接口的方法,理解系统异常处理的机制和创建自定义异常的方 法。 四、项目(实训)中的具体任务 1. 使用 Java 的系统包 2. 创建并使用自定义包 3. 使用接口技术 4. 了解异常处理机制 五、教师知识和能力要求 教师应了解Java语法规则,应能熟练应用Java编写程序 六、学生知识和能力准备 学生应了解二进制的转换方法 七、工具与设备 1. Eclipse软件 2. 教室网络系统 八、辅助教学资料 1. 课堂教学软件 2. 《JAVA语言程序设计》 陈 锐主编,机械工业出版社 九、实施步骤与技术要点 (1)使用 Java 的系统包 包是类和接口的集合。利用包可以把常用的类或功能相似的类放在一个包中。Java 语言提供系统 包,其中包含了大量的类,可以在编写 Java 程序时直接引用它们。为便于管理和使用它们,将这些类 分为了不同的包。包又称类库或 API 包,所谓 API(Application Program Interface)即应用程序接口。API 包―方面提供丰富的类与方法供大家使用,如画图形、播放声音等,另一方面又负责和系统 软硬件打交道,圆满实现用户程序的功能。所有 Java API 包都以“java.”开头,以区别用户创建的包。 接口解决了 Java 不支持多重继承的问题,可以通过实现多个接口达到与多重继承相同的功能。 处理程序运行时的错误和设计程序同样重要,只有能够完善处理运行时出错的程序,软件系统才 能长期稳定地运行,异常处理就是说明如何处理程序运行时出错的问题。 (2)创建并使用自定义包 1(自定义包的声明方式 声明包语句必须添加在源程序的第一行,表示该程序文件声明的全部类都属于这个包。 2(创建自定义包 Mypackage 在存放源程序的文件夹中建立一个子文件夹 Mypackage。例如,在“d:\java”文件夹之中创建一个与包同名的子文件夹 Mypackage(d:\java\ Mypackage),并将编译过的 class 文件放入该文件夹中。注意:包名与文件夹名大小写要一致。再添加环境变量 classpath 的路径,例如:C:\j2sdk1.4.2_01\lib;d:\java 3(在包中创建类 (1)YMD.java 程序功能:在源程序中,首先声明使用的包名 Mypackage,然后创建 YMD 类,该类 具有计算今年的年份,可以输出一个带有年月日的字符串的功能。 (2)编写 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 12 ? m : 1 ; day d 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;//返回转化为字符串的年-月-日 (3)编译 KY4_1_YMD.java 文件,然后将 KY4_1_YMD.class 文件存放到 Mypackage 文件夹中。 4(编写使用包 Mypackage 中 KY4_1_YMD 类的程序 (1)KY4_2.java 程序功能:给定某人姓名与出生日期,计算该人年龄,并 输出该人姓名,年龄,出生日期。程序使用了 KY4_1_YMD 的方法来计算年龄。 (2)编写 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 ; (3)编译并运行程序。 (3)使用接口技术 实现 MouseListener 和 MouseMotionListener 两个接口 (1)编写实现接口的程序文件 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 (2)编译 KY4_3.java 文件。 编写 KY4_3.6>html 文件,源代码如下。 applet codebase d:/java/ code KY4_3.class width 320 height 180 (3)在浏览器中打开 KY4_3.html 文件,在窗口中拖动鼠标可以随意画出 一条线,如图4-1所示: 图4-1 KY4_3.html运行结果 (4)了解异常处理机制 (1)编写使用 try„catch 语句处理异常的程序文件 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 语句被执行" ; (2)编译并运行程序 注意:如果在 catch 语句中声明的异常类是 Exception,catch 语句也能正确地捕获,这是因为Exception是ArithmeticException的父类。如果不能确定会发生哪种情况的异常,那么最好指定catch 的参数为 Exception,即说明异常的类型为 Exception。 (3)编写包含多个 catch 子句的 KY4_8.java 程序,源代码如下。 public class KY4_5 public static void main String[] args try int a args.length; System.out.println "\na "+a ; int b 42/a; int c[] 1 ; c[42] 99; catch ArithmeticException e System.out.println "发生了被 0
/
本文档为【《Java程序设计》实训指导书】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索