




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Throwable类概序总有编译不通过的时候。根据Java的面向对象规则,就算是错误/异常也是对象。java.lang.Throwable类是所有异常/错误的父类。Throwable的意思是“可抛出的”。在学习如何解决/抛出异常之前,我们先来学会这系。异常和错虚拟机的默认处理Throwable方式importjava.util.Scanner;classpublicstaticvoidargs){Scanners=newScanner(System.in);intnum1=s.nextInt();intnum2=s.nextInt(); }}算num1/num2num20ArithmeticException(算数异常)实例被当虚拟机发现了一个Throwable时,会首先打印栈。栈是结果中最后的两行英文,主要的内容是Throwable的类型、Throwable的描述、出现Throwable的位置。程序员对于异常可以有两种处理方式:第一种是捕捉(也就是通过try、catchfinally),第二种是抛出。下一节当中,我们来学习本章虚拟机默认处理 的方式是:打印栈,并终止程捕捉异常异常,不需要让上级调用者解决,应当使用捕捉方法。Java为我们提供try、catch、finally这三个语句块来捕捉异常。语catch(){}:如果try中出现了指定的异常类型,进入该catch语句实classpublicstaticvoidmain(String[]intnum1=10;intnum2=0;}catch(ArithmeticExceptione){ }}publicstaticintdivide(intaint return }}这个程序当中的第七行代码,“divide(num1,num2)”中,程序就相当于执行了一个newArithmeticException()。这个对象会赋给catch中的“ArithmeticExceptione”实例。就相当于是“ArithmeticExceptione=newArithmeticException()”。try中还有一个打印“运算完成”的语句,其没有被执行【可观察到:当try中出现异常,立刻前往catch,后面语句不再执行】try和catch后面有一个打印“程序结束”的语句,其被执行了【可观察到:捕捉异常获取异常在catch块当中,可以通过异常的实例来获取异常的信息。Throwable类中有三个方法供String void classpublicstaticvoidmain(String[]intnum1=10;intnum2=0;}catch(ArithmeticExceptione){}}publicstaticintdivide(inta,intreturn}}在这个程序当中catch块中打印了e.toString()。结果是异常类名+信息classpublicstaticvoidmain(String[]intnum1=10;intnum2=0;} }}publicstaticintdivide(inta,intreturn}}这次我打印的是e.getMessage()。可以看出来,仅仅有异常的信息,没有类classpublicstaticvoidmain(String[]intnum1=intnum2=}
}}publicstaticintdivide(inta,intreturn}}打印栈其实和之前我们演示的虚拟机默认处理Throwable的方式看上去一样。推荐大家使用打印栈的方式获取异常的信息,因为异常类、信息、出现地点应有尽有。较为多个这里我们写一个程序:可以通过Scanner类获取用户的输入。输入两个数后进行除法运ArithmeticExpcetion(用户有可能会除0,这个我们已经接触过了 (用户输入的不是数字,或超出范围所以说,我们需要通过两个catch块进行处理。importimportclasspublicstaticvoidmain(String[]args){Scanners=newScanner(System.in);intnum;intnum=s.nextInt();num2=s.nextInt();}catch(ArithmeticExceptione){ }catch(InputMismatchExceptione){ }}}相信多个catch块不难理解。但是问题来了:要是我的try语句块中有可能出现的异常太多了,不可能一个一个的把所有catch列举出来,该怎么办呢?classpublicstaticvoidmain(String[]args){Scanners=newScanner(System.in);intnum;intnum=s.nextInt();num2=s.nextInt();}catch(Exception }}}块中出现异常,会new出来一个异常对象,并赋给catch中的实例。如果发生了算数异常,就相当于“ExceptionenewArithmeticException()”,如果发生输入错误异常,相当于“ExceptionenewInputMismatchException()”。这两个是不是面向对象特点中的多态?这 语句块是可选的。其中的代码是无论出错与否都要执行的语句。importclasspublicstaticvoidmain(String[]args){Scanners=newScanner(System.in);intnum;intnum=s.nextInt();num2=s.nextInt();}} }}}需要释放、关闭资源。finally在IO流技术中十分常用。然而在本章中并不是我们的重本章可以有多个toString()、getMessage()、printStackTrace()是获取异常信息的三种方使用throws异throws 语如果一个方法需要异常,通过这个格式}classpublicstaticdoubledivide(intaintbthrows return}publicstaticvoidargs){}}学生提问:为什么不抛出ArithmeticException,而是答:这是为了方便演示。ArithmeticException是RuntimeException的子类,这种特殊常即使不也可以。我们会讲解。为了让了解异常的本质,我先暂时抛可以发现,虽说没有除零,但是这段程序是编译失败的。main()方法调用了divide()方法。divide()方法了一个异常。main()是divide()的上级调用者,所以说main()方法中classpublicstaticdoubledivide(inta,intb)throwsreturn}publicstaticvoidmain(String[]}e){}}}如果main()方法也:classpublicstaticdoubledivide(inta,intb)throwsreturn}publicstaticvoidmain(String[]args)throwsException{//主方法异}}catch块后面的“程序结束”没有被打印。这是因为主方法的上级调用者是虚拟机。虚拟机一旦收到了异常,就会使用它的默认处理方式:打印栈并终止程序。所以说后面的RuntimeExceptionRuntimeException类是Exception类的子类。其实我们之前的ArithmeticException法不需要这种异常。classpublicstaticdoubledivide(inta,intb)throwsreturn}publicstaticvoidmain(String[] }}直向上抛,抛到用户层当中作为提示。throws,上一级调用者也就本章异常通过throws实现,放在方法后面,格式为:“throws1,2,异常n”RuntimeException是Exception的子类,RuntimeException的子异常被称为运行时异throw手动抛出异throw统会自动抛出一个异常,我们不需要做任何事情。不过在实际开发当中,你自己定义的功能肯定有自己出错的方式,所以说Java为我们提供了手动抛出异常的语句:throw。我们学了自定义异常以后还可以通过throw抛出自己的异常。throw的使用throw异常对象实例化涉及到构造方法,我们简单的来学下Throwable类的常用两个构造方法: Throwable(Stringmessgae) classpublicstaticvoidargs){}publicstaticdoubledivide(inta,int }return}}ArithmeticException,这个对象有详细信息,可以在结果当此外,如果一个方法抛出的异常不是RuntimeException或其子类,方法上必须它抛classpublicstaticvoidargs){}publicstaticdoubledivide(inta,intthrownewException("不能除}return}}这次我仅仅抛出一个Exception,由于其是RuntimeException的父类而不是子类,在方法中抛出Exception必须要在这个方法上这个异常。classpublicstaticvoidmain(String[]}
e){}}publicstaticdoubledivide(inta,intb)throwsthrownewException("不能除}return}}这次,我在divide()方法上了这个异常,而且在主方法中捕捉,编译才能通过本章throw的语法是“throw异常对象如果一个方法抛出的异常不是RuntimeException或其子类,必须要在方法上这自定义异常在实际的开发当中,光使用Java类库为我们提供的异常是远远不够的。有一些程序的异常是这个程序独有的,这个时候需要自定义异常。然而,自定义异常要是要起作用,必须要手动的使用throw抛出。自定义异常的捕捉、也和前面讲的一模一样。现在我们来开始学习如何自定义一个异常。自定义异常我们之前接触的ArithmeticException、InputMismatchException等,都是类,因为万物皆行时异常,需要继承RuntimeException),然后就可以了。很简单。classpublicstaticvoidmain(String[]args)throwsthrownew}}classMyExceptionextends我们在讲throw的时候讲过了,通过Throwable的构造方法来定义一个详细信息。在我们classMyExceptionextendspublicMyException(Stringmsg){//}public }}们知道,Throwable拥有这样的构造方法,而且ThrowableMyException的父类,所以说通过我们在面向对象中学过的super关键字将这个msg传入。classMyExceptionextends }public}}classpublicstaticvoidmain(String[]args)throwsthrownewMyException("这是异常的详细信息");//}}classMyExceptionextends }public}}实下,0以上,如果不是,抛出这个异常)大家会注意到,由于IllegalNumberException是由用户传入不当的参数造成的,不需要进行捕捉,所以说然这个类继承RuntimeException会更好。classpublicstaticvoidmain(String[]args)throws}publicstaticdoubledivide(inta,int}if(a>100||a<0||b>100|| //如果a>100或a<0或b>100或}return}}classIllegalNumberExceptionextends public}}在这个程序当中,我自定义了一个运行时异常,IllegalNumberExcep
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供应商产品质量保证协议书范本6篇
- 赠与合同范例4篇
- 旅游住宿合租合同范本
- 国家管网集团合同范本
- 法院服装采购合同范本
- 长期订单的合同范本
- 关于产权纠纷房屋出租合同3篇
- 纸式工程合同范本
- 第一节 两个计数原理与排列组合2026年高三数学第一轮总复习
- 2025年光缆熔接技能考试题及答案
- 贵州省榕江县2025年上半年事业单位公开遴选试题含答案分析
- 新学期-启航出发-2025-2026学年初一上学期新生开学第一课主题班会
- 2025年秋数学(新)人教版三年级上课件:第1课时 观察物体
- 润滑油脂性能指标解读课件
- 北师大版数学九年级上册全册同步练习附答案
- 《中华人民共和国职业分类大典》电子版
- 2022学校校服选用工作自查整改报告
- 2019修订《城市规划设计计费指导意见》
- 星级酒店工程部培训课件精品ppt
- 五年级下册数学开学第一课.ppt课件
- 填充墙施工正确和错误做法图文对照解说
评论
0/150
提交评论