一、什么是异常
编程的时候也会发生一些错误,Java 是先编译后运行, 在Java 编程时出现的错误可以检测语法的编写是否正确, 运行时发生的错误称为异常(Execption)。1.异常的基本概念
在运行后的结果中可以看到,在代码中出现了一个异常错误信息提示,最终给出了一个结果(计算 a/b 时侯产生ArithmeException), 此异常是运算条件逻辑错误抛出的异常,但是没有得到想要的结果,所以此异常如果不解决,程序就会中断,无法再继续执行。 2.异常分类
在Java.lang 包中有一个类:Throwable, 这个类是所有异常对象的父类。Throwable中有很多子类对象,其中Execption和Error是它两个重要的子类。 Error: 这种是很严重的错误, 一般来自Java底层。 如Java运行时系统内部发生错误、JDK 出现错误、 电脑死机等,一般出现这样的错误是无法避免, 也无法处理的。 Execption: 这个指的就是 Java中的异常, 一般这样的错误是可以避免的, 可处理的。Exception也有很多子类,其中有一个子类叫RuntimeException, 所以Exception的子类被分为两类。一 类 是Exception的 子 类, 被 称 为 非 运 行 时 异 常 ( 已 检 查 异 常 ), 一 类 是 RuntimeException的子类,被称为运行时异常(未检查异常)。 未检查异常: 这类异常是程序员在写代码过程中,代码逻辑上出现问题, 没有经过仔细排查而出现的错误, 编译器不会让你强制修改, 是可以避免的。 3.异常的产生 异常是在程序中断时候给出的提示信息ꎬ 根据这个异常信息能够找到相应的解决措施,避免异常给程序带来影响。产生异常有如下几种原因: (1)Java 内部错误发生异常,Java虚拟机产生异常。 (2)编写程序的代码中的错误所产生的异常(例如控制针异常、 数组下标越界、 类型转换异常等),一般由代码逻辑错误导致。 (3)通过 throw 语句手动生成的异常, 如“throw new SQL Exception()”一般用来告诉方法,调用者一些必要信息。 常见异常类型展示
二、异常处理
1.throws关键字
throws关键字是用来声明异常抛出的意思,是我们处理异常的一种方式。如果对此异常不想处理,可以使用throws关键字进行声明抛出,让方法的调用者去处理此异常。 语法: public 返回值类型 方法名(参数表...... )throws Exception{...} 2.try-catch和finally 使用 throws关键字来抛出异常,让调用者去处理异常, 如果调用者也不想处理,也可以抛出异常,这种方式是消极的。因为没有真正处理异常, 所以可以运用Java异常处理的另一种方式进行异常的处理,使用try{ }catch(Exception){ }进行异常捕获和处理。 三、如何自定义异常 在 Java中有很多异常类,在实际开发中, 对数据进行操作时,有可能会出现一些错误,需要报异常, 但是当 Java异常类中没有这样的异常,出现错误,不能返回错误信息时, 可以自 己 定 义 一 个 这 样 的 异 常, 要 实 现 自 定 义 异 常, 就 需 要 继 承Exception或 者RuntimeException类。 自定义异常步骤: (1)创建异常类,继承Exception或者RuntimeException。 (2)在异常类中定义构造方法,实现方法体。 四、设计图书借阅系统 1.任务描述 本任务是设计一个图书管理系统,需要结合前面所学的数组。通过自定义异常的方式,针对借书过程中可能发生的一些异常做提示并处理。主要还是通过抛出异常和try{ }catch(){}捕获两种方式处理异常,是处理异常和自定义异常的一个综合练习。 2.实现思路及步骤 (1)打开 Eclipse。 (2)点击“File”→“New”→“Java Project”新建一个模块,模块名字自定义。 (3)点击新建的模块,在“src” 文件上点击鼠标右键“New” →“Package”,新建一个包com.demo(包名可以自定义)。 (4)点击新建的包 com.demo, 点击“New”→“Class”新建一个类 Book,书籍类, 用于创 建图书对象。public class Book{ //属性私有 private int book_id; private String book_name; //构造方法 public Book (){} public Book ( int book_id, String book_name){ this. book_id = book_id; this. book_name = book_name; } //get()方法。用户不需要修改数据,所以不需要set()方法 public int getBook_id(){ return book_id; } public String getBook_name (){ return book_name; } }(5)点击新建的包com.demo, 点击“ New” →“ Class” 新建一个类 BookException继承Exception。定义异常用于可能出现错误的代码、 异常信息的追踪。
public class BookException extends Exception{ public BookException (){} public BookException (String message) { super( message); } }(6)点击新建的com.demo,点击“New”→“Class”新建一个类 Book_Method, 图书管理系统操作界面提示: 第一步: 选择进入借书界面; 第二步: 选择图书编号; 第三步: 是否要借此书; 第四步: 完成借书后是否继续借书; 在 Book_Method中新建五个方法: 显示所有书籍输入showAll( ),查看用户是否进入图书管理系统操作选择输入getUserput(),获取用户书籍编号输入 getUserBookBh(),判断书籍是否存在输入is Exist(), 获取用户是否借阅这本书籍输入 getUserIsBorrow()。
import java. util. Scanner; public class Book_Method{ Scanner sc= new Scanner( System. in); //借书界面操作提示。 public void borrow Book ( Book[]books){ int userln=0; //操作选择提示,是否进入 int bookBh=0; //图书编号 int isBorrow =0; //是否借阅该书选择操作 //第一步操作,进入借书界面。 while(true){ System. out. println("否进入借页面:"); System. out. println ("1:入,2:不进入"); try{ userln = getUserlnput(); }catch (BookException e){ System. out. println("您输入的信息有误,请重新输入!"); continue; } if(userln = =2) { System. out, println("已经退出图书管理系统。"); break; } //第二步操作,选择图书编号。 while (true) System. out. println("请输入图书编号:"); try{ bookBh = getUserBookBh(books); }catch (BookException e){ System. out. println("图书系统中没有这本书,请重新选择。”); continue; } bookBh-=1; System. out. println("你要借图:"+books [bookBh].getBook_name()): //第三步操作,是否借阅此书。 while (true){ System. out. println ("是否要借阅本:"); System. out. println (" 1:借阅,2:不借阅" ); try{ isBorrow = getUserlsBorrow(); }catch (BookException e){ System. out. println("您输入的信息有误,请重新输入。”); continue; } if (isBorrow = = 1) System. out. println ("您已经成功阅书,书名为:" +books [ bookBh]. getBook_name()); else System. out. println("E经帮您取消 对:" +books[book Bh]. getBook_name() +该书的借阅。”); //第四步操作,借书完毕是否继续借书。 while(true){ System. out. println("否续:"); System. out. println("1:继续借书,2:不继续借书"); try{ isBorrow = getUserlnput (); }catch ( BookException e){ System. out. println("您输入的信息有误,请重新输入!"); continue; } break; } break; } if(isBorrow = =1) continue; if( isBorrow = =2)| System. out. println("您已经退出操作系统"); break; } } break; //1.显示所有书籍 public void showAll( Book[] books){ for(int i=0; icbooks. length;i++){ System. out. println ("编号:" + books [i]. getBook_id () +"1t"+"书名:" + books [i].getBook_name()); } } //2.查看用户是否进入图书管理系统操作选择输入 public int getUserlnput() throws BookException{ int userln = sc. nextlnt(); if(userln! =1 && userln! =2){ throw new BookException(); } return userln; //3. 获取用户书籍编号输入 public int getUserBook Bh( Book[ ] books ) throws Book Exception{ int bookBh = sc. nextlnt(); //判断这个book_id在数组中有没有 if(! isExist ( books, bookBh)){ throw new Book Exception(); } return bookBh; } //4.判断书籍是否存在 public boolean isExist( Book[] books, int bookBh){ for( int i=0; icbooks. length;i++) { if( bookBh = = books[i]. getBook_id()) return true; return false; } } return false; } //5.获取用户是否借阅这本书籍输入 public int getUserlsBorrow () throws BookException{ int isBorrow = sc. nextlnt(); if(isBorrow! = 1 && isBorrow! = 2){ throw new Book Exception(); } return isBorrow; } }(7)主函数,程序运行的入口类。
1 public class TestBook{ 2 public static void main (String [] args){ 3 //创建图书数组 4 Book [] books ={ 5 new Book (1," Java 程序设计"), 6 new Book(2,"网页设计"), 7 new Book (3,"C#程序设计"), 8 new Book(4,"UI 设计"), 9 new Book(5,"大学英语"), 10 new Book (6," C++程序设计") 11 }; 12 Book_Method book_method = new Book_Method(); 13 System. out. println (" =========所有图书展示======="); 14 //调用查询所有图书方法,展示所有书籍。 15 book_method. showAll ( books); 16 System. out. println("请根据操作提示进行操作选择:"); 17 book_method. borrowBook ( books); 18 } 19 }
3.运行结果
标签:处理,System,Book,println,异常,public,out From: https://www.cnblogs.com/ShiFang0406/p/16717392.html