首页 > 其他分享 >异常处理

异常处理

时间:2022-09-21 22:35:17浏览次数:43  
标签:处理 System Book println 异常 public out

一、什么是异常

        编程的时候也会发生一些错误,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

相关文章

  • 图像处理学习笔记-02-数字图像基础
    第一节简述人类视觉系统的一些重要方面,包括人眼中图像的生成及人眼适应和辨认灰度的一些能力,第二节讨论光、电磁波谱的其他分量及他们的成像特点,第三节讨论成像传感器及如......
  • Day7 Javase抽象接口以及异常的捕获和抛出
    Day7面向对象编程抽象abstract修饰抽象类,如果修饰方法就是抽象方法。抽象方法可以写方法体,然后让继承抽象类的类去重写抽象方法。java的类是单继承的,但是接口可以实现......
  • pcb 接地处理
    多种接地方式系统GND和外壳不连接,主要用于塑胶件外壳系统GND和通过阻容并联连接系统GND和外壳直接连接,主要用于电脑主板和射频或者机房设备,电脑是因为USB外......
  • 关于windows中一些消息处理相关API的使用
    SetTimer在一个不具有窗口的线程中创建计时器,调用线程必须具有消息循环去派遣消息,否则计时器回调函数是无法调用的。根据微软官方的解释是计时器回调函数是默认的窗口回调......
  • SARscape5.6.2干涉叠加处理效率提升
     SARscape5.6.2于2022年5月正式发布,包含若干更新和优化。干涉叠加处理模块在处理速度方面持续提升,表现在:PS干涉工作流处理、第一次反演和第二次反演优化,速度提升;SBAS处理......
  • 记录nodejs中querystring‘已弃用’三种处理方法
    一.升级node版本,修改引入方式//升级到18.x版本后修改引入方式constquerystring=require('node:querystring')二.官方推荐URLSearchParams替代因为不想升级就按照......
  • RDS:一致性处理事务的神器
    摘要:RDS关系型数据库是一种基于云计算平台的即开即用、稳定可靠、弹性伸缩、便捷管理的在线关系型数据库服务。本文分享自华为云社区《一致性处理事务这下还是看RDS的吧【......
  • cdh环境:hue集成kerberos无法启动ktr问题处理过程
    cdh版本:ClouderaExpress6.1.0报错现象:Ifthe'renewuntil'dateisthesameasthe'validstarting'date,theticketcannotberenewed.PleasecheckyourKDCco......
  • Android优雅地处理按钮重复点击的几种方法
    App中,有很大一部分场景是点击按钮,向服务端提交数据,由于网络请求需要时间,用户很可能会多次点击,造成数据重复提交,造成各种莫名其妙的问题。因此,防止按钮多次点击,是Android开......
  • 虚拟机下,ubuntu20.04 有如下的硬盘报错应该怎样处理:ubuntu read-only file system或Ex
    首先,不要急着删除虚拟机,重建。先确认是否能进入系统。能进入系统,就可以进行修复。其次,查看问题硬盘是否已经挂载。sudodf-h然后,如果已经挂载。则执行修复。/dev/you......