java异常处理例题代码教学文稿
第05章 异常处理
5.5 自定义异常类
例5.6 自定义异常类.
class OverflowException extends Exception //自定义异常类 { public void printMsg() { System.out.println("exception: "+this.getMessage()); this.printStackTrace(); System.exit(0); } } public class Try7 { public void calc(byte k) throws OverflowException //抛出异常
5.1.1 错误与异常
致命性的错误:如果程序进入了死循环,或递归无法 结束,或内存溢出,这些现象称为错误 错误.错误只能在 错误 编程阶段解决,运行时程序本身无法解决,只能依靠 其它程序干预,否则会一直处于非正常状态. 非致命性的异常:如果运算时除数为0,或操作数超出 0 数据范围,或打开一个文件时发现文件不存在,或欲 装入的类文件丢失,或网络连接中断等,这些现象称 为异常 异常.在源程序中加入异常处理代码,当程序运行 异常 中出现异常时,由异常处理代码调整程序运行方向, 使程序仍可继续运行直至正常结束.
《Java2程序设计实用教程》叶核亚
1.异常的产生
例5.1 产生数组下标越界异常和除数为0异常.
public class Try1 { public static void main (String args[]) { int i=0; int a[] = {5,6,7,8}; for(i=0;i<5;i++) System.out.println(" a["+i+"]="+a[i]); System.out.print("3/0="+(3/0)); } }
Java异常(Exception)处理以及常见异常总结
Java异常(Exception)处理以及常见异常总结⽬录前⾔异常简介异常类型总结前⾔很多事件并⾮总是按照⼈们⾃⼰设计意愿顺利发展的,经常出现这样那样的异常情况。
例如:你计划周末郊游,计划从家⾥出发→到达⽬的→游泳→烧烤→回家。
但天有不测风云,当你准备烧烤时候突然天降⼤⾬,只能终⽌郊游提前回家。
“天降⼤⾬”是⼀种异常情况,你的计划应该考虑到这样的情况,并且应该有处理这种异常的预案。
计算机程序的编写也需要考虑处理这些异常情况。
异常(exception)是在运⾏程序时产⽣的⼀种异常情况,已经成为了衡量⼀门语⾔是否成熟的标准之⼀。
⽬前的主流编程语⾔java也提供了异常处理机制。
异常简介Java中的异常⼜称为例外,是⼀个在程序执⾏期间发⽣的事件,它中断正在执⾏程序的正常指令流。
为了能够及时有效地处理程序中的运⾏错误,必须使⽤异常类,这可以让程序具有极好的容错性且更加健壮。
在 Java 中⼀个异常的产⽣,主要有如下三种原因:1. Java 内部错误发⽣异常,Java 虚拟机产⽣的异常。
2. 编写的程序代码中的错误所产⽣的异常,例如空指针异常、数组越界异常等。
3. 通过 throw 语句⼿动⽣成的异常,⼀般⽤来告知该⽅法的调⽤者⼀些必要信息。
Java 通过⾯向对象的⽅法来处理异常。
在⼀个⽅法的运⾏过程中,如果发⽣了异常,则这个⽅法会产⽣代表该异常的⼀个对象,并把它交给运⾏时的系统,运⾏时系统寻找相应的代码来处理这⼀异常。
我们把⽣成异常对象,并把它提交给运⾏时系统的过程称为拋出(throw)异常。
运⾏时系统在⽅法的调⽤栈中查找,直到找到能够处理该类型异常的对象,这⼀个过程称为捕获(catch)异常。
例 1为了更好地理解什么是异常,下⾯来看⼀段⾮常简单的 Java 程序。
下⾯的⽰例代码实现了允许⽤户输⼊ 1~3 以内的整数,其他情况提⽰输⼊错误。
package io.renren.config;import java.util.Scanner;/*** Created by LiYangYong*/public class TestException {public static void main(String[] args) {System.out.println("请输⼊您的选择:(1~3 之间的整数)");Scanner input = new Scanner(System.in);int num = input.nextInt();switch (num) {case 1:System.out.println("one");break;case 2:System.out.println("two");break;case 3:System.out.println("three");break;default:System.out.println("error");break;}}}正常情况下,⽤户会按照系统的提⽰输⼊ 1~3 之间的数字。
java异常处理
捕获异常,但并不处理
通过语句System.exit()退出应用程序
3、异常的类型
异常的层次树结构
异常类必须继承类ng.Throwable
异常可以分为可检查的(checked)异常和不可检查(unchecked)的异常
4、Throwable类的四个构造函数
Throwable()
String getLocalizedMessage()
String getMessage()
void printStackTrace()
4、常见的几种异常类型
- ArithmeticException:算术异常
–ArrayStoreException:数组存储类型错误
–ClassCastException:变量类型设置错误
. . . //不管是否发生异常,最后都应处理的程序块}
6、异常的抛出
<返回类型> <方法签名> throws <异常列表>
•在方法体中可以通过throw语句抛出异常
throw <异常类的对象>
•如果抛出的异常对象属于可检查的异常,则必须与方法的异常列表中的异常兼容
概念导入(10分钟)
讲解细节(10分钟)
Throwable(String msg)
Throwable(Throwable cause)
Throwable(String msg, Throwable cause)
Throwable类定义了许多与异常处理相关的方法:
Throwable fillInStackTrace()
Throwable getCause()
2.“讲、学、练”相结合:对于需要掌握的相关技术细节,大量采用演示、讲解和练习等方式。使学生在编程实践中加深对概念的理解,熟练掌握相关的技术细节。
实验十一 Java中的异常处理
实验十一Java中的异常处理x=n.nextInt();if(x!=999)sum+=x;}catch(InputMismatchException e){}System.out.println(sum);}}}class TestXin{/*** @param args*/public static void main(String[] args) { // TODO Auto-generated method stubXin n=new Xin();System.out.println(n);}}结果:五、实验总结(对本实验结果进行分析, 实验心得体会及改进意见)5.分析程序的运行结果(1)class A{A(){System.out.println("A structure!");}A(int m){System.out.println("A("+m+")");}}public class B extends A{B(int m){System.out.println("B("+m+")");}public static void main(String[] args) { // TODO Auto-generated method stubnew B(100);}}(2)class A{A(){System.out.println("A structure!");}A(int m){System.out.println("A("+m+")");}}public class B extends A{B(){System.out.println("B structure!");}B(int m){System.out.println("B("+m+")");}public static void main(String[] args) { // TODO Auto-generated method stubnew B(100);}}(3)class A{A(){System.out.println("A structure!");}A(int m){System.out.println("A("+m+")");}}public class B extends A{B(){System.out.println("B structure!");}B(int m){//super(m);System.out.println("B("+m+")");}public static void main(String[] args) { new B(100);}}(4)class A{A(){System.out.println("A structure!");}A(int m){System.out.println("A("+m+")");}}public class B extends A{B(int m){super(m);//System.out.println("B("+m+")");}public static void main(String[] args) { new B(100);} }。
JAVA教程(程序异常处理)(精)
程序异常处理引子O在调试航班体息录入程冲•时.町能会遇到这歼的情爲:应用程斤运行过程中.突然中止,屛棗上出现一丸堆英丈让人不知所培・o崔许多域市.很行ATM机随处可见,取歇非常方使•崔ATM机上取欲必须扶輒一定钓步裝携作.若挨作出会相应的災示传息.指导你下一步地楼作.比如密码输入错谖.ATM机将会显示诗码输入错谋・请重新输入”的消息•如是三次密碣伦入梆有谋.則呑卡没商量.o尢论什么斥因引起的程斤运行不正常.都认为是悝序出现了并常.知识要点。
异常的概念。
常见的异常情况。
异常处理的机制◎利用try catch finally实现异常处理o利用thro灵throws创建用户自定义异常知识学习一异常概念。
异常一血巾把程序运行中可能遇到的错罠分为两类.一类是非致命的.的过某种修正后程号还能键续执行.这类捲谖称为异常.边是一类特殊的运行错误対象. 另一类是致命的.即程序遇到了非常严重的不正常状态,不能简单地恢复轨行,这就是钳渓.叩异常类基类throwablcift生出两个子类:Error类:定义了Java程序运行时出现了灾难性失败的畀常.一股来说java程序不捕获也不拋出^Error的对象(包把动态磁接失败.虛拟机错逞等)•而只处理Except ion类的各子类对Exception类:定义了程序可以捕捉到的异常。
异営分两类:1)条统定义的2)用户定义的;・:・异常处理一对于异常,Java使用一种错误捕获方法进行) 处理,称为异常处理. 1斗处理异常的两种方式-是将异常交田Jam异常处理机制的预设处理方法来处理。
二是利用Java提供的try-cat ch-final ly语句对于㊁能出现的异常作预先处理。
"融辜习一程序运行的错误类型及位置识学习程序ArithmeticException 算术异常整数除法中,如果除数为0,则发生该类井常.Java虛拟机遇到这样的错i昊时会中止程序的执行流程,并新建~个ArithmeticException类的对象.即拋出一个算术运算异常.例如下面的程序将引发ArithmeticException异常:public class Test ArithmeticExceptionfpublic static void main(String args[])(int denominator=0,numerator=20jesult=0;resultanumerator/denominator;〃除数为0,将引发ArithmeticException异席System.out.prlntln(result);知识学习一程序运行的错误类型及位置NullPointerExcept ion异常发生的原因.通常是由于应用程序企图在某个需要的对鮫上使用mil I值。
Java中的异常处理
《Java编程异常处理》PPT课件
24. }
25.}
13
1.//如果只是想把收到的异常再抛出,不必使用显性再抛出,使用
2.//隐性再抛出(比显性再抛出简单,效果是相同的)
3.//对于捕获异常,显性和隐性都必须在方法声明中明确声明
4.//显性再抛出,用throw语句,隐性再抛出方法体中没有任何抛出异常
的语句
5.//产生的异常自动抛出
15. }
16.}
17.
16
18.public class OverWriteException
19.{
20. public static void main(String[] args) throws Exception{
21.
Father f = new Son();
22.
f.myFunction();
meException.其中Exception类的直接或间接子类,除去RuntimException
类的直接或间接子类,称为捕获异常(必须处理的异常),其他的都为未
捕获异常.
Throwable
Error
Exception
......(未捕获异常) RuntimeException ......(捕获异
4.
try{
5.
int [] a = new int[3];
6.
a[8] = 12;
7.
}catch(ArrayIndexOutOfBoundsException ai){
8.
throw ai;//显性抛出异常
9.
}
10. }
11.
12
12. public static void a(){
13.
try{
Java异常处理
该程序段将输出: Array Index out of Bounds
22
不正确用法:
将两个catch块的顺序对调: int a[] = new int[10]; try{
for(int i=0;i<=10;i++) a[i]=i;
}catch(Exception e){ System.out.println("There is an exception");
18
结果分析:
例题的除数为0时返回为0的问题,通过 语句if (d!=0 || n[i]==0)得以改进;
该程序分别在不同的层次对两种异常进 行了处理;
异常处理后的程序保持了良好的健壮性, 体现了“带病工作”的能力;
19
异常处理
异常处理器(exception handler)
try t{ry语句块定义了异常处理器的范围 .c.at.ch语句块捕捉try语句块抛出的异常 t}ryc{atch (ArrayIndexOutOfBoundsException e) { // Code that might generate exceptions } caStcyhs(tTeymp.eo1uitd.1p)ri{ntln(e); }//cHaatcnhdl(eIeOxEcxecpetipotnios nofeT)y{pe1 } caStcyhs(tTeymp.eo2uitd.2p)ri{ntln(e); }// Handle exceptions of Type2 } catch(Type3 id3) { // Handle exceptions of Type3 } // etc ...
20
异常处理
catch 语句的顺序
java异常解决方案
java异常解决方案一、Hibernate(1)org.hibernate.TransientObjectException: object references an unsaved transient instance....(2)org.springframework.orm.hibernate3.HibernateSystemException: Don't change the reference to a collection withcascade="all-delete-orphan": entity.Klass.students; nested exception is org.hibernate.HibernateException: Don't change the reference to a collection with cascade="all-delete-orphan": entity.Klass.students二、Tomcat(1)tomcat启动时报错:java.io.EOFException(2)tomcat内存溢出三、JAVA基本(1)ng.ClassCastException:(2)ng.UnsupportedClassVersionError: Bad version number in .class file四、JSP(1)javax.servlet.jsp.JspException:(2)org.apache.jasper.JasperException: Unable to compile class for JSP:(3)Servlet.service() for servlet jsp threw exceptionng.Error: Unresolved compilation problem:(4)ng.Error: Unresolved compilation problem:The method contextInitialized(ServletContextEvent) of type CreateDataSourceTableListener must override a superclass method(5)Servlet.service() for servlet jsp threw exception ng.Error: Unresolved compilation problem:The method setCharacterEncoding(String) is undefined for the type ServletResponse五、SSH整合(1)ng.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener(2)Exception starting filter struts2 Class:com.opensymphony.xwork2.spring.SpringObjectFactory File: SpringObjectFactory.java Method: getClassInstance(3)(7)(8)org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'biz' defined in class path... (4)Exception starting filter struts2The action name cannot be the same as the action suffix [Action] - Class: org.apache.struts2.convention.SEOActionNameBuilder (5)avax.management.RuntimeErrorException: Error thrown in preDeregister methodCaused by: ng.NoClassDefFoundError:org/apache/struts2/util/ObjectFactoryDestroyable(6)Unable to load configuration. - bean -jar:file:/D:/Tomcat/tomcat/apache-tomcat-6.0.30/webapps/tes t/WEB-INF/lib/struts2-core-2.2.3.1.jar!/struts-default.xml: 29:72六、Struts(1)ng.NoSuchMethodException:action.StudentAction.getAllStudent()(2)Caused by: ng.ClassCastException:org.apache.xerces.parsers.XML11Configuration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration (3)No result defined for action and result七、Android(1)There is no android project named 'cm-android'一、Hibernate一(1)org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: er某个对象的某个属性是一个实体,在这个实体没有保存之前就保存这个对象而造成了这个错误。
第7章Java异常处理
try
产生异常对象
异常类型匹配
catch
继续执行
try/catch 块后的代码段
try/catch块
import java.util.Scanner; 输入:2 0 public class Test1 { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.println("请输入两个整数:"); try{ int x=input.nextInt(); int y=input.nextInt(); int result=x/y; System.out.println("相除的结果为:"+result); System.out.println("程序结束!"); }catch(ArithmeticException e){ System.out.println("除数不能为0!"); } } 除数不能为0! 控制台输出 }
catch
try/catch 块后的代码段
try/catch块
import java.util.Scanner; 输入:10 2 public class Test1 { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.println("请输入两个整数:"); try{ int x=input.nextInt(); int y=input.nextInt(); int result=x/y; System.out.println("相除的结果为:"+result); System.out.println("程序结束!"); }catch(ArithmeticException e){ System.out.println("除数不能为0!"); } } 相除的结果为5 控制台输出 } 程序结束! 算术异常
Java程序设计第5章异常处理
Exception类从父类 Exception类从父类Throwable那里 类从父类Throwable那里 还继承了若干方法, 还继承了若干方法,其中常用的方 法如下。 法如下。 (1)public String toString () toString ()方法返回描述当前 ()方法返回描述当前 Exception类信息的字符串 Exception类信息的字符串。 类信息的字符串。 (2)public void printStackTrace ()
•Exception类有若干子类,每一个子类代 Exception类有若干子类 类有若干子类, 表了一种特定的运行时错误。 表了一种特定的运行时错误。这些子类 有些是系统事先定义好并包含在Java类 有些是系统事先定义好并包含在Java类 库中的,称为系统定义的运行异常。 库中的,称为系统定义的运行异常。 •系统定义的运行异常通常对应着系统运 行错误。 行错误。由于这种错误可能导致操作系 统错误甚至是整个系统的瘫痪, 统错误甚至是整个系统的瘫痪,所以需 要定义异常类来特别处理。 要定义异常类来特别处理。下表中列出 了若干常见的系统定义异常。 了若干常见的系统定义异常。
–系统自动抛出异常
所有系统定义的运行异常都可以 由系统自动抛出。下面的例7.3程 由系统自动抛出。下面的例7.3程 序将测试数组下标越界时出现的 异常。 异常。通过这个例子可以了解如 何使用系统定义的运行异常。 何使用系统定义的运行异常。
系统自动抛出异常。 【例5.3】系统自动抛出异常。
注意: 注意:
用户自定义异常用来处理程序中 可能产生的逻辑错误, 可能产生的逻辑错误,使得这种 错误能够被系统及时识别并处理, 错误能够被系统及时识别并处理, 而不致扩散产生更大的影响, 而不致扩散产生更大的影响,从 而使用户程序更为强健,有更好 而使用户程序更为强健, 的容错性能, 的容错性能,并使整个系统更加 安全稳定。 安全稳定。
JavaOO-09异常处理(精)
异常简介
程序运行过程时都可能发生会打断程序正常执行的事件。比如除数为零0、 数组下标越界、文件找不到、内存不足等。 Java中的异常也采用了OO的思想,所有的异常都使用类来描述。程序产生 异常,我们通常称为抛出(throw)异常,此时系统JVM会自动的实例化一个异 常类的对象,对象中保存了具体的异常描述信息。 所有非正常状况的类分为两种,即:Error , Exception. Java异常处理 – 利用抓抛模型处理异常 – 利用面向对象的方法来处理异常
IT Education & Training
捕获异常对象
01 public class Test{ 02 int[] arr=new int[3]; 03 public static void main(String[] args){ 04 new Test().methodOne(); 05 System.out.println("main"); 06 } 07 public void methodOne(){ 08 methodTwo(); 09 System.out.println("One"); 10 } 11 public void methodTwo(){ 12 methodThree(); 13 System.out.println("Two"); 14 } 15 16 17 18 19 20 21 22 23
try{ System.out.println(20/0); }catch(Exception e){ System.out.println(“除数不能为零”); }
IT Education & Training
抓抛模型
Java自定义异常在教学中教与学
浅谈Java自定义异常在教学中的教与学摘要:本文主要阐述java自定义异常为消除错误,编写健壮代码,开发可靠的软件系统,提供重要保障,讨论如何编写自定义异常以及异常抛出、异常捕获、异常处理的规范和原则,并探讨在教学实施中的模式及经验效果。
关键词:异常类;自定义异常;抛出异常;捕获异常中图分类号:tp307在java程序设计语言的基础教学中,异常处理作为独立的一部分知识体系存在。
经过多年的教学研究,发现学生对异常这一部分的掌握程度仅限于对可能产生异常的语句进行捕获,而对异常内部的机制和自定义异常了解得很少,通常只是机械式的使用工具软件执行try-catch-finally语句,进而顺应编写代码的规范,确保程序能够继续执行下去。
对于自定义异常部分,是绝大多数学习者的盲点。
而学习自定义异常是学生掌握整个异常知识脉络的关键内容,学习它能够使异常更加灵活的在应用程序中扮演多变的角色。
1 为什么要出现自定义异常机制?java异常机制为使用者提供大量常用的系统异常,这些系统异常为通用的异常情况而设计,如文件异常,数组越界异常等等,学习和理解起来比较容易。
而在实际的开发中,系统异常不可能在开发工作中面面俱到,总会有些特别的需求出现。
如果在开发过程中遇到任何java提供的异常类都不能描述的异常情况时,就需要自己对其定义。
自定义异常就是为了在实际的软件开发应用中填补这种特殊的需要而设计。
另外,自定义异常与系统异常相比,相对控制性要更高,整体辨识度更高,与系统异常搭配使用,能够更充分的满足业务需求和系统需求。
2 自定义异常的作用java的异常是应对软件程序面临错误的重要解决方式,提供自定义异常能够更好的维护软件程序,会在软件的测试以及调试阶段产生深远影响。
若处理得当,程序将会在一定目标期许范围内平稳运行;若处理不当,程序中囊括的错误假设和不正确逻辑以及不可见的意外,在软件实际的运行中,将会造成无法估量的损失。
异常中出现的信息,对于维护程序的平稳运行意义重大。
异常处理机制范文
异常处理机制范文(一)异常类型在Java中,异常分为可检查异常(checked exception)和不可检查异常(unchecked exception)。
可检查异常是指在编译时必须进行捕获处理的异常,如IOException、SQLException等;不可检查异常是指在编译时不需要进行捕获处理的异常,如NullPointerException、ArrayIndexOutOfBoundsException等。
(二)异常处理程序异常处理程序是在出现异常时执行的代码块,可以对异常进行捕获、处理和恢复。
以下是常用的异常处理程序:1. try-catch语句:通过try块来执行可能发生异常的代码,如果出现异常,则会执行catch块中的代码来处理异常。
2. finally语句:无论是否出现异常,finally块中的代码总会被执行。
通常用于资源的释放或清理操作。
3. try-with-resources语句:用于自动关闭实现了AutoCloseable 接口的资源,比如文件、数据库连接等。
try块结束后,会自动关闭相关资源,无需显式调用close(方法。
4. throw语句:用于手动抛出异常,可以在方法中或代码块中使用throw语句来抛出自定义异常。
(三)异常处理方法1. 捕获异常:通过try-catch语句来捕获异常,避免程序终止运行。
在try块中执行可能抛出异常的代码,如果出现异常,就会被catch块捕获并处理。
2. 抛出异常:当无法处理异常时,可以使用throw语句手动抛出异常,将异常传递给上层调用者或JVM来处理。
在方法内部使用throw语句抛出的异常,需要在方法声明中使用throws关键字声明。
3. 异常链:如果在捕获异常时希望保留原始异常的信息,可以使用异常链来将当前异常与原始异常相关联。
可以通过在catch块中使用throw语句将当前异常封装成新的异常,并将原始异常作为参数传递给新的异常。
java-异常处理
No
Im 第5章 异a 常处g 理 e
5.1 程序错误与处理
5.2 Java的异常处理
3
第3页,共45页。
No
Im 5.1 程序a 错误g 与处理e
5.1.1 程序错误、发现时刻及错误处理原则
5.1.2 面向过程语言与面向对象语言 的错误处理方式比较
5.1.3 Java的错误和异常
4
第4页,共45页。
System.out.println(str.length());
//调用空对象的方法,产生空对象异常
25
第25页,共45页。
No Image
5.2.1 异常类说明
2. RuntimeException 运行异常类
例如:输入数据格式错、除数为0错、 给变量赋予超出其范围的值等。
发现和排除:
Java解释器在运行时能够发现语义错,一旦发现了语义错,
Java将停止程序运行,并给出错误的位置和性质。
6
第6页,共45页。
No Image
5.1.1 程序错误、发现时刻及错误处理原则
3. 逻辑错 —logic error
②运行时不能发现浮点数除法中除数为0的语义错。
System.out.println(""+(3/0.0));
//浮点数除法,除数为0,没有抛出异常,运行结果为Infinity(无穷大)
18
第18页,共45页。
No Image
5.1.3 Java的错误和异常
【例5.2】发现数组下标越界的语义错。
public class Outofbounds
第15页,共45页。
事后处理 异常处理
15
No Image
JAVA-异常处理
JAVA-异常处理1.异常概述1. 异常是运⾏时错误(程序执⾏期间发⽣的事件).2. 异常是从⽅法抛出的,⽅法的调⽤者可以捕获以及处理该异常.3. 异常处理使得程序可以处理运⾏时的错误并且继续通常的执⾏.4. 运⾏时错误: 程序运⾏过程中,若JVM检测出⼀个不可能执⾏的操作.eg.越界下标访问: ArrayIndexOutOfBoundsException5. 异常: JAVA中运⾏时错误会作为异常抛出. 异常为⼀种对象.⼤致模板:try{Code to run;A statement or a method that may throw an exception;More code to run;}catch(type ex){Code to process the exception;}1. 很多库⽅法都会抛出异常,此时throw可省2. ⼀个异常可能是通过try块中的throw语句直接抛出,或者调⽤⼀个可能会抛出异常的⽅法⽽抛出3. 若try块中内容正常执⾏,不会引起异常4. 若try块中内容(⽅法)遇到⼀个异常,其会抛出⼀个异常给它的调⽤者,这个调⽤者的catch处理该异常拋出(throw)异常:⽣成异常对象,并把它提交给运⾏时系统。
捕获(catch)异常:运⾏时系统在⽅法的调⽤栈中查找,直到找到能够处理该类型异常的对象。
2.异常类型Java通过⾯向对象来处理异常,即异常是对象,⽽对象都⽤类来定义。
异常的根类为ng.Throwable异常类的类型:1. 系统错误Error: Java虚拟机抛出,描述内部系统错误.发⽣时:通知⽤户以及尽量稳妥地终⽌程序.2. 异常Exception:描述由程序和外部环境引起的错误.发⽣时:能被程序捕获和处理1. 运⾏时异常(unchecked): RuntimeException类表⽰,程序设计错误。
如 NullPointerException、IndexOutOfBoundsException 等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。
Java异常处理之异常处理机制一:try-catch-finally
Java异常处理之异常处理机制⼀:try-catch-finally⼀、Java 异常处理 编写程序时,要在出现可能出现错误的时候加上检测的代码,如判断分母为0,数据为空,过多的 if-else分⽀导致程序代码加长,臃肿,可读性差,因此采⽤异常处理机制。
Java采⽤的异常处理机制,是将异常处理的程序代码集中在⼀起,与正常的程序代码分开,使得程序简洁、优雅,并易于维护。
⼆、异常处理:抓抛模型 1、抛出 Java 程序的执⾏过程中出现异常,会⽣成⼀个异常类对象,该异常对象将被提交给 Java 运⾏时系统,这个过程称为抛出(throw)异常。
⼀旦抛出对象以后,其后的代码就不再执⾏。
2、捕获、“抓” 可以理解为异常的处理⽅式:① try-catch-finally; ② throws; 3、异常对象的⽣成 (1)由虚拟机⾃动⽣成:程序运⾏过程中,虚拟机检测到程序发⽣了问题,如果在当前代码中没有找到相应的处理程序,就会在后台⾃动创建⼀个对应异常类的实例对象并抛出——⾃动抛出; (2)由开发⼈员⼿动创建:Exception exception = new ClassCastException;——创建好的异常对象不抛出对程序没有任何影响,和创建⼀个普通对象⼀样; 4、处理异常过程 (1)当程序运⾏到某⼀句时,发⽣了异常,那么程序会先停下来; (2)程序会在这句代码处,查看原因,⽣成⼀个合理“异常对象”,然后“抛”出; (3)JVM 会检测这句代码的外围,是否有 try...catch 结构,可以“捕获”它; (4)如果可以捕获,那么程序在处理完异常后,继续下⾯的运⾏,不会崩溃; (5)如果不能捕获,那么会把这个异常继续抛给“上级”,如果“上级”能处理,那么程序从“上级"处理完的代码后⾯继续运⾏; (6)如果上级也不能处理,那么继续往上抛,⼀直到达JVM,那么就“崩溃”; ①如果⼀个⽅法内抛出异常,该异常对象会被抛给调⽤者⽅法中处理。
java异常处理
catch语句的顺序
捕获异常的顺序和不同catch语句的顺序有 关,当捕获到一个异常时,剩下的catch语句 就不再进行匹配。 “匹配”是指catch语句的参数类型和异常 对象的类型完全相同或者为异常对象的父类 型。 在安排catch语句的顺序时,首先应该捕获 最特殊的异常,然后再逐渐一般化。也就是 一般先安排子类,再安排父类。
异常处理
什么是异常(Exception)
异常就是在程序的运行过程中所发生的非正 常事件,它中断指令的正常执行。 Java用异常对象来表示程序执行过程中发生 的异常事件.
异常示例
编译和运行下面的程序: 编译和运行下面的程序: class ExceptionDemo2{ public static void main( String args[ ] ){ int a = 0; System.out.println( 5/a ); } }
import java.io.*; class ExceptionDemo1{ public static void main( String args[ ] ){ FileInputStream fis = new FileInputStream( "text" ); int b; while( (b=fis.read())!=-1 ){ System.out.print( b ); } fis.close( ); } }
异常示例
ng.ArithmeticException: / by zero
at
ExceptionDemo2.main(ExceptionDemo 2.java:4) 有些异常(异常)在编译的时候能够发现, 有些异常(异常)在编译的时候能够发现 ,有些是在 运行的时候发现
课程第9章异常处理教案:第9章、第11章
课程第9章异常处理教案:第9章、第11章课程第9章异常处理教案:第9章、第11章课程教案章节名称第9章异常处理了解异常继承层次及常见系统异常;了解用户定义异常的要求;掌握异常处理try…catch…finally的使用;掌握throw语句和方法头的throws子句的概念差异。
理解委托时间处理机制、相互角色及相互关系;理解事件接口与相应适配器类的关系与使用差异;掌握Frame、Panel等容器的使用;掌握Java常用的布局策略;掌握按钮和两种文本部件的使用和事件处理;了解鼠标和键盘事件的处理。
重点难点:重点:异常处理try…catch…finally的使用;Frame、Panel等容器的使用;Java常用的布局策略;按钮和两种文本部件的使用和事件处理。
难点:throw语句和方法头的`throws子句的概念差异;按钮和两种文本部件的使用和事件处理。
课后作业:P154: 4(1)P200:2(5)作业批改记录:教学后记:教学内容与教学组织设计(100分钟):1.复习上次课内容(2分钟):什么是抽象的类?如何定义接口?接口是如何实现的,有何特点?2.课堂导引(2分钟):引入:防错程序设计一直是软件设计中的重要组成内容,好的软件应能够处理各种错误情形,Java的异常处理机制为提高Java软件的健壮性提供了良好的支持。
3. 教学内容及时间分配( 90 分钟):(1)异常处理(30分钟)①什么是异常?异常指的是程序运行时出现的非正常情况(2分钟)。
②异常的类层次(2分钟)。
③系统定义的异常(2分钟)。
④try…catch…finally的语句格式及其应用(14分钟)。
⑤自定义异常类的设计、应用、抛出异常的过程(10分钟)。
(2)图形用户编程基础(60分钟)① 图形用户界面的核心概念(10分钟):容器、组件、事件处理(事件源、事件、事件监听)。
②容器和布局管理(10分钟):FlowLayout(流式布局) 、BorderLayout(边缘或方位布局)、GridLayout布局、 CardLayout布局的应用举例。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
catch (ArrayIndexOutOfBoundsException e){
System.out.println("命令行中没提供参数!");
}
catch (NumberFormatException e){
int i;
int a[]={1,2,3,4};
for (i=0;i<5;i++){
try{
System.out.print("a["+i+"]/"+i+"="+(a[i]/i));
}
catch(ArrayIndexOutOfBoundsException e){
System.out.print("捕获到了数组下标越界异常");
if(n<0)
throw new IllegalArgumentException("求负数阶乘异常");
double s=1;
for(int i=1;i<=n;i++) s=s*i;
return s;
}
public static void main(String[] args){
try{
int m=Integer.parseInt(arg[0]);
if (num>60)
System.out.println("成绩为:"+num+"及格");
else
System.out.println("成绩为:"+num+"不及格");
}
catch(NullPointerException e){
System.out.println("空指针异常:"+e.toString());
System.out.println("异常:"+e+"被抛出了!");
e.printStackTrace(); //显示异常信息
}
}
}
App9_4.java:求阶乘并捕获可能出现的三种异常。
public class App9_4{
public static double multi(int n){
java异常处理例题代码
App9_1.java:输出一个数组的所有元素,捕获数组下标越界异常和除娄为0异常。
public class App9_1{
public static void main(String args[]){
int i;
int[] a={1,2,3,4};
for(i=0;i<5;i++)
System.out.println(" finally 源自="+i);}
}
System.out.println("继续!!");
}
}
App9_3.java:使用throw语句在方法中抛出异常。
public class App9_3{
public static void main(String args[]){
}
}
App9_5.java:判断数字并捕获可能出现的三种异常。
//App9_5.java使用throws语句在方法之中抛出异常
public class App9_5{
static void check(String str1) throws NullPointerException{ //方法头抛出空指针异常
}
catch(NumberFormatException ex){
System.out.println("输入的参数不是数值类型");
}
catch(Exception e){
System.out.println("命令行中没有提供参数");
}
}
}
App9_6.java:利用IOException的异常处理。
System.out.println("应输入一个整数!");
}
catch (IllegalArgumentException e){
System.out.println("出现的异常是:"+e.toString());
}
finally{
System.out.println("程序运行结束!");
}
}
catch(ArithmeticException e){
System.out.print("异常类名称是:"+e); //显示异常信息
}
catch(Exception e){
System.out.println("捕获"+e.getMessage()+"异常!"); //显示异常信息
}
finally{
if(str1.length()>2){
str1=null;
System.out.println(str1.length()); //空字符串的长度
}
char ch;
for (int i=0;i<str1.length();i++){
ch=str1.charAt(i);
if (!Character.isDigit(ch)) //判断参数中字符是否为数字
throw new NumberFormatException(); //方法中抛出数字格式异常
}
}
public static void main(String args[]) throws Exception{ //抛出异常给系统处理
int num;
try{
check(args[0]);
num=Integer.parseInt(args[0]);
System.out.println(" a["+i+"]="+a[i]);
System.out.println("5/0"+(5/0));
}
}
App9_2.java:使用try-catch-finall语句对程序中的异常进行捕获与处理。
public class App9_2{
public static void main(String args[]){
int a=5,b=0;
try{
if (b==0)
throw new ArithmeticException(); //抛出异常,不是必须的
else
System.out.println(a+"/"+b+"="+a/b); //若不抛出异常,则运行此行
}
catch(ArithmeticException e){
//App9_6.java利用IOException的异常处理
import java.io.*; //加载java.io类库里的所有类
public class App9_6{