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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 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();
    }
  }
}


目录
相关文章
|
1月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
65 1
|
1月前
|
Java API 调度
如何避免 Java 中的 TimeoutException 异常
在Java中,`TimeoutException`通常发生在执行操作超过预设时间时。要避免此异常,可以优化代码逻辑,减少不必要的等待;合理设置超时时间,确保其足够完成正常操作;使用异步处理或线程池管理任务,提高程序响应性。
70 12
|
1月前
|
Java
在 Java 中,如何自定义`NumberFormatException`异常
在Java中,自定义`NumberFormatException`异常可以通过继承`IllegalArgumentException`类并重写其构造方法来实现。自定义异常类可以添加额外的错误信息或行为,以便更精确地处理特定的数字格式转换错误。
38 1
|
1月前
|
IDE 前端开发 Java
怎样避免 Java 中的 NoSuchFieldError 异常
在Java中避免NoSuchFieldError异常的关键在于确保类路径下没有不同版本的类文件冲突,避免反射时使用不存在的字段,以及确保所有依赖库版本兼容。编译和运行时使用的类版本应保持一致。
72 7
|
1月前
|
Java 编译器
如何避免在 Java 中出现 NoSuchElementException 异常
在Java中,`NoSuchElementException`通常发生在使用迭代器、枚举或流等遍历集合时,尝试访问不存在的元素。为了避免该异常,可以在访问前检查是否有下一个元素(如使用`hasNext()`方法),或者使用`Optional`类处理可能为空的情况。正确管理集合边界和条件判断是关键。
80 6
|
1月前
|
Java
Java异常捕捉处理和错误处理
Java异常捕捉处理和错误处理
66 1
|
1月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
71 2
|
1月前
|
Java
如何在 Java 中处理“Broken Pipe”异常
在Java中处理“Broken Pipe”异常,通常发生在网络通信中,如Socket编程时。该异常表示写入操作的另一端已关闭连接。解决方法包括:检查网络连接、设置超时、使用try-catch捕获异常并进行重试或关闭资源。
116 5
|
1月前
|
存储 安全 Java
如何避免 Java 中的“ArrayStoreException”异常
在Java中,ArrayStoreException异常通常发生在尝试将不兼容的对象存储到泛型数组中时。为了避免这种异常,确保在操作数组时遵循以下几点:1. 使用泛型确保类型安全;2. 避免生类型(raw types)的使用;3. 在添加元素前进行类型检查。通过这些方法,可以有效防止 ArrayStoreException 的发生。
44 3
|
2月前
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
45 2