利用Java异常机制实现模拟借书系统

本文介绍的是利用java语言实现一个控制台版的模拟借书系统,在开始本文的正式内容之前,我们先来了解一下Java异常机制。

什么是异常?

异常,不正常也。Exception是Exception event的缩写,因此异常是一个事件,该事件发生在程序运行时。

异常会影响程序的连续性,使程序中断。在Java中,一切皆对象,所以要定义异常,也需要使用对象。异常对象里

封装了异常类型程序发生异常时的状态

  我们经常说的抛出异常就是创建异常对象,并提交给运行系统。

异常捕获机制与try-catch

  当异常发生时,我们需要知道异常在哪里发生的,那么怎么定位异常的出处呢?

  在Java中,使用call stack来记录方法调用顺序。当Java程序发生异常时,会搜索call stack,希望找到特定

的代码块来处理它。就像生病(Exception)了,我们会去医院找特定科目的医生就诊。以下图为例,main方法

调用method0,同理method0调用method1,等等。

在Java中异常处理,使用try-catch语句。语法为:

try {

  // 可能出现异常的代码

} catch (ExceptionType name) {

  // 异常处理代码

} catch (ExceptionType name) {

  // 异常处理代码

} 

好了,下面开始我们的正文。

实现目标

用java语言实现一个控制台版的模拟借书系统,旨在练习java异常机制。

实现要求

实现成品

参考代码及注释

package com.jinger;
import java.util.Scanner;//导入Scanner包
public class BookManagerEasy {
 private static Scanner console = new Scanner(System.in);//接收系统输入
 public static void main(String[] args) {
 //定义”图书“数组
 String[] books = { "C语言", "数据结构", "汇编语言", "高数", "大学语文", "毛概" };
 while (true) {
 System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书");
 String book;
 try {
 //取得整型命令
 int command = inputCommand();
 //根据不同命令值,进行不同操作
 switch (command) {
 case 1://按照图书名称选择图书
 book = getBookByName(books);
 System.out.println("book:" + book);
 break;
 case 2://按照图书序号(数组下标)选择图书
 book = getBookByNumber(books);
 System.out.println("book:" + book);
 break;
 case -1://返回值为-1,说明输入有误
 System.out.println("命令输入错误!请根据提示输入数字命令!");
 continue;
 default://其他值的命令均认为是错误命令
 System.out.println("命令输入错误!");
 continue;
 }
 break;//退出程序
 } catch (Exception bne) {
 //捕获“图书不存在异常”时,要求重新输入命令
 System.out.println(bne.getMessage());
 continue;
 }
 }
 }
 //按照图书名称查询图书
 private static String getBookByName(String[] books)
 throws Exception {
 System.out.println("输入图书名称:");
 //获取输入的图书名称
 String name = console.next();
 for (int i = 0; i < books.length; i++) {
 if (name.equals(books[i]))
 //输入的名称与某一图书名称匹配,返回该图书
 return books[i];
 }
 //若无匹配,抛出”图书不存在异常“
 throw new Exception("图书不存在!");
 }
 //根据图书序号(数组下标)查询图书
 private static String getBookByNumber(String[] books)
 throws Exception {
 while (true) {
 System.out.println("输入图书序号:");
 try {
 //获取输入的图书序号(数组下标)
 int index = inputCommand();
 //若返回值为-1
 if(index == -1){
 System.out.println("命令输入错误!请根据提示输入数字命令!");
 continue;
 }
 //若不出现“数组下标越界异常”,则返回相应位置的图书
 String book = books[index];
 return book;
 } catch (ArrayIndexOutOfBoundsException e) {
 //输入的序号不存在(引发“数组下标越界异常”),则抛出“图书不存在异常”
 Exception bookNotExists = new Exception("图书不存在!");
 bookNotExists.initCause(e);
 throw bookNotExists;
 }
 }
 }
 //从控制台输入命令,用于输入命令和输入图书序号
 private static int inputCommand(){
 int command;
 try {
 command = console.nextInt();
 return command;
 } catch (Exception e) {
 //若输入字符型或者字符串,则抛出异常,捕获该异常,抛出“错误命令异常”
 console = new Scanner(System.in);
 //返回-1
 return -1;
 }
 }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • java.net.MalformedURLException异常的解决方法

    java.net.MalformedURLException at java.net.URL.<init>(URL.java:619) at java.net.URL.<init>(URL.java:482) at java.net.URL.<init>(URL.java:431) 代码中URL url = new URL(someUrl);这一行出现java.net.MalformedURLException异常 解决方法是,对someUrl中的参数名和参数值都URL

  • Java数组越界问题实例解析

    Java中数组初始化和OC其实是一样的,分为动态初始化和静态初始化, 动态初始化:指定长度,由系统给出初始化值 静态初始化:给出初始化值,由系统给出长度 在我们使用数组时最容易出现的就是数组越界问题,好了,这里有个简单的例子 int [][] array = {{1,2,3},{1,4}}; System.out.println(array[1][2]); 这是一个二维数组,很明显,数组越界了,控制台中会打印如下信息: Exception in thread "main" java.l

  • Java异常处理运行时异常(RuntimeException)详解及实例

      Java异常处理运行时异常(RuntimeException)详解及实例 RuntimeException RunntimeException的子类: ClassCastException 多态中,可以使用Instanceof 判断,进行规避 ArithmeticException 进行if判断,如果除数为0,进行return NullPointerException 进行if判断,是否为null ArrayIndexOutOfBoundsException 使用数组length属性,避免越

  • Java中内存异常StackOverflowError与OutOfMemoryError详解

     Java中内存异常StackOverflowError与OutOfMemoryError详解 使用Java开发,经常回遇到内存异常的情况,而StackOverflowError和OutOfMemoryError便是最常遇见的错误. 首先,看看这两种错误的解释: 如果当前线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常. 如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常. 这里把异常分为两种情况,但是存在一些相互重

  • java中的connection reset 异常处理分析

    在Java中常看见的几个connection rest exception, Broken pipe, Connection reset,Connection reset by peer Socked reset case Linux中会有2个常见的sock reset 情况下的错误代码 ECONNRESET 该错误被描述为"connection reset by peer",即"对方复位连接",这种情况一般发生在服务进程较客户进程提前终止.当服务进程终止时会向客户

  • java中排序报:Comparison method violates its general contract异常的解决

    前言 上周线上的一段排序的java代码出现了一个Comparison method violates its general contract,在解决这个问题的途中学到了一些知识这里总结分享一下. 异常原因 这个排序导致的异常将会在java7以上的版本出现,所以如果你的JDK从6升级到了7或者8,那一定要小心此异常. 在java7的兼容列表中,就有对此排序不兼容的说明: Area: API: Utilities Synopsis: Updated sort behavior for Arrays

  • 利用Java异常机制实现模拟借书系统

    本文介绍的是利用java语言实现一个控制台版的模拟借书系统,在开始本文的正式内容之前,我们先来了解一下Java异常机制. 什么是异常? 异常,不正常也.Exception是Exception event的缩写,因此异常是一个事件,该事件发生在程序运行时. 异常会影响程序的连续性,使程序中断.在Java中,一切皆对象,所以要定义异常,也需要使用对象.异常对象里 封装了异常类型和程序发生异常时的状态. 我们经常说的抛出异常就是创建异常对象,并提交给运行系统. 异常捕获机制与try-catch 当异常

  • java 利用java反射机制动态加载类的简单实现

    如下所示: ////////////////// Load.java package org.bromon.reflect; import java.util.ArrayList; import java.util.List; public class Load implements Operator { @Override public List<?> act(List<?> params) { // TODO Auto-generated method stub List<

  • 利用java反射机制调用类的私有方法(推荐)

    试想一下,如果你可以轻易地调用一个类的私有方法,那么是不是说你的封装都失效了?最近在看java的反射机制,发现居然可以利用java的反射机制去调用其他类的私有方法,至于这能干什么,那就见人见智了.. 我写的一段简易实例代码如下: import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * @author thomaslwq * @version 创建时间:Sep 4, 201

  • 利用java反射机制实现自动调用类的简单方法

    1. 新建TestServlet类 package com.yanek.test; import java.io.IOException; import java.lang.reflect.Method; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.ht

  • 利用Java反射机制实现对象相同字段的复制操作

    一.如何实现不同类型对象之间的复制问题? 1.为什么会有这个问题? 近来在进行一个项目开发的时候,为了隐藏后端数据库表结构.同时也为了配合给前端一个更友好的API接口文档(swagger API文档),我采用POJO来对应数据表结构,使用VO来给传递前端要展示的数据,同时使用DTO来进行请求参数的封装.以上是一个具体的场景,可以发现这样子一个现象:POJO.VO.DTO对象是同一个数据的不同视图,所以会有很多相同的字段,由于不同的地方使用不同的对象,无可避免的会存在对象之间的值迁移问题,迁移的一

  • Java 异常机制Exception和自定义异常

    目录 异常机制 异常体系结构 异常的捕获与抛出 自定义异常 异常机制 异常:就是不符合实际需求,在实际中可能不存在也可能不满足实际,所以出现的问题称之为异常. 异常的三种类型: 检查性异常:用户错误或问题引起的异常,是程序员无法预见的.例如打开一个不存在的文件,就会发生一个检查性异常. 运行时异常:是可能被程序员避免的异常,与检查性异常相反,运行时异常可以在编译是被忽略. 错误(ERROR):错误不是异常!错误是脱离了程序员的问题.一般不是程序员的问题. 异常体系结构 Java当中,万物皆对象,

  • java异常机制分析

    本文实例分析了Java的异常机制,分享给大家供大家参考.相信有助于大家提高大家Java程序异常处理能力.具体分析如下: 众所周知,java中的异常(Exception)机制很重要,程序难免会出错,异常机制可以捕获程序中的错误,用来提高程序的稳定性和健壮性. java中的异常分为Checked Exception(非Runtime Exception)和UnChecked Exception(Runtime Exception),所有的异常类都直接或间接的继承Exception.Exception

  • Java 常用类解析:java异常机制,异常栈,异常处理方式,异常链,异常丢失详解

    1.java标准异常概述 Throwable表示任何可以作为异常被抛出的类,有两个子类Error和Exception.从这两个类的源代码中可以看出,这两个类并没有添加新的方法,Throwable提供了所以方法的实现.Error表示编译时和系统错误.Exception是可以被抛出的异常类.RuntimeException继承自Exception(如NullPointerException),表示运行时异常,JVM会自动抛出. 2.自定义异常类 自定义异常类方法: 通过继承Throwable或Exc

  • Java异常之图书管理系统

    本文实例为大家分享了Java异常之图书管理系统的具体代码,供大家参考,具体内容如下 模拟借书系统,任务要求: 感觉自己的写出来的代码不够简洁,参考了其他的案例写了一个,效果如下: 结构: 运行异常1: 运行异常2: 运行异常3: 正常运行: 1.名称查询 2.序号查询: Book.java: package com.tony; /* * 图书租赁系统 */ public class Book { public String bookName; public int bookId; public

  • Java异常简介和架构_动力节点Java学院整理

    Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制. Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性.在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了"什么"被抛出,异常堆栈跟踪回答了"在哪"抛出,异常信息回答了"为什么"会抛出. Java异常机制用到的几个关键字:try.catch.finally.throw.thro

随机推荐