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

简介: 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();
    }
  }
}


目录
相关文章
|
消息中间件 缓存 前端开发
从资损百万到零事故:Java 接口幂等设计的艺术与实践
在分布式系统中,重复请求常引发严重资损,如支付双扣、库存超卖等问题,其根源在于接口缺乏幂等性设计。本文通过真实案例揭示幂等性的重要性,并详解8种主流解决方案,涵盖唯一请求ID、乐观锁、悲观锁、状态机等,帮助开发者构建稳定系统,保障业务一致性。无论你是架构师还是开发工程师,都能从中获得实战指导,有效规避重复调用带来的风险。
1436 2
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
330 11
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
446 1
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
1549 23
|
安全 Java 开发者
Java集合框架:详解Deque接口的栈操作方法全集
理解和掌握这些方法对于实现像浏览器后退功能这样的栈操作来说至关重要,它们能够帮助开发者编写既高效又稳定的应用程序。此外,在多线程环境中想保证线程安全,可以考虑使用ConcurrentLinkedDeque,它是Deque的线程安全版本,尽管它并未直接实现栈操作的方法,但是Deque的接口方法可以相对应地使用。
633 12
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。
1421 0
|
安全 Java API
Java 抽象类与接口在 Java17 + 开发中的现代应用实践解析
《Java抽象类与接口核心技术解析》 摘要:本文全面剖析Java抽象类与接口的核心概念与技术差异。抽象类通过模板设计实现代码复用,支持具体方法与状态管理;接口则定义行为规范,实现多态支持。文章详细对比了两者在实例化、方法实现、继承机制等方面的区别,并提供了模板方法模式(抽象类)和策略模式(接口)的典型应用示例。特别指出Java8+新特性为接口带来的灵活性提升,包括默认方法和静态方法。最后给出最佳实践建议:优先使用接口定义行为规范,通过抽象类实现代码复用,合理组合两者构建灵活架构。
549 2
|
Java API 网络架构
java调用api接口自动判断节假日信息
java调用api接口自动判断节假日信息
4091 0

热门文章

最新文章