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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
性能测试 PTS,5000VUM额度
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 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();
    }
  }
}


目录
打赏
0
10
11
27
53
分享
相关文章
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
86 14
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
87 5
利用Java获取京东SKU接口指南
本文介绍如何使用Java通过京东API获取商品SKU信息。首先,需注册京东开放平台账号并创建应用以获取AppKey和AppSecret。接着,查阅API文档了解调用方法。明确商品ID后,构建请求参数并通过HTTP客户端发送请求。最后,解析返回的JSON数据提取SKU信息。注意遵守API调用频率限制及数据保护法规。此方法适用于电商平台及其他数据获取场景。
|
3月前
|
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
66 6
|
4月前
|
Java中内置的函数式接口
Java中内置的函数式接口
55 2
|
4月前
|
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
337 60
【Docker项目实战】Docker部署RabbitMQ消息中间件
【10月更文挑战第8天】Docker部署RabbitMQ消息中间件
185 1
【Docker项目实战】Docker部署RabbitMQ消息中间件
消息中间件RabbitMQ---SpringBoot整合RabbitMQ【三】
这篇文章是关于如何在SpringBoot应用中整合RabbitMQ的消息中间件。内容包括了在SpringBoot项目中添加RabbitMQ的依赖、配置文件设置、启动类注解,以及如何通过单元测试来创建交换器、队列、绑定,并发送和接收消息。文章还介绍了如何配置消息转换器以支持对象的序列化和反序列化,以及如何使用注解`@RabbitListener`来接收消息。
消息中间件RabbitMQ---SpringBoot整合RabbitMQ【三】
消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】
这篇文章提供了RabbitMQ的安装和基本使用教程,包括如何使用Docker拉取RabbitMQ镜像、创建容器、通过浏览器访问管理界面,以及如何创建交换机、队列、绑定和使用direct、fanout和topic三种类型的交换器进行消息发布和接收的测试。
消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】
消息中间件RabbitMQ---概述和概念 【一】
该文章提供了对消息中间件RabbitMQ的全面概述,包括其核心概念、工作原理以及与AMQP和JMS的关系。
消息中间件RabbitMQ---概述和概念 【一】