java异常65682
- 格式:ppt
- 大小:872.00 KB
- 文档页数:19
java 异常处理方法(原创实用版3篇)目录(篇1)I.异常处理概述A.异常的概念B.异常处理的重要性C.Java 异常处理机制II.Java 异常处理方法A.异常分类B.异常处理语句1.try-catch 语句2.try-catch-finally 语句3.throw 语句4.throws 语句C.自定义异常正文(篇1)Java 异常处理是 Java 编程中非常重要的一部分,它可以帮助开发人员更好地处理程序中的错误和异常情况。
在 Java 中,异常可以分为运行时异常和编译时异常。
运行时异常是指在程序运行时可能发生的异常,例如 NumberFormatException 和 ArrayIndexOutOfBoundsException 等。
编译时异常是指在编译时就可以发现的错误,例如空指针异常和类型转换异常等。
Java 提供了多种异常处理方法,其中最常用的是 try-catch 语句。
try-catch 语句用于捕获和处理 try 代码块中可能出现的异常,如果在try 代码块中出现异常,则会跳转到 catch 代码块中处理该异常。
try-catch 语句的语法如下:```kotlintry {// 可能抛出异常的代码块} catch (ExceptionType1 e1) {// 处理 ExceptionType1 类型的异常} catch (ExceptionType2 e2) {// 处理 ExceptionType2 类型的异常} finally {// finally 代码块中的代码会在 try 或者 catch 执行完毕后执行}```除了 try-catch 语句之外,Java 还提供了 try-catch-finally 语句和 throw 语句。
try-catch-finally 语句不仅可以捕获和处理异常,还可以确保在异常发生后执行一些清理操作。
throw 语句可以抛出任何继承自 Exception 类或其子类的异常,例如 RuntimeException 和CloneNotSupportedException 等。
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解决异常2字节的UTF-8序列的字节2⽆效的问题java 解决异常 2 字节的 UTF-8 序列的字节 2 ⽆效的问题最近做项⽬,遇到异常 2 字节的 UTF-8 序列的字节 2 ⽆效的问题,上⽹找了下资料,这⾥记录下解决⽅法,有遇到同样问题的⼤家,可以看下详细异常:⼗⼆⽉ 08, 2015 7:16:55 下午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet [jsp] in context with path [/test] threw exception [org.apache.jasper.JasperException: XML parsing error on file org.apache.tomcat.util.scan.MergedWebXml] with root cause .apache.xerces.internal.impl.io.MalformedByteSequenceException: 2 字节的 UTF-8 序列的字节 2 ⽆效。
at .apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:687)at .apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:372)at .apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1753)at .apache.xerces.internal.impl.XMLEntityScanner.peekChar(XMLEntityScanner.java:497)at .apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)at .apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)at .apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117)at .apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)at .apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)at .apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)at .apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)at .apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)at .apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347)at org.apache.jasper.xmlparser.ParserUtils.parseXMLDocument(ParserUtils.java:96)at piler.JspConfig.processWebDotXml(JspConfig.java:83)at piler.JspConfig.init(JspConfig.java:231)at piler.JspConfig.findJspProperty(JspConfig.java:290)at piler.generateJava(Compiler.java:113)at pile(Compiler.java:365)at pile(Compiler.java:345)at pile(Compiler.java:332)at pile(JspCompilationContext.java:594)at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:342)at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)at org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter.doFilter(StrutsExecuteFilter.java:90)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:91)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)at com.huaqin.dmt.filter.Acl.doFilter(Acl.java:251)at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)at com.huaqin.dmt.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:38)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:550)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:380)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)at .JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at ng.Thread.run(Thread.java:744)解决⽅法:在tomcat的bin⽬录下有⽂件catalina.bat找到这⾏:set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%在它上⼀⾏加⼊:set JAVA_OPTS=-server -Dfile.encoding=utf-8感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!。
Java常见异常(RuntimeException)详细介绍并总结本⽂重在Java中异常机制的⼀些概念。
写本⽂的⽬的在于⽅便我很长时间后若是忘了这些东西可以通过这篇⽂章迅速回忆起来。
1. 异常机制1.1 异常机制是指当程序出现错误后,程序如何处理。
具体来说,异常机制提供了程序退出的安全通道。
当出现错误后,程序执⾏的流程发⽣改变,程序的控制权转移到异常处理器。
1.2 传统的处理异常的办法是,函数返回⼀个特殊的结果来表⽰出现异常(通常这个特殊结果是⼤家约定俗称的),调⽤该函数的程序负责检查并分析函数返回的结果。
这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在⼀起;由调⽤函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。
1.3 异常处理的流程1.3.1 遇到错误,⽅法⽴即结束,并不返回⼀个值;同时,抛出⼀个异常对象1.3.2 调⽤该⽅法的程序也不会继续执⾏下去,⽽是搜索⼀个可以处理该异常的异常处理器,并执⾏其中的代码2 异常的分类2.1 异常的分类2.1.1 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。
2.1.2 Error和RuntimeException及其⼦类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。
2.2 每个类型的异常的特点2.2.1 Error体系 Error类体系描述了Java运⾏系统中的内部错误以及资源耗尽的情形。
应⽤程序不应该抛出这种类型的对象(⼀般是由虚拟机抛出)。
如果出现这种错误,除了尽⼒使程序安全退出外,在其他⽅⾯是⽆能为⼒的。
java异常及解决方法1:.BindException:Address already in use解决方法在网络编程中,特别是在短时间内new的网络连接太多,经常出现.BindException:Address already in use: JVM_Bind的异常,网络有很多介绍此异常的,通常都是在说是要使用的端口被别的程序已经使用,但有时并不是这个原因,通过仔细查找,找到一些很好的资料,在此将其一一记录下来。
短时间内new socket操作过多而socket.close()操作并不能立即释放绑定的端口而是把端口设置为TIME_WAIT状态过段时间(默认240s)才释放(用netstat-na可以看到)最后系统资源耗尽(windows上是耗尽了pool of ephemeral ports这段区间在1024-5000之间)Socket Remember that TCP guarantees all data transmitted will be delivered,if at all possible.When you close a socket,the server goes into aTIME_WAIT state,just to be really really sure that all the data hasgone through.When a socket is closed,both sides agree by sending messages to each other that they will send no more data.This,itseemed to me was good enough,and after the handshaking is done,the socket should be closed.The problem is two-fold.First,there is no2:.BindException:Address already in use:connect的问题大概原因是短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口,而是把端口设置为TIME_WAIT状态,过段时间(默认240s)才释放,(用netstat-na可以看到),最后系统资源耗尽(windows上是耗尽了pool of ephemeral ports,这段区间在1024-5000之间;)避免出现这一问题的方法有两个,一个是调高你的web服务器的最大连接线程数,调到1024,2048都还凑合,以resin 为例,修改resin.conf中的thread-pool.thread_max,如果你采用apache连resin的架构,别忘了再调整apache;另一个是修改运行web服务器的机器的操作系统网络配置,把time wait的时间调低一些,比如30s。
Java异常详解——⼀篇⽂章搞定Java异常⽬录1. 异常的体系结构定义:异常就是有异于常态,和正常情况不⼀样,有错误出现。
在java中,将程序执⾏过程中的不正常的情况称之为异常,开发过程中的语法错误和逻辑错误不是异常,发⽣异常时java会阻⽌当前⽅法或作⽤域的情况。
异常的体系结构Throwable:是java中所有异常和错误的超类,其两个⼦类为 Error(错误) 和 Exception(异常)Error:是程序中⽆法处理的错误,表⽰运⾏应⽤程序中出现了严重的错误。
此类错误⼀般表⽰代码运⾏时JVM出现问题。
通常有Virtual MachineError(虚拟机运⾏错误)、NoClassDefFoundError(类定义错误)等。
⽐如说当jvm耗完可⽤内存时,将出现OutOfMemoryError。
此类错误发⽣时,JVM将终⽌线程。
⾮代码性错误。
因此,当此类错误发⽣时,应⽤不应该去处理此类错误。
Exception:是程序本⾝可以捕获并且可以处理的异常。
其中可分为运⾏时异常(RuntimeException)和⾮运⾏时异常,也叫做受检异常运⾏时异常(不受检异常): RuntimeException类极其⼦类表⽰JVM在运⾏期间可能出现的错误。
编译器不会检查此类异常,并且不要求处理异常,⽐如⽤空值对象的引⽤(NullPointerException)、数组下标越界(ArrayIndexOutBoundException)。
此类异常属于不可查异常,⼀般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可以不处理。
⾮运⾏时异常(受检异常): Exception中除RuntimeException极其⼦类之外的异常。
编译器会检查此类异常,如果程序中出现此类异常,⽐如说IOException,必须对该异常进⾏处理,要么使⽤try-catch捕获,要么使⽤throws语句抛出,否则编译不通过。
从程序执⾏的过程来看编译时异常和运⾏时异常编译时异常:程序在编译时发⽣的异常(javac 源⽂件名.java)运⾏时异常: 程序在运⾏时发⽣的异常(java 字节码⽂件名)2. 常见的异常2.1. 运⾏时异常NullPointerException (空指针异常):指针指向的对象为空(null)ArrayIndexOutOfBoundException (数组⾓标越界异常) StringIndexOutOfBoundException (字符串越界异常) ...ClassCastException (类型转换异常)2.2. 编译时异常 (编译时异常必须进⾏处理否则⽆法运⾏)IOExceptionFileNotFoundExceptionClassNotFoundException2.3. 常见异常的运⾏Demopackage monException;import java.util.Scanner;public class CommonEx {static void ArithmeticExceptionDemo(){int a = 10;int b = 0;int c = a / b;/*Exception in thread "main" ng.ArithmeticException: / by zeroat com.broky.exception.ArithmeticEx.main(ArithmeticEx.java:7)*/}static void ClassCastExceptionDemo(){Object obj = new Double(1);String str = (String)obj;/*Exception in thread "main" ng.ClassCastException: class ng.Double cannot be cast to class ng.String (ng.Double a nd ng.String are in module java.base of loader 'bootstrap')at com.broky.exception.ClassCastEx.main(ClassCastEx.java:7)*/}static void InputMismatchExceptionDemo(){Scanner scan = new Scanner(System.in);int num = scan.nextInt();System.out.println(num);/*asdException in thread "main" java.util.InputMismatchExceptionat java.base/java.util.Scanner.throwFor(Scanner.java:939)at java.base/java.util.Scanner.next(Scanner.java:1594)at java.base/java.util.Scanner.nextInt(Scanner.java:2258)at java.base/java.util.Scanner.nextInt(Scanner.java:2212)at com.broky.exception.InputMismatchEx.main(InputMismatchEx.java:8)*/}static void NullPointerExceptionDemo(){int[] arr = null;System.out.println(arr[3]);/*Exception in thread "main" ng.NullPointerException: Cannot load from int array because "arr" is nullat com.broky.exception.NullPointerEx.main(NullPointerEx.java:6)*/}static void NumberFormatExceptionDemo(){String str = "abc";int a = Integer.parseInt(str);/*Exception in thread "main" ng.NumberFormatException: For input string: "abc"at java.base/ng.NumberFormatException.forInputString(NumberFormatException.java:67)at java.base/ng.Integer.parseInt(Integer.java:660)at java.base/ng.Integer.parseInt(Integer.java:778)at com.broky.exception.NumberMismatchEx.main(NumberMismatchEx.java:6)*/}static void ArrayIndexOutOfBoundExceptionDemo(){int[] arr = new int[3];System.out.println(arr[3]);/*Exception in thread "main" ng.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3at com.broky.exception.XIndexOutOfBoundEx.main(XIndexOutOfBoundEx.java:6)*/String str = "abc";System.out.println(str.charAt(3));/*Exception in thread "main" ng.StringIndexOutOfBoundsException: String index out of range: 3at java.base/ng.StringLatin1.charAt(StringLatin1.java:48)at java.base/ng.String.charAt(String.java:711)at com.broky.exception.XIndexOutOfBoundEx.main(XIndexOutOfBoundEx.java:11)*/}public static void main(String[] args) {ArrayIndexOutOfBoundExceptionDemo();}}3. 异常的抓抛模型原理异常的抛出:如果程序在运⾏过程中执⾏某段代码时发⽣了异常,那么系统(JVM)将会根据异常的类型,在异常代码处创建对应的异常类型的对象并抛出,抛出给程序的调⽤者。
java 异常处理方法(实用版4篇)目录(篇1)I.引言A.介绍Java异常处理的重要性B.本文将介绍三种常见的Java异常处理方法II.异常处理方法A.异常分类1.未检查异常2.检查异常3.受检异常B.异常处理流程1.抛出异常2.捕获异常3.处理异常C.异常处理技巧1.使用try-catch语句2.使用throws关键字3.使用throw语句正文(篇1)Java异常处理是Java编程中非常重要的一部分,它可以帮助开发人员更好地处理程序中的错误和异常情况。
在Java中,开发人员可以使用三种常见的异常处理方法:未检查异常、检查异常和受检异常。
A.未检查异常未检查异常也称为运行时异常,它们通常是由于程序中的错误或意外情况引起的。
开发人员可以使用throw语句来抛出未检查异常。
例如,当用户输入无效的数据时,可以使用throw语句抛出一个运行时异常。
B.检查异常检查异常也称为checked exception,它们需要在方法声明中显式地声明。
检查异常通常用于表示程序中的错误或异常情况,需要在编译时进行检查。
例如,当读取文件时,可能会发生IOException,需要在方法声明中声明该异常。
C.受检异常受检异常也称为内置异常,它们是Java内置的异常类型,例如NullPointerException和ArrayIndexOutOfBoundsException。
目录(篇2)1.引言2.Java异常处理简介3.Java异常分类及用途4.异常处理流程及步骤5.异常处理优缺点6.总结正文(篇2)一、引言Java是一种非常流行的编程语言,广泛应用于软件开发领域。
Java 程序员常常会遇到各种各样的问题,如编译错误、运行时错误等。
为了解决这些问题,Java提供了异常处理机制。
异常处理可以帮助程序员在程序中处理错误和异常情况,从而提高程序的稳定性和可靠性。
二、Java异常处理简介Java异常处理包括捕获和处理异常。
当程序出现错误或异常情况时,Java会自动抛出异常,程序员可以使用try-catch语句块来捕获和处理这些异常。
Java——异常(Exception)A.1. 异常分类所有异常都是由Throwable继承⽽来,但在下⼀层⽴即分解为两个分⽀:Error和Exception Error异常:该层次异常描述了系统运⾏时内部错误和资源耗尽错误。
应⽤程序不该抛出这种类型的对象,如果出现这种错误,除了通告给⽤户,并尽⼒使程序安全推出,再也⽆能为了。
这种情况很少出现。
Exception异常:该层次异常⼜分解为两个分⽀,⼀个派⽣于RuntimeException;另⼀个分⽀包含其他异常。
划分为两个分⽀的规则是:由程序错误导致的异常属于RuntimeException;⽽程序本⾝没问题,但是由于像I/O错误这类问题导致的异常属于其他异常。
Java语⾔规范将派⽣于Error类或RuntimeException类的所有异常称为⾮受(unchecked)查异常,所有其他的异常称为受查(checked)异常。
2. 声明受查异常下⾯四种情况应该抛出异常:1. 调⽤⼀个抛出受查异常的⽅法,例如,FileInputStream构造器。
2. 程序运⾏过程中发现错误,并且利⽤throw语句抛出⼀个受查异常。
3. 程序出现错误。
4. java虚拟机的运⾏时库出现的内部错误。
如果出现前两种情况之⼀,则必须告诉调⽤这个⽅法的程序员有可能抛出异常。
ss对于那些可能被别⼈使⽤的java⽅法,应该根域异常规范,在⽅法的⾸部声明这个⽅法可能抛出的异常。
如果有可能抛出多个异常,应该逗号分开例如:throws FileNotFoundException,EOFException但是不需要声明Error错误,任何程序都有抛出那些异常的潜能,⽽我们对其没有任何控制能⼒。
同样也不该声明从RuntimeException继承的那些⾮受查异常。
警告:如果在⼦类中覆盖了超类的⼀个⽅法,⼦类⽅法中声明的受查异常不能⽐超类⽅法中声明的异常更通⽤(也就是说,⼦类⽅法中可以抛出更特定的异常,或者根本不抛出任何异常)。
java的异常处理:总结为五个关键字和一个图trycatchfinallythrowthrows一个图如下。
(异常的继承图)异常(Exception)也叫例外。
在Java编程语言中,异常就是程序在运行过程中由于硬件设备问题、软件设计错误、缺陷等导致的程序错误。
在软件开发过程中,很多情况都将导致异常的产生,例如:(1) 想打开的文件不存在;(2) 网络连接中断;(3) 操作数超出预定范围;(4) 正在装载的类文件丢失;(5) 访问的数据库打不开可见,在程序中产生异常的现象是非常普遍的。
在Java编程语言中,对异常的处理有非常完备的机制。
异常本身作为一个对象,产生异常就是产生一个异常对象。
这个对象可能由应用程序本身产生,也可能由Java 虚拟机产生,这取决于产生异常的类型。
该异常对象中包括了异常事件的类型以及发生异常时应用程序目前的状态和调用过程。
JAVA的异常处理机制:在Java 程序的执行过程中,如果出现了异常事件,就会生成一个异常对象。
这个对象可能是由正在运行的方法生成,也可能由Java虚拟机生成,其中包含一些信息指明异常事件的类型以及当异常发生时程序的运行状态等。
Java语言提供两种处理异常的机制:(1)捕获异常在Java程序运行过程中系统得到一个异常对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。
找到能够处理这种类型异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)异常。
这是一种积极的异常处理机制。
如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
(2)声明抛弃异常当Java程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃(throws)异常。
注意:对于非运行时异常,程序中必须要作处理,或者捕获,或者声明抛弃;而对于运行时异常,程序中则可不处理。