浅谈Java自定义异常在教学中的教与学

合集下载

java实训:异常(try-catch执行顺序与自定义异常)

java实训:异常(try-catch执行顺序与自定义异常)

java实训:异常(try-catch执⾏顺序与⾃定义异常)关键字:try:执⾏可能产⽣异常的代码catch:捕获异常finally:⽆论是否发⽣异常代码总能执⾏throws:声明⽅法可能要抛出的各种异常throw:⼿动抛出⾃定义异常⽤ try-catch-finally 异常处理:情况⼀(正常运⾏,⽆异常):执⾏try,执⾏finally,执⾏finally块后的语句情况⼆(try中出现异常)执⾏到异常语句时(不执⾏try中异常语句之后的语句),直接跳到catch块,然后执⾏finally,再执⾏finally之后的语句public class Test2 {public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("请输⼊被除数:");try { // 将开始可能异常的代码放⼊tryint num1 = in.nextInt();System.out.println("接受除数");int num2 = in.nextInt();System.out.println(num1+"/"+num2+"="+num1/num2);//return;//异常块:catch和finally必须⾄少出现⼀个,try块必须有}catch (InputMismatchException e){//try中有匹配的异常,异常后的语句均不执⾏,直接调⽤catch,然后执⾏catch块之后的程序,若有异常但不匹配,不执⾏catch块,程序直接结束 System.out.println("出现错误,被除数和除数必须为整数");//e.printStackTrace();//输出异常堆栈信息,打印错误序列,调⽤过程e.getMessage();//System.exit(1);return;}catch (ArithmeticException e){System.out.println("被除数不可为0");e.printStackTrace();}finally {//⽆论是否发⽣异常,异常是否匹配,都会执⾏finally,若catch调⽤System.exit(1);finally与finally之后语句均不执⾏System.out.println("感谢使⽤");}System.out.println("finally之后语句");特殊情况之try中含有return:a.⽆异常(执⾏顺序):1.return之前的代码2.finally3.return语句4.执⾏完成(不会执⾏return之后语句,也不会执⾏finally块之后的语句)b.有异常(执⾏顺序):1.异常之前与异常代码2.catch语句3.finally块4.finally块之后语句5.执⾏完毕(因为异常直接跳到catch块,所以try中return不会执⾏)特殊情况之catch中含有returna.⽆异常(执⾏顺序):1.执⾏try代码块2.执⾏finally块3.执⾏finally之后的语句4.退出(⽆异常,所以不执⾏catch,直接执⾏finally)b.有异常(执⾏顺序):这⾥有两种情况情况⼀(异常匹配到的代码块中有return):1.执⾏try块(异常语句后的try语句均不执⾏)2.执⾏catch块return之前的语句3.执⾏finally块4.执⾏catch中的return语句5.退出情况⼆(异常匹配到的代码块⽆有return,catch在其他chtch块中)执⾏到异常语句时(不执⾏try中异常语句之后的语句),直接跳到catch块,然后执⾏finally,再执⾏finally之后的语句catch块的执⾏原理:对于异常的捕获,可以有多个catch,对于try发⽣的异常,他会根据发⽣的异常和catch⾥⾯的异常类型进⾏匹配(按照catch块从上往下匹配,但并不会执⾏不匹配的catch块语句),当他匹配到某个catch块时,他就直接进⼊这个catch块内,忽略这个catch块后⾯的所有catch块,所以,⼀般将catch(Exception e)放在最后,catch块承先⼦类后⽗类排列。

JAVA异常解读

JAVA异常解读

JAVA异常解读JAVA 异常解读一、异常的概念和 Java 异常体系结构Java 把异常当作对象来处理,并定义一个基类java. lang. Throwable 作为所有异常的超类。

在 Java API 中已经定义了许多异常类,这些异常类分为两大类,错误 Error 和异常 Exception 。

Thorwable 类所有异常和错误的超类,有两个子类 Error 和 Exception ,分别表示错误和异常。

其中异常类 Exception 又分为运行时异常(RuntimeException) 和非运行时异常,也称之为不检查异常(Unchecked Exception )和检查异常(Checked Exception )。

Error 是程序无法处理的错误,比如 OutOfMemoryError 、ThreadDeath 等。

这些异常发生时, Java 虚拟机(JVM )一般会选择线程终止。

Exception 是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。

程序中应当尽可能去处理这些异常。

运行时异常都是 RuntimeException 类及其子类异常,如NullPointerException 、 IndexOutOfBoundsException 等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。

这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度1/ 3尽可能避免这类异常的发生。

非运行时异常是 RuntimeException 以外的异常,类型上都属于 Exception 类及其子类。

从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。

如IOException 、SQLException 等以及用户自定义的Exception 异常,一般情况下不自定义检查异常。

二、异常的捕获和处理 Java 异常的捕获和处理是一个不容易把握的事情,如果处理不当,不但会让程序代码的可读性大大降低,而且导致系统性能低下,甚至引发一些难以发现的错误。

解读Java异常教学中的几个问题

解读Java异常教学中的几个问题

解读Java异常教学中的几个问题摘要:在Java基础语言的学习中,由于编写的基础程序往往短小简单,并且同学们也热衷于算法的思考,所以常常轻视一些Java的核心机制的细致学习,像异常处理这样的知识点。

为了加深同学们对异常处理机制的理解和重视,应在学习中应多加使用,比较用法特点,从而增加程序的可靠性和健壮性。

关键词:Java;异常教学;容错;问题在软件系统的开发过程中,程序中出现错误是避免不了的,应用程序的开发过程实际上是一个不断排除错误的过程。

而Java的异常处理提供了对程序运行时错误的语言进行处理的机制,使得程序即便在错误的干扰下还能够继续运行,不会导致程序的非正常终止,是采用Java语言开发的软件具有高度的可靠性、稳定性和健壮性的有效体现。

因此,不但要学习异常处理,更应该学好、用好这一重要机制。

但在Java语言的基础学习中,学生往往关注于程序的建模和算法环节,却经常忽视对错误和异常环节的处理。

显然这是对编程的一种错误认识,带有很大的局限性。

对于学生来说,造成这种现象的原因主要是对异常处理机制的浅显认识和应用上的模糊所造成的。

下面,我们就对异常处理中的几个问题作一下探讨。

一、抛出异常异常事件的整个处理过程其实就是一个发现问题、分析问题和解决问题的过程。

在程序的运行中会出现不同的异常事件,将阻止程序的正常运行。

我们要想防患于未然,必须对某些有出现异常可能的程序段进行监控,能够及时地发现,才能够及时地捕捉、处理。

简单得说,发现异常的代码就可以“抛出”一个异常对象,把它交由系统,寻找相应的程序来处理。

可见抛出异常对异常处理的整个过程是很关键的,并且同学们容易在这点上用法模糊。

抛出异常分两种形式:1.异常对象是由Java虚拟机抛出。

但凡处理异常,大家都知道“try{}—catch{}—finally{}”语句。

其中,try{}语句用于监听一段可能出现异常的代码,而为了使程序在出现异常后还能顺利继续运行,Java虚拟机会自动生成相应的异常对象,原来的程序流程将会在此程序处中断。

Java异常处理与自定义异常

Java异常处理与自定义异常
性。 增加 程 序 的 完整 性 。
关键词 : 常 ; 获 ; 出; 常类; 异 捕 抛 异 自定 义异 常 中图 分 类 号 : P 1 T 31 文 献标 识 码 : A 文章 编 号 : 0 9 3 4 (0 00 — 1 3 0 1 0 — 0 42 l)5 12 — 3
P o r m mi g rg a n
w h c e c n de i t ro urng t n ng ofpr r a ,i d rt e ntt f c deby t e e o .Th n t epr r m a i h w a a w t he e rd i he r ni og ms n or e o prve heef tma h r r l h u e e og a c n h r aey.W he ee e e to cas sc l notc pt e t x e i n he prc c p ia on,i e sust d f te e e io y un sfl n t s xc p n lse al h i a ur he e c pton i t a t a a pl t il ci tne d o e ne h xc pt n b i 9u sl e .Th  ̄Te a xc pt n ln , e a c aey nd f xbll i fu e —de ne e e i l e e tv l nh n e t e i e - rev s e SII e e i s on ha d ig t c urtl a e i ey usng o s r h l i f d xc pt on wi f ci ey e a c ntr l h a t nesa e i e rt ft o r . c ve s nd t ntg iy o pr g a i h he m Ke y wor s:e c p o d x e t n;c pt r hee e i n;tr w utt e e c pt i a u e t xc pto h o o h x e i on; xc pdo lse ;u e —d f d e e on e e n ca ss s r— e ne xc pd i

通过代码实例跟我学Java语言程序设计及应用技术——如何在项目中添加自定义的异常类型

通过代码实例跟我学Java语言程序设计及应用技术——如何在项目中添加自定义的异常类型

1.1通过代码实例跟我学Java语言程序设计及应用技术——如何在项目中添加自定义的异常类型1、添加自定义异常信息处理功能类(1)熟悉和了解在Java中自定义异常类的基本规则1)为什么要自定义异常类?——统一进行异常处理,提供更准确的错误信息(中文信息)2)如何定义自己的异常类?——从系统中的“某个异常类”进行继承,或者选择从Exception类进行继承(2)在客户端项目中添加OASystemException类(3)OASystemException类的代码示例package com.px1987.imsystem.exception;public class OASystemException extends Exception {public OASystemException() {}public OASystemException(String message) {super(message);}public OASystemException(Throwable cause) {super(cause);}public OASystemException(String message, Throwable cause) { super(message, cause);}}2、在客户端项目中应用该异常类型package com.px1987.imsystem.socketclient;import java.io.DataInputStream;import java.io.IOException;import java.io.PrintStream;import .Socket;import .UnknownHostException;import com.px1987.imsystem.exception.OASystemException;public class IMSystemSocketClientApp {private String serverSocketListenerHostName="127.0.0.1";private int serverSocketListenerPort=3721;private Socket clientSocket=null;private DataInputStream clientSocketInputStream=null;private PrintStream clientSocketOutputStream=null;public IMSystemSocketClientApp() {}public void connectToServer() throws OASystemException{try {clientSocket=new Socket(serverSocketListenerHostName,serverSocketListenerPort);} catch (UnknownHostException e) {throw new OASystemException("不能正确地连接服务器,可能是服务器没有启动或者IP有错");} catch (IOException e) {throw new OASystemException("不能正确地连接服务器,可能是服务器没有启动或者IP有错"); }}public void getSocketInputAndOutputStream() throws OASystemException{try {clientSocketInputStream=new DataInputStream(clientSocket.getInputStream());} catch (IOException e) {throw new OASystemException("不能正确地获得客户端的输入流,可能是服务器已经关闭");}try {clientSocketOutputStream=new PrintStream(clientSocket.getOutputStream());} catch (IOException e) {throw new OASystemException("不能正确地获得客户端的输出流,可能是服务器已经关闭");}}boolean stopRequest=true;public void sendRequestAndGetResponseFromServer() throws OASystemException{DataInputStream keyBoardInputStream=null;String userInputTextFromKeyBoard=null;String someResultTextFromServer =null;while(stopRequest){System.out.print(":");System.out.flush();keyBoardInputStream=new DataInputStream(System.in);try {userInputTextFromKeyBoard =keyBoardInputStream.readLine();if(userInputTextFromKeyBoard!=null){clientSocketOutputStream.println(userInputTextFromKeyBoard);someResultTextFromServer =clientSocketInputStream.readLine();if(someResultTextFromServer!=null){System.out.println(someResultTextFromServer);}else{System.out.println("服务器已经关闭了,客户程序也自动退出");break;}}else{break;}} catch (IOException e) {e.printStackTrace();throw new OASystemException("服务器已经关闭了");}}}public void closeAllStreamAndSocket() throws OASystemException {try {clientSocketInputStream.close();} catch (IOException e1) {e1.printStackTrace();}clientSocketOutputStream.close();try {clientSocket.close();} catch (IOException e) {throw new OASystemException("不能正确地关闭Socket客户对象,可能是客户端程序出现了错误");}}public static void main(String[] args) {IMSystemSocketClientApp oneIMSystemSocketClientApp=null;try{oneIMSystemSocketClientApp=new IMSystemSocketClientApp();oneIMSystemSocketClientApp.connectToServer();oneIMSystemSocketClientApp.getSocketInputAndOutputStream();oneIMSystemSocketClientApp.sendRequestAndGetResponseFromServer();}catch(OASystemException e){System.out.println(e.getMessage()); //在此才实现错误信息的显示}finally{try{oneIMSystemSocketClientApp.closeAllStreamAndSocket();}catch(OASystemException e){System.out.println(e.getMessage());}}}}3、课后作业1、对项目中的服务器端的程序进行“重构”,增加自定义的异常“类型转换”和异常错误信息的“翻译”。

java异常处理机制的原理和应用

java异常处理机制的原理和应用

Java异常处理机制的原理和应用1. 异常处理机制的概述Java异常处理机制是一种用于处理程序在运行时可能出现的异常情况的机制。

在Java程序中,当某个方法出现了异常,可以选择将异常抛出并交给上层调用者处理,也可以捕捉异常并在当前方法中进行处理。

异常处理机制能够有效地保护程序免受意外错误的影响,并提供了一种标准的处理方式,使程序更加健壮和可读。

2. 异常的分类Java中的异常分为两大类型:可查异常和运行时异常。

2.1 可查异常可查异常是指在Java代码中,编译器能够预见到可能会出现的异常情况。

这些异常一般都是由外部因素引起的,例如输入/输出操作中的文件不存在、网络连接中断等。

在编写程序时,必须对可能发生的可查异常进行处理,否则编译器会报错。

可查异常包括: - IOException:输入/输出操作异常 - SQLException:SQL数据库操作异常- FileNotFoundException:文件不存在异常- MalformedURLException:URL格式异常等2.2 运行时异常运行时异常是指由于程序逻辑错误或代码疏忽等原因导致的异常。

与可查异常不同,运行时异常一般不需要进行显式的处理,编译器也不会强制要求捕获这些异常。

常见的运行时异常包括: - NullPointerException:空指针异常 - ArrayIndexOutOfBoundsException:数组索引越界异常 - ArithmeticException:算术运算异常 - IllegalArgumentException:非法参数异常等3. 异常处理机制的原理Java的异常处理机制采用异常处理框架来实现,主要包括以下几个关键组成部分:3.1 try-catch块Java中的异常处理机制通过使用try-catch块来捕获和处理异常。

在try块中,我们编写可能会引发异常的代码。

当在try块中的代码出现异常时,会立即跳转到与之相匹配的catch块进行异常处理,从而避免程序的崩溃。

Java语言程序设计课程教学辅导技术资料——第9章 异常(例外)处理技术及应用

Java语言程序设计课程教学辅导技术资料——第9章 异常(例外)处理技术及应用

1.1Java语言程序设计课程教学辅导技术资料——第9章异常(例外)处理技术及应用【教学目标】在本单元中希望您重点了解并掌握如下知识点:Java异常编程规则,try、catch、finally 语句,声明和抛出异常,用户自定义异常类的编程规则。

1.1.1Java异常编程技术1、有关异常方面的基础知识(1)错误处理在进行程序设计时,错误的产生是不可避免的。

这是任何程序设计语言都要解决的问题。

(2)如何处理错误?把错误交给谁去处理?程序又该如何从错误中恢复?(3)什么是异常程序在运行过程中所发生的错误事件(如数组越界、文件操作时未找到文件、除法溢出等),而这些错误在设计时不能准确地识别出但又可能会发生或者不会发生;同时它会中断指令的正常执行。

import java.io.*;class ExceptionDemo{ public static void main(String args[]){FileInputStream fis=new FileInputStream("text"); //如果所打开的文件名不存在的int b; //情况下将产生异常while((b=fis.read()) != -1){ System.out.println(b);}fis.close();}}(4)正确理解程序设计中的三种错误语法错误(编译时的错误);逻辑错误(运行时的错误);异常错误(运行时的错误但取决于执行环境)。

(5)异常的特点(以“人身保险”为例加以说明异常的特性)程序在运行过程中所发生的错误事件程序员在编程时无法预知它是否会产生产生与否取决于用户当时的执行环境。

1.1.2Java中的异常处理1、Java中的异常处理:它是面向对象方式的错误处理方法。

2、非结构化错误处理的缺点(1)代码很难阅读、调试和维护(2)容易忽视错误(3)通过函数的返回值来发出错误信息,这易于导致很多错误并且无法提供错误产生的内部细节。

Java异常处理与自定义异常

Java异常处理与自定义异常

Java异常处理与自定义异常作者:笪林梅来源:《电脑知识与技术》2010年第05期摘要:Java程序运行期间发生的错误称为异常。

异常产生后,应有相应的异常处理机制来捕获异常或抛出异常。

JDK平台为我们提供了丰富和完整的异常类,通过它们来处理程序运行中的错误,防止错误对程序造成影响,确保程序能够安全运行。

当这些异常类不能捕获实际应用中的异常时,就需要用户自定义异常。

异常处理和用户自定义异常的正确与灵活运用,将有效地增强程序的交互性,增加程序的完整性。

关键词:异常;捕获;抛出;异常类;自定义异常中图分类号:TP311文献标识码:A文章编号:1009-3044(2010)05-1123-03Exception Handling and User-defined Exception in JAVA ProgrammingDA Lin-mei(Jiangsu Vocational and Technical College of Finance & Economics, Huai'an 223003, China)Abstract: The error occured during the Java program names exception. When it happens, there should be a corresponding exception handling mechanism to capture the exception or throw out it. JDK platform provides us with a rich and complete exception classes, through which we can deal with the error during the running of programs, in order to prevent the effect made by the error. Then the program can run safely. When these exception classes can not capture the exception in the practical application, it needs us to define the exception by ourselves. The same as exception handling ,the accurately and flexiblely using of user-defined exception will effectively enhance the interactiveness and the integrity of the program.Key words: exception; capture the exception; throw out the exception; exception classes; user-defined exception众所周知,Java编程语言的特点之一是它的健壮性。

013--自定义异常及2个关键字--利用案例轻松学习Java语言配套PPT

013--自定义异常及2个关键字--利用案例轻松学习Java语言配套PPT
自定义异常类 AException
1 2
定义方法methodA(),利用利用throws抛出异常。 public void methodA() throws AException,其它异常类{ //其它语句 throw new Aexception(提示信息); 该方法产生受检查异常, //其它语句 必须捕获 }
定义方法methodB(),调用方法methodA(),并捕获异常。 public void methodB() { try{ methodA(); }catch(Aexception e){ //异常处理 } }
吉首大学软件服务外包学院
3
13.4 异常处理综合应用
程序案例12-4: 异常处理综合 应用
吉首大学软件服务外包学院
清华大学出版社 利用案例轻松学习Java语言(2013年) 配套课件PPT 不足之处请多多指教
吉首大学软件服务外包学院
自定义异常类 AException
3、说明异常处理综合应用的步骤?
定义方法methodA(),利用利用throws抛出异常。 public void methodA() throws AException,其它异常类{ //其它语句 throw new Aexception(提示信息); //其它语句 }
清华大学出版社 利用案例轻松学习Java语言(2013年) 配套课件PPT 不足之处请多多指教
第十三讲:自定义异常
吉首大学软件服务外包学院
课程导入
1、已经学习的相关知识 程序错误分为语法错误、运行错误和逻辑错误,异常分 为受检查异常和不受检查异常,采用try-catch-finally语句捕 获异常和处理处理异常。 2、思考问题 系统定义的异常类包含了异常数据成员(运行错误 的信息)和异常类的成员方法(处理错误的方法)。本 次课主要讨论Java提供的自定义异常类以及没有捕获异 常情况下该如何操作。

java 自定义异常

java  自定义异常

java 自定义异常
在特定的问题领域,可以通过扩展Exception类或RuntimeException类来创建自定义的异常。

异常类包含了和异常相关的信息,这有助于负责捕获异常的catch 代码块,正确的分析并处理异常。

在分层的软件结构中,会存在自上而下的依赖关系,也就是说上层的子系统会访问下层子系统的API。

图8-8所示了一个典型的分层结构。

图8-8 分层的软件系统
在上图中,客户层访问业务逻辑层,而业务逻辑层访问数据库层。

数据库层把异常抛给业务逻辑层,业务逻辑层把异常抛给客户层,客户层则把异常抛给终端用户。

当位于最上层的子系统不需要关心来自底层的异常的细节时,常见的做法是捕获原始的异常,把它转换为一个新的不同类型的异常,再抛出新的异常,这种处理异常的办法称为异常转译。

例如,假设终端用户通过客户界面把一个图像文件上传到数据库中,客户层调
SQLException。

但是用户没有必要关心异常的底层细节,他们仅需要知道上传图像失败,具体的调试和排错由系统管理员或者软件开发人员来处理。

因此,uploadImageFile()方法捕获到原始的异常后,在catch代码块中先把原始的异常信息记入日志,然后向用户抛出UploadException异常。

从面向对象的角度来理解,异常转译使得异常类型与抛出异常的对象的类型位于相同的抽象层。

例如,车子运行时会出现故障异常,而职工开车上班会出现异常,车子的故障异常是导致职工迟到异常的原因。

Java自定义异常与异常使用的最佳方式

Java自定义异常与异常使用的最佳方式

Java⾃定义异常与异常使⽤的最佳⽅式⽬录异常的分类1. ⾮运⾏时异常(Checked Exception)2. 运⾏时异常(Runtime Exception/Unchecked Exception)异常的处理⼀、对应⾮运⾏时异常,必须对其进⾏处理⼆、对于运⾏时异常,可以不对其进⾏处理应⽤场景⾃定义异常类过程1. 多数情况下扩展2. 声明⽅法抛出⾃定义异常3.⾃定义异常测试操作使⽤异常的最佳实践1. 记得释放资源2. 不要使⽤异常作控制流程之⽤3. 不要忽略异常4. 不要 catch 最⾼层次的 exception5. 仅记录 exception ⼀次总结:异常的分类1. ⾮运⾏时异常(Checked Exception)Java中凡是继承⾃Exception但不是继承⾃RuntimeException的类都是⾮运⾏时异常。

2. 运⾏时异常(Runtime Exception/Unchecked Exception)RuntimeException类直接继承⾃Exception类,称为运⾏时异常。

Java中所有的运⾏时异常都直接或间接的继承⾃RuntimeException。

Java中所有的异常类都直接或间接的继承⾃Exception。

异常的处理⼀、对应⾮运⾏时异常,必须对其进⾏处理处理⽅式有两种:使⽤try…catch…finally语句块进⾏捕获在产⽣异常的⽅法所在的⽅法声明throws Exception⼆、对于运⾏时异常,可以不对其进⾏处理也可以对其进⾏处理。

⼀般情况下都不对其进⾏处理。

在使⽤Java API的⽅法时会产⽣异常,由于实际的需要,我们需要创建和使⽤⾃定义异常。

使⽤全新的异常类,应⽤到系统程序中。

在介绍⾃定义异常时,⾸要先谈谈什么要使⽤⾃定义异常,使⽤⾃定义异常的好处。

创建⾃定义异常是为了表⽰应⽤程序的⼀些错误类型,为代码可能发⽣的⼀个或多个问题提供新的含义;可以显⽰代码多个位置之间的错误的相似处,也可区分代码运⾏时可能出现的相似问题的⼀个或多个错误,或给出应⽤程序中⼀组错误的特殊含义。

Java程序设计 异常处理PPT 学习和备课资料

Java程序设计 异常处理PPT 学习和备课资料

• (1)Error类称为错误类,它表示Java运行时产生的系统内部错误或资源 耗尽的错误,是比较严重的,仅靠修改程序本身是不能恢复执行的。
• (2)Exception类称为异常类,它表示程序本身可以处理的错误,在开发 Java程序中进行的异常处理,都是针对Excption类及其子类。在 Exception类的众多子类中有一个特殊的RuntimeException类,该类及其 子类用于表示运行时异常。除了此类,Exception类下所有其它的子类都 用于表示编译时异常。本节主要针对Exception类及其子类进行讲解。
Java程序设计
运行可以发现,在 try 块中已经执行了 return 语句,但是结果仍然输出了"finally"。 由于 return语句早在 try 块内已经执行并且返回了 i,因此 finally 块中的 i = i+1 只是一句没有意义的代码,最后输出的结果是 1,而不是 2。
第五章 异常处理
第五章 异常处理
Java程序设计
• 如果一段代码可能产生异常,就可以将这段代码放在 try 块内, try 块就是监控区域;如果出现了异常,系统会将这个异常信息封装 成一个异常对象,并将这个对象传递给catch代码块。catch代码块中 接收的参数类型必须是Exception类或其子类。
• 程序不会立即中断,而是进入 catch 块中对异常进行处理或其他操 作,catch 块就是处理区域。
第五章 异常处理 • 5.2 异常的分类
Java程序设计
• Throwable类有很多方法,其中比较常用的方法如下所示:
• 上述方法都用于获取异常信息,由于Error和Exception继承自Throwable 类,所以它们都拥有这些方法,这些方法的具有应用将在后面的小节中逐 渐讲解。

Java异常处理的两种方式以及自定义异常的使用方法

Java异常处理的两种方式以及自定义异常的使用方法

Java异常处理的两种⽅式以及⾃定义异常的使⽤⽅法异常就是程序出现了不正常的情况Error:严重问题,不需要处理Exception:称为异常类,他表⽰程序本⾝可以处理的问题RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码⾮RuntimeException:编译期就必须处理的,否则程序不能通过编译,就更不能正常运⾏了JVM的默认处理⽅案如果程序出现了问题,我们没有做任何处理,最终JVM会做默认的处理把异常的名称,异常原因及异常出现的位置等信息输出在控制台程序停⽌执⾏异常处理两种⽅案:try...catch....throws.....try...catch...try{可能出现异常的代码;}catch(异常类名变量名){异常的处理代码;}执⾏流程:程序从try⾥⾯的代码开始执⾏出现异常,会⾃动⽣成⼀个异常类对象,该异常对象被提交给Java运⾏时的系统当Java运⾏时系统接收到异常对象时,回到catch中去找匹配的异常类,找到后进⾏异常的处理执⾏完毕后,程序还可以继续往下执⾏Throwable的成员⽅法:public class Demo1 {public static void main(String[] args) {System.out.println("开始");method();System.out.println("结束");}public static void method(){try {int[] arr = {1, 2, 3};System.out.println(arr[3]);}catch (ArrayIndexOutOfBoundsException e){System.out.println("你输⼊的索引有误");e.printStackTrace();System.out.println("---------");System.out.println(e.getMessage());System.out.println("--------------");System.out.println(e.toString());}}}编译时异常和运⾏时异常的区别Java中的异常被分为两⼤类:编译时异常和运⾏时异常,也被称为受检异常和⾮受检异常所有的RuntimeException类及其⼦类被称为运⾏时异常,其他的异常都是编译时异常编译时异常:必须显⽰处理,否则程序就会发⽣错误,⽆法通过编译运⾏时异常:⽆需显⽰处理,也可以和编译时异常⼀样处理throws通过try...catch...可以对异常进⾏处理,但是并不是所有的情况我们都有权限进⾏异常的处理,也就是说,有些时候可能出现的异常时我们处理不了的,怎么办?因此Java提供了throws的处理⽅案throws 异常类名;注:这个格式时跟在⽅法的括号后⾯的编译时异常必须要进⾏处理,两种处理⽅案:try...catch...或者throws,如果采⽤throws这种⽅案,将来谁调⽤谁处理运⾏时异常可以不处理,出现问题后,需要我们回来修改代码public class Demo2 {public static void main(String[] args) {try {method();} catch (ParseException e) {e.printStackTrace();}}public static void method() throws ParseException {String date = "2020-06-23";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date parse = sdf.parse(date);System.out.println(parse);}}⾃定义异常Public class异常类名extends Exception{⽆参构造有参构造}throws和throw的区别throws:⽤在⽅法声明后⾯,跟的是异常类名表⽰抛出异常,由该⽅法的调⽤者来处理表⽰出现异常的⼀种可能性,并不⼀定会发⽣这些异常throw:⽤在⽅法体内,跟的是异常对象名表⽰抛出异常,由⽅法体内的语句处理执⾏throw⼀定抛出了某种异常1//⾃定义异常2public class ScoreException extends Exception{3public ScoreException(){}4public ScoreException(String message){5super(message);6 }7 }8//异常使⽤类9public class Teacher {10public void scoreTest(int score) throws ScoreException {11if(score < 0 || score>100){12throw new ScoreException("您输⼊的分数有误,请重新输⼊");13 }else{14 System.out.println("输⼊的分数正常");15 }16 }17 }18//异常测试类19public class ScoreExceptionTest {20public static void main(String[] args) {21 Scanner sc = new Scanner(System.in);22 System.out.println("请输⼊成绩:");23int score = sc.nextInt();24 Teacher teacher = new Teacher();25try {26 teacher.scoreTest(score);27 } catch (ScoreException e) {28 e.printStackTrace();29 }30 }31 }。

Java中的异常和处理详解

Java中的异常和处理详解

Java中的异常和处理详解Java 中的异常和处理详解原⽂出处:简介程序运⾏时,发⽣的不被期望的事件,它阻⽌了程序按照程序员的预期正常执⾏,这就是异常。

异常发⽣时,是任程序⾃⽣⾃灭,⽴刻退出终⽌,还是输出错误给⽤户?或者⽤C语⾔风格:⽤函数返回值作为执⾏状态?。

Java提供了更加优秀的解决办法:异常处理机制。

异常处理机制能让程序在异常发⽣时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最⼤可能恢复正常并继续执⾏,且保持代码的清晰。

Java中的异常可以是函数中的语句执⾏时引发的,也可以是程序员通过throw 语句⼿动抛出的,只要在Java程序中产⽣了异常,就会⽤⼀个对应类型的异常对象来封装异常,JRE就会试图寻找异常处理程序来处理异常。

Throwable类是Java异常类型的顶层⽗类,⼀个对象只有是 Throwable 类的(直接或者间接)实例,他才是⼀个异常对象,才能被异常处理机制识别。

JDK中内建了⼀些常⽤的异常类,我们也可以⾃定义异常。

Java异常的分类和类结构图Java标准库内建了⼀些通⽤的异常,这些类以Throwable为顶层⽗类。

Throwable⼜派⽣出Error类和Exception类。

错误:Error类以及他的⼦类的实例,代表了JVM本⾝的错误。

错误不能被程序员通过代码处理,Error很少出现。

因此,程序员应该关注Exception为⽗类的分⽀下的各种异常类。

异常:Exception以及他的⼦类,代表程序运⾏时发送的各种不期望发⽣的事件。

可以被Java异常处理机制使⽤,是异常处理的核⼼。

总体上我们根据Javac对异常的处理要求,将异常类分为2类。

⾮检查异常(unckecked exception):Error 和 RuntimeException 以及他们的⼦类。

javac在编译时,不会提⽰和发现这样的异常,不要求在程序处理这些异常。

所以如果愿意,我们可以编写代码处理(使⽤try…catch…finally)这样的异常,也可以不处理。

Java中自定义异常

Java中自定义异常

Java中自定义异常Java 语言要求java 程序中(无论是谁写的代码),所有抛出(throw )的异常都必须是从Throwable 派生而来。

当然,实际的Java 编程中,由于JDK 平台已经为我们设计好了非常丰富和完整的异常对象分类模型。

因此,java 程序员一般是不需要再重新定义自己的异常对象。

而且即便是需要扩展自定义的异常对象,也往往会从Exception 派生而来。

所以,对于java 程序员而言,它一般只需要在它的顶级函数中catch(Exception ex) 就可以捕获出所有的异常对象。

所有异常对象的根基类是Throwable ,Throwable 从Object直接继承而来(这是java 系统所强制要求的),并且它实现了Serializable 接口(这为所有的异常对象都能够轻松跨越Java 组件系统做好了最充分的物质准备)。

从Throwable 直接派生出的异常类有Exception 和Error 。

Exception 是java 程序员所最熟悉的,它一般代表了真正实际意义上的异常对象的根基类。

也即是说,Exception 和从它派生而来的所有异常都是应用程序能够catch 到的,并且可以进行异常错误恢复处理的异常类型。

而Error 则表示Java 系统中出现了一个非常严重的异常错误,并且这个错误可能是应用程序所不能恢复的,例如LinkageError ,或ThreadDeath 等。

首先还是看一个例子吧!代码如下:import java.io.*;public class Trans {public static void main(String[] args) {try {BufferedReader rd = null;Writer wr = null;try {File srcFile = new File((args[0]));File dstFile = new File((args[1]));rd = new BufferedReader(new InputStreamReader(new FileInputStream(srcFile), args[2]));Wr = new OutputStreamWriter(new FileOutputStream(dstFile),args[3]);// 注意下面这条语句,它有什么问题吗?if (rd == null || wr == null) {throw new Exception("error! test!");}while (true) {String sLine = rd.readLine();if (sLine == null)break;wr.write(sLine);wr.write("\r\n");}} finally {wr.flush();wr.close();rd.close();}} catch (IOException ex) {ex.printStackTrace();}}}熟悉java 语言的程序员朋友们,你们认为上面的程序有什么问题吗?编译能通过吗?如果不能,那么原因又是为何呢?好了,有了自己的分析和预期之后,不妨亲自动手编译一下上面的小程序,呵呵!结果确实如您所料?是的,的确是编译时报错了,错误信息如下:E:\Trans.java:20: unreported exception ng.Exception; must be caught or declared to be thrownif (rd == null || wr == null) throw new Exception("error! test!");1 error上面这种编译错误信息,相信Java 程序员肯定见过(可能还是屡见不鲜!)!相信老练一些的Java 程序员一定非常清楚上述编译出错的原因。

java异常的简单原理和应用

java异常的简单原理和应用

Java异常的简单原理和应用异常的概述异常是指Java程序在运行时遇到的错误或意外情况。

Java提供了异常处理机制来帮助程序员优雅地处理这些异常情况。

异常处理是Java程序设计中非常重要的一部分,合理处理异常可以提高程序的可靠性和容错性。

异常的分类Java中的异常主要分为两类:检查性异常(Checked Exception)和非检查性异常(Unchecked Exception)。

1.检查性异常:是指Java编译器在编译时会强制要求程序必须对这类异常进行处理或声明抛出。

例如IOException和SQLException等。

处理检查性异常通常使用try...catch语句来捕获异常并进行处理,或者使用throws 关键字声明方法可能会抛出异常。

2.非检查性异常:也称为运行时异常(Runtime Exception),它们不需要进行捕获或声明,只有在运行时出现才会抛出。

例如NullPointerException和ArrayIndexOutOfBoundsException等。

Java编译器不会强制要求对这类异常进行处理,但良好的程序设计仍然应该对可能抛出的异常进行处理。

异常的原理异常的原理主要基于Java的异常处理机制。

在Java中,异常是通过创建异常对象并抛出(throw)来实现的。

当发生异常时,程序会中断当前的执行流程,转而执行异常处理的代码。

异常处理可以是局部的(在方法内部处理异常),或者是全局的(交由上层调用方法处理)。

异常的应用异常处理在Java开发中应用广泛,可以确保程序在面临错误或意外情况时能够继续执行下去,而不会导致程序崩溃或产生不可预料的结果。

下面是一些常见的异常处理应用场景:•输入错误处理:当用户输入不符合要求时,程序可以抛出自定义异常来提醒用户输入错误,并捕获这个异常进行相关处理。

```java try { // 获取用户输入 int age = Integer.parseInt(scanner.nextLine());// 判断年龄是否符合要求if (age < 0 || age > 120) {throw new InvalidAgeException(\。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档