实验名称:实验5:Java 中的接口、匿名类和异常
一、实验目的
熟悉Java 中的接口、匿名类和异常。
二、实验内容与结果
(说明:按实验任务分别填写任务描述、1.处理思路及2.关键技术说明、3.程序源码和4.运行结果截图,不要心得与体会。)
任务1:编写应用程序,从命令行输入两个整数参数,求它们的商。要求程序中捕获NumberformatException异常和ArithmeticException异常。
1.处理思路
如题,并用Scanner法输入String型数据后在try中用integer.parseint()转换进而捕获NumberformatException异常
2.关键技术说明
1.try{包含可能发生异常的语句}
Catch(){}
Catch(){}
…
2.integer.parseint()是将整型数据Integer转换为基本数据类型int。
可以将命令行输入的数据进行int转换,从而可以用NumberFormatException进行检错。
也可以使用InputMismatchException异常(需引入对应包import java.util.InputMismatchException;),直接适用于命令行输入数据(输入不匹配异常,即输入的值数据类型与设置的值数据类型不能匹配)。
可是题目要求使用NumberformatException,所以放弃使用。
3.程序源码
package r1;
import java.util.Scanner;
public class task1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int z=0;
System.out.println("请依次输入整数形式被除数和除数");
String str1 = sc.next();
String str2 = sc.next();//输入两个参数
try {
int x= Integer.parseInt(str1);
int y= Integer.parseInt(str2);//integer.parseint()是将整型数据Integer转换为基本数据类型int
z = x / y;//相除
}
catch (NumberFormatException e) {
System.out.println("输入格式发生异常");
e.printStackTrace();
}
catch (ArithmeticException e) {
System.out.println("除以为零的数发生异常");
e.printStackTrace();
}
System.out.println("两数相除结果为:"+z);
}
}
4.运行结果截图
任务2:设计一个训练场,这个训练场专门训练海豚,使它们能够跳舞dance()和发出“呼呼”的声音cry(),要求用内部类实现。
1.处理思路
如题,设计构造方法输入参数,并用内部类实现dance、cry方法,进行打印
2.关键技术说明
内部类声明可以用static修饰,这样程序就可以在其它类用static内部类来创建对象了
且注意无法从 static 上下文引用非 static 字段 'Groundsname'
3.程序源码
package r1;
public class TrainingGrounds {
static String Groundsname;
TrainingGrounds(String groundsname){
//dolphin=new Dolphin();
Groundsname=groundsname;
}
static class Dolphin{//static内部类声明
String Dolphinname;
Dolphin(String dolphinname){
Dolphinname=dolphinname;
}
public String dance(){
return "跳舞";
}
public String cry(){
return "呼呼";
}
public void showDolphin(){
System.out.println("我是海豚"+Dolphinname+","+"会"+dance()+"、"+cry()+","+"生活在"+Groundsname);
}
}
}
package r1;
public class task2 {
public static void main(String[] args) {
TrainingGrounds ground=new TrainingGrounds("开心豚馆");
TrainingGrounds.Dolphin douplin1 =new TrainingGrounds.Dolphin("开开");
TrainingGrounds.Dolphin douplin2 =new TrainingGrounds.Dolphin("心心");
douplin1.showDolphin();
douplin2.showDolphin();
}
}
4.运行结果截图
任务3:创建一个名称为Vehicle的接口,在接口中添加两个带有一个参数的方法start()和stop()。在两个名称分别为Bike和Bus的类中实现Vehicle接口。创建一个名称为interfaceDemo的类,在interfaceDemo的main()方法中创建Bike和Bus对象 并访问start()和stop()方法。
1.处理思路
如题,参数为string型
2.关键技术说明
Interface接口
Implements实现(重写接口中方法时记得要加public)
3.程序源码
package r2;
public interface Vehicle {
String start(String s);
String stop(String s);
}
class Bike implements Vehicle{
public String start(String s) {
return s+"牌自行车起飞";
}
public String stop(String s) {
return s+"牌自行车降落";
}
}
class Bus implements Vehicle{
public String start(String s) {
return s+"牌公交车起飞";
}
public String stop(String s) {
return s+"牌公交车降落";
}
}
package r2;
public class interfaceDemo {
public static void main(String[] args){
Bike a=new Bike();
Bus b=new Bus();
System.out.println(a.start("贝慧"));
System.out.println(a.stop("贝慧"));
System.out.println(b.start("贝佳"));
System.out.println(b.stop("贝佳"));
}
}
4.运行结果截图
任务4:假设Computable是一个接口,该接口含有一个compute()方法,编写一个用于计算的应用程序,该程序有一个方法ToCompute(Computable c)方法,可以计算加法和乘法,要求用匿名类实现。
1.处理思路
如题,以及程序说明
2.关键技术说明
匿名类直接参数里新建接口对象并进行方法实现
3.程序源码
package r3;
public class test {
public static void main(String[] args) {
//新建含Computable接口参数work方法类Computablec
Computablec exp = new Computablec();
//调用类里含Computable接口参数方法work
exp.work(new Computable() {//直接在里面将新建Computable接口对象并进行实现接口中compute方法
@Override
public void compute(double a, double b) {
double c, d;
c = a + b;
d = a * b;
System.out.println("两个实数和为" + c + ",积为" + d);
}
});
}
}
package r3;
import java.util.Scanner;
//接口
public interface Computable {
public void compute(double a,double b);
}
//含接口参数方法类
class Computablec{
public void work(Computable exp){
Scanner sc=new Scanner(System.in);
System.out.println("请输入两个实数");
double a=sc.nextDouble();
double b=sc.nextDouble();
exp.compute(a,b);
}
}
4.运行结果截图