java程序设计与j2ee中间件技术/软件开发技术(I)-实验三-接口、开闭原则和异常

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: java程序设计与j2ee中间件技术/软件开发技术(I)-实验三-接口、开闭原则和异常

题目1

1 题目说明

按要求编写一个Java应用程序程序:

(1)定义一个接口CanFly,描述会飞的方法public void fly();

(2)分别定义类飞机和鸟,实现CanFly接口。

(3)定义一个测试类,测试飞机和鸟,在main方法中创建飞机对象和鸟对象

2 实验设计

3 运行界面截图与说明

题目1运行结果:正确地创建了鸟和飞机对象,鸟对象调用fly()方法输出了“我是鸟!”,飞机对象调用fly()方法输出了“我是飞机!”

4 代码

Bird.java

public class Bird implements CanFly{
  public void fly() {
    System.out.println("我是鸟!");
  }
}

CanFly.java

public interface CanFly {
  public void fly();
}

Main.java

public class Main {
  public static void main(String[] args) {
    Bird bird=new Bird();
    Plane plane=new Plane();
    bird.fly();
    plane.fly();
  }
}

Plane.java

public class Plane implements CanFly{
  public void fly() {
    System.out.println("我是飞机!");
  }
  public Plane() {
  }
}

题目2

1 题目说明

面向接口编程

利用面对接口的编程实现动态的创建对象,符合开-闭原则,也就是增加了新的需求,核心类不变

创建接口:水果树

创建类:苹果树、橘子树、园丁

在主类中,根据输入的水果类型,输出不同的结果,体现多态。例如输入“苹果”,创建苹果树对象,输出“种了一棵苹果树”。

2 实验设计

题目2工程结构:FruitTree是一个接口,有getTreeName()方法获取当前水果树的名字。AppleTree类苹果树,有空构造函数,且实现了getTreeName()方法。OrangeTree类指飞机,也同样有构造函数,另外实现了getTreeName()方法。Gardener类是园丁,能调用PlantTree(FruitTree)种树,用到了接口回调和多态的技术。Main类有main函数进行测试,创建园丁,并让园丁种树。

3 运行界面截图与说明

输入“苹果树”,园丁正确地种了一棵苹果树。输入“橘子树”,园丁也能正确地种一棵橘子树。

4 代码

AppleTree.java

public class AppleTree implements FruitTree{
  public AppleTree() {
  }
  public String getTreeName() {
    return "苹果树";
  }
}

FruitTree.java

public interface FruitTree {
  public String getTreeName();
}

Gardener.java

public class Gardener {
  public void PlantTree(FruitTree tree) {
    System.out.println("种了一棵"+tree.getTreeName());
  }
};

Main.java

import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Gardener gardener=new Gardener();
    System.out.println("请输入水果树类型");
    Scanner sc=new Scanner(System.in);
    String TreeName=sc.next();
    sc.close();
  //  System.out.println(TreeName);
    FruitTree fruittree;
    if (TreeName.equals(new String("苹果树"))) {
      fruittree=new AppleTree();
      gardener.PlantTree(fruittree);
    }
    if (TreeName.equals(new String("橘子树"))) {
    //else {
      fruittree=new OrangeTree();
      gardener.PlantTree(fruittree);
    }
  }
}

OrangeTree.java

public class OrangeTree implements FruitTree{
  public OrangeTree() {
  }
  public String getTreeName() {
    return "橘子树";
  }
}

题目3

1 题目说明

编写一个异常类,用于捕获类的异常。编写一个类,用于录入成绩数据,如果成绩不是0-100的整数,抛出一个异常。

2 实验设计

题目3工程结构:

ScoreException是异常类,这个异常类被抛出是因为用户输入的数字不是整数或者范围超出了0~100。

ScoreScanner是用于录入成绩的类,其ScanScore()方法会抛出异常ScoreException。

Main类包含main函数,用于测试。

3 运行界面截图与说明

题目3运行结果:根据提示,输入成绩。如果输入0~100范围内的数,则提示输入正确,程序正确地运行结束。

如果输入的不是整数,则抛出异常。该异常被catch住处理后,程序同样运行结束,并打印异常原因。

同样的,如果输入的数超出范围,则也会抛出异常。该异常被catch住处理后,程序同样运行结束,并打印异常原因。可以看出,输入的数超出范围的异常和输入不是整数的异常并不都是由同一行代码抛出。

4 代码

Main.java

public class Main {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    ScoreScanner scorescanner=new ScoreScanner();
    try {
      System.out.println("请输入成绩:");
      scorescanner.ScanScore();
      System.out.println("输入正确");
    }
    catch(ScoreException e) {
      System.out.println("输入错误!输入的可能不是整数,也可能超出范围!");
      e.printStackTrace();
    }
    finally {
      System.out.println("程序运行结束!");
    }
  }
}

ScoreException.java

@SuppressWarnings("serial")
public class ScoreException extends Exception{
  public ScoreException() {
  }
}

ScoreScanner.java

import java.util.Scanner;
public class ScoreScanner {
  public void ScanScore() throws ScoreException {
    Scanner sc=new Scanner(System.in);
    if (sc.hasNextInt()){
      int num=sc.nextInt();
      sc.close();
      if (num<0||num>100)
        throw new ScoreException();
    }
    else {
      sc.close();
      throw new ScoreException();
    }
  }
}


目录
相关文章
|
3天前
|
Java 索引
【JAVA基础篇教学】第七篇:Java异常类型说明
【JAVA基础篇教学】第七篇:Java异常类型说明
|
2天前
|
前端开发 Java 应用服务中间件
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
|
3天前
|
Java 关系型数据库 MySQL
【JAVA进阶篇教学】第八篇:Java链接MySql数据库异常
【JAVA进阶篇教学】第八篇:Java链接MySql数据库异常
|
5天前
|
存储 Java 开发者
探索Java开发中触发空指针异常的场景
作为一名后端开发者在Java编程的世界中,想必大家对空指针并不陌生,空指针异常是一种常见而又令人头疼的问题,它可能会在我们最不经意的时候突然出现,给我们的代码带来困扰,甚至导致系统的不稳定性,而且最可怕的是有时候不能及时定位到它的具体位置。针对这个问题,我们需要深入了解触发空指针异常的代码场景,并寻找有效的方法来识别和处理这些异常情况,而且我觉得空指针异常是每个Java开发者都可能面临的挑战,但只要我们深入了解它的触发场景,并采取适当的预防和处理措施,我们就能够更好地应对这个问题。那么本文就来分享一下实际开发中一些常见的触发空指针异常的代码场景,并分享如何有效地识别和处理这些异常情况。
20 1
探索Java开发中触发空指针异常的场景
|
7天前
|
SQL 网络协议 Java
Java异常详解
Java异常详解
8 1
|
16天前
|
Java 程序员 编译器
|
17天前
Swagger2异常:java.lang.NumberFormatException: For input string: ““
Swagger2异常:java.lang.NumberFormatException: For input string: ““
20 1
|
6月前
|
测试技术 数据库 Android开发
0008Java安卓程序设计-ssm基于Android平台的健康管理系统
0008Java安卓程序设计-ssm基于Android平台的健康管理系统
28 0
|
6月前
|
SQL 关系型数据库 MySQL
0019Java程序设计-SSM + MySQL 家庭医生预约平台
0019Java程序设计-SSM + MySQL 家庭医生预约平台
118 0
|
8月前
|
Java 测试技术 项目管理
0011Java程序设计+jspm大学生创新创业项目管理平台
0011Java程序设计+jspm大学生创新创业项目管理平台
86 0