实验五 抽象类和接口
(一)教学要求
掌握声明抽象类和最终类的方法,掌握声明接口、一个类实现多个接口的声明和使用方法。
(二)知识点提示
抽象类的声明和使用,接口的声明和使用。
(三)教学内容
1、将实验四中形状类Shape的getArea()改为抽象方法,在不修改四中形状子类和测试类TestShape的基础上,保证执行TestShape能够得到与实验四同样的结果。
2、将实验四中形状类Shape改为接口,在不修改测试类TestShape的基础上,保证执行TestShape能够得到与实验四同样的结果。
3、将附件1添加到工程,调试后保证源程序能编译成功,画出附件1中多个类间的关系图,按以下步骤调试程序。注,以下5步没有先后关系。
(1)将AbsClass类前面abstract删掉,编译会出现什么结果,为什么?
(2)将AbsClass类中的abstract void absMethod();改为abstract void absMethod(){},编译会出现什么结果,为什么?
(3)删除AbsClass类中的absMethod()方法,AbsClass类可否通过编译? (4)将AbsSubClass类前面abstract删掉,编译会出现什么结果,为什么?
(5)将SubClass中的absMethod方法改名为absMethod2,编译会出现什么结果,为什么?
4、在TestAbsctract的main方法中添加“ SubClass sc=new SubClass(); AbsClass ac=new AbsClass(); ”,编译会出现什么结果,为什么?
5、在TestAbsctract的main方法中添加“ SubClass sc=new SubClass(); AbsClass ac;
”,编译会出现什么结果,为什么?
6、在TestAbsctract的main方法中添加“ SubClass sc=new SubClass(); AbsClass ac=new SubClass(); AbsClass ac2=sc; sc.absMethod(); ac.absMethod(); ac2.absMethod();
”,可否通过编译,为什么? (四)思考题
1. 说明接口和抽象类的区别。
附录1 TestAbsctract.java
abstract class AbsClass{ abstract void absMethod(); void commMethod(){ System.out.println(\ } }
abstract class AbsSubClass extends AbsClass{ void commMethod3(){ System.out.println(\ } }
class SubClass extends AbsClass{ void absMethod(){ System.out.println(\ } }
public class TestAbsctract { public static void main(String [] rgs){ } }
实验六 Java异常处理和流
(一)教学要求
掌握Java异常处理的基本方法,掌握Java的标准输入输出方法。 (二)知识点提示
Java异常处理的基本方法,Java的标准输入输出方法
(三)教学内容 1、Java异常
(1)比较附录1、附录2、附录3中的程序有何异常,分析运行的结果有何不同,再编译运行它们验证你的想法。
(2)将附录5中main函数后面的“throws Exception”去掉再编译会怎么样,为什么? (3)在实验三中曾经实现过日期类MyDate,它包含一个含参数的构造方法MyDate(int year, int month, int day)、以及三个相应的设置方法setXXX(int arg)。
① 现编写一个自定义的异常InvalidDateException。当构造方法或设置方法接受的参数不符合实际要求时,抛出一个这个异常的实例。
② 在main函数中分别包含以下代码,捕获并打印异常信息 ③ MyDate d1=new MyDate(-1, 13, 32); ④ MyDate d2=new MyDate(); d2.setDay(100); 2、流
(1)编译运行附件4、附件5、附件6,分析其功能,掌握File类和文本流的常用方法。 (2)补充附录7,实现一个文件复制类FileTools,它包含一个静态方法copyFile(String sourceFileName,String objectFileName),功能是将名为sourceFileName的源文件复制到目的文件objectFileName中。
(3)编写一个类FileTest,它有write和read两个方法。其中,方法write负责从键盘接受5名学生的姓名,并将其存储在硬盘文件name.txt上;方法read负责从name.txt中读取5名学生的姓名。
(4)选做:为FileTest类增加writeGrade和readGrade两个方法。其中,方法writeGrade负责从键盘接受5名学生的考试成绩,并将其存储在硬盘文件stu.dat上;方法readGrade负责从stu. dat中读取5名学生的考试成绩并求和。
(四)思考题
1. Java为什么要采用异常处理机制?异常处理的目的是什么?Java的异常处理是怎样实现的?异常处理机制能够解决程序中遇到的所有错误吗?哪些错误不是异常处理能够解决的?
2. 什么是流?流有什么作用?面向对象语言为什么需要使用流?哪些场合需要使用流?
附录1 NonException.java
package p7;
public class NonException { public static void main(String[] args) { String s=null; System.out.println(\ System.out.println(s.length()); System.out.println(\ System.out.println(\ } }
附录2 CatchException.java
package p7;
public class CatchException{ public static void main(String[] args) { String s=null; System.out.println(\ try{ System.out.println(s.length()); System.out.println(\ }catch(Exception e){ System.out.println(e.getMessage()); } System.out.println(\ } }
附录3 ThrowCatchException.java
package p7;
class ThrowCatchException{ public static void main(String[] args)throws Exception{ String s=null; System.out.println(\ try{ System.out.println(s.length()); System.out.println(\ }catch(Exception e){ throw new Exception(\ } System.out.println(\ } }
附录4 FileExample.java
package p8;
import java.io.*; import java.util.*;
public class FileExample { public static void main(String[] args) { System.out.println(\请输入想创建的文件名:\ String fileName=new Scanner(System.in).nextLine(); File f1=new File(fileName); if(f1.exists()){ if(f1.isFile()){ System.out.println(\文件名:\ System.out.println(\绝对路径:\ System.out.println(\文件大小:\字节\ }else{ String[] s=f1.list(); System.out.println(\文件夹\共有\对象\ for(int i=0;i 附录5 WriteFile.java package p8; import java.io.FileWriter; import java.io.BufferedWriter; import java.io.IOException; public class WriteFile { public static void main(String[] args) { try { /**创建一个FileWriter 对象*/ FileWriter fw = new FileWriter(\ /**创建一个BufferedWriter 对象*/ BufferedWriter bw = new BufferedWriter(fw); bw.write(\ bw.write(\