本文介绍的是利用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;

}

}

}

总结

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

java异常处借接错书_利用Java异常机制实现模拟借书系统相关推荐

  1. java完成一个学生信息调查程序_利用Java设计一个简单的学生信息管理程序

    利用Java设计一个简单的控制台学生信息管理程序 此程序可作为课设的参考,其中信息存储于文件中. 创建了学生类Student,用于存储学号等的信息.创建StudentFunction类,用于实现诸如学 ...

  2. java 操作mysql数据库得到错误码_[数据库/Java]数据库开发过程中产生的MySQL错误代码及其解决方案...

    前言 吐槽一下,均是这两天遇到的破烂事儿,搞定了也好,以后出现此类问题也就放心些了. 下列遇到的问题大都是因为MySQL从5.x版本升级到8.0.11(MySQL8.0涉及重大改版)后,跟着连带着出现 ...

  3. Java反射设置list的属性值_利用java反射比较两个实体有哪些属性值不一样

    分享一个利用反射实现比较两个实体属性值的方法: package net.zwq1105.test; import java.beans.Introspector; import java.beans. ...

  4. 用java实现一个简单远程监控软件_利用java实现一个简单的远程监控程序

    一般的远程监控软件都是用c或者c++等语言开发的,而使用java如何来实现相同的功能呢. 首先我们先介绍一下一个简单的远程监控程序的实现原理. 功能一,远程屏幕监视 (1) 必须要有监控端与被监控端, ...

  5. java filter 返回错误消息_利用java filter 实现业务异常拦截 跳转到错误信息提示页面...

    1.缘由:我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理机制,我们在业务层会跑出我们遇到业务 ...

  6. java主线程和子线程区别_主线程异常– Java

    java主线程和子线程区别 Being a Java Programmer, you must have seen exception in thread main sometimes while r ...

  7. java 中的finally你知多少_「JAVA」详述Java异常体系,处理异常时配上finally效果更佳...

    什么是异常 从事Java开发的小伙伴对于"异常"应该不陌生,因为每天都会遇到不少异常,或捕获,或抛出.那究竟什么是异常?异常即非正常的,不同于平常.一般化的情况.在平时生活中,医生 ...

  8. java用什么书_学java用什么书比较好

    1 学java用什么书比较好 it行业现在的发展如日中天,很多人都纷纷走进这个行业,而java作为跨平台的编程语言更是受欢迎.java其实相对其他语言来说的确很有优势,但是也有点缺陷,但是以后发展到什 ...

  9. java写一段程序代表心情_讨论java初步学习的方法及心情

    Java的重要性 Java语言的三大特点,面向对象.良好的跨平台性和健壮性,这三大特点使Java被广大编程人员接收并且使用.Java的核心机制有Java虚拟机和垃圾回收机制这两种,Java虚拟机通过解 ...

  10. java简单通讯录的实现02person类_用java实现简单的小游戏(你一定玩过)

    用java实现简单的小游戏(你一定玩过) 对于java初学者来说,通过一些学习小游戏来对swing学习以及对java基础的学习是一个好的方法,同时也给学习带来了很多的乐趣,接下来就给大家分享一个jav ...

最新文章

  1. ggplot2笔记5:通过图层构建图像
  2. python实现排序算法_python实现各种排序算法
  3. 转 alsa录音放音执行流程详解
  4. INTERNET的完整形式是什么?
  5. 字符数组,字符串、数字转化
  6. 【MyBatis-Plus】第二章 条件构造器
  7. 苹果iOS 13暗黑模式概念图曝光 将于iOS 13.1版本更新
  8. MySQL5.6多实例安装
  9. python 谷歌翻译接口_谷歌翻译python接口
  10. 电动汽车动力系统整车仿真,具有双向DCDC变换器实现能量反馈
  11. BCNet实现PLC数据采集解决方案,BCNet
  12. 《计算机操作系统》(第四版)大全总结
  13. VGG19 基本网络结构图
  14. vnc远程控制软件7款,7款非常好用的vnc远程控制软件
  15. LED小间距屏幕理解
  16. 睡不着觉--安卓计数器给我数绵羊
  17. 华为2019年第一季度业绩曝光;联想and谷歌加入英特尔新晋云计划;即特斯拉起火,蔚来ES8也维修起了火...
  18. 网络串流_串流免费音乐的最佳网站
  19. vs2008安装boost库
  20. 【perl】正则匹配中的括号套括号的套娃抓取规则

热门文章

  1. idea结合git教程(拉取项目,提交代码,合代码等等)
  2. 在lua中调用DLL
  3. mysql shrink_MySQL Group Replication内存使用分析和优化-1
  4. layui option 动态添加_layui select如何动态添加option
  5. arm平台下的反汇编pdf_stm32逆向与安全科普,bin文件逆向反汇编
  6. 学习Java,真的可以月薪过万嘛?真实个人经历告诉你,记录了平时学习的内容以及学习过程中最真实的感受(一)
  7. 递归算法的基本理解以及基本算法,多行注释详解,适合编程小白,刚接触递归的编程新手
  8. okhttp post php,Android OkHttp 结合php 多图片上传实例
  9. filezilla检查新版本mac_filezilla中文版mac下载
  10. 蚌埠电大计算机课心得体会,电大心得体会