- 浏览: 279213 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (133)
- GWT (7)
- IT生活 (9)
- JAVA综合 (38)
- Servlet (5)
- vaadin (2)
- About Eclipse (2)
- StarUML (1)
- Spring (7)
- ibatis (3)
- web (35)
- ExtJs (2)
- Quartz (13)
- Struts (1)
- 学习XML (6)
- io流 (2)
- web应用之压缩 (3)
- Spring MVC (0)
- Velocity (5)
- 静态代码分析工具 (2)
- 观点 (1)
- JUnit (3)
- jQuery (4)
- mysql (2)
- javascript (16)
- linux (4)
- pattern (1)
- java加密技术 (2)
最新评论
-
tan4836128:
确实不行,我的1.8.5,降到1.6.2也不行,楼主的情况很局 ...
Spring调用Quartz定时任务报Couldn't store trigger异常 -
alfusen_xiong:
有没有自动注入的方法可以取代executeInternal() ...
Quartz任务中调用Spring容器中bean及动态调度任务 -
luoxiang183:
换了也不行啊
Spring调用Quartz定时任务报Couldn't store trigger异常 -
liubey:
首先谢谢LZ的文章,其实我想问个问题,既然有心做成工具类,就最 ...
对象和map转换 -
小林夕:
几年前用还行,现在做UML一般都开始使用在线作图工具了,可以了 ...
StarUML简介
异常处理
Java语言的设计从根本上便于我们写出整洁、设计良好的代码;尽管如此,在程序运行中仍可能有各种各样的错误出现。
1 、概念
采用新的异常处理机制
在以往的程序开发过程中,常常采用返回值进行处理。例如,在编写一个方法,可以返回一个状态代码,调用者根据状态代码判断出错与否。若状态代码表示一个错误,则调用这进行相应的处理,或显示一个错误页面或错误信息。通过返回值进行处理的方法是有效的,但是有它的许多不足之处。
1、 程序复杂
2、 可靠性差
3、 返回信息有限
4、 返回代码标准化困难
采用错误代码和异常处理相结合的方式的优越性:
1、 把错误代码与常规代码分开
2、 可以在 catch 中传播错误信息
3、 可以对错误类型分组
4、 方便定位错误,维护
异常
异常就是异常事件,它是程序遇到异常情况所激发的事件。许多异常,如程序错误,空指针,数组溢出等。下面是一个出错流程
上图中:
第一步:插入用户的 Keynet ,登录系统
第二步:服务器验证用户的身份,判断用户的权限
第三步:返回错误的信息。
这是一个简单的异常处理示例,怎样简单、方便、快捷的得到错误信息。可以采用错误代码和异常两种方式相结合的方式处理。
2 、异常处理
Java 的异常是面向对象的。一个 Java 的 Exception 是一个描述异常情况的对象 . 当出现异常情况时,一个 Exception 对象就产生了 , 并放到异常的成员函数里。
Java 的异常处理是通过 5 个关键词来实现的: try,catch,throw,throws 和 finally 。在 Java 语言的错误处理结构由 try , catch , finally 三个块组成。其中 try 块存放将可能发生异常的 Java 语言,并管理相关的异常指针; catch 块紧跟在 try 块后面,用来激发被捕获的异常; finally 块包含清除程序没有释放的资源,句柄等。不管 try 块中的代码如何退出,都将执行 finally 块。
try… catch… 块
可以采用 try 来指定一块预防所有异常的程序。紧跟在 try 程序块后面,应包含一个
或多个 catch 子句来指定你想要捕获的异常类型: try catch 的格式一般为:
try{
/**do something*/
}catch(…){
…
}catch(…){
…
}
例如:
try{
int a= 100/0
}catch(Exception e){
System.out.println(e.getMessage());
}
每当 Java程序激发一个异常时,它实际上是激发了一个对象,而只有其超类为Throwable类的对象才能被激发。Throwable类中的提供了一些方法。如:其中的getMessage()方法打印出异常对应信息。
Catch子句的目标是解决异常情况,把变量设到合理的状态,并象没有出错一样继续运行。如果一个子程序不处理没个异常,则返回到上一级处理,如此可以不断的递归向上直到最外一级。
finally 块
finally 关键字是对 Java 异常处理模型的最佳补充。 finally 结构使代码总会执行,而不管有无异常发生。使用 finally 可以维护对象的内部状态,并可以清理非内存资源。如果没有 finally,您的代码就会很费解。例如,下面的代码说明,在不使用 finally 的情况下您必须如何编写代码来释放非内存资源:
import java.net.*; import java.io.*; class WithoutFinally { public void foo() throws IOException { //在任一个空闲的端口上创建一个套接字 ServerSocket ss = new ServerSocket(0); try { Socket socket = ss.accept(); //此处的其他代码... } catch (IOException e) { ss.close(); //1 throw e; } //... ss.close(); //2 } }
这段代码创建了一个套接字,并调用 accept 方法。在退出该方法之前,您必须关闭此套接字,以避免资源漏洞。为了完成这一任务,我们在 //2 处调用 close,它是该方法的最后一条语句。但是,如果 try 块中发生一个异常会怎么样呢?在这种情况下,//2 处的 close 调用永远不会发生。因此,您必须捕获这个异常,并在重新发出这个异常之前在 //1 处插入对 close 的另一个调用。这样就可以确保在退出该方法之前关闭套接字。
这样编写代码既麻烦又易于出错,但在没有 finally 的情况下这是必不可少的。不幸的是,在没有 finally 机制的语言中,程序员就可能忘记以这种方式组织他们的代码,从而导致资源漏洞。Java 中的 finally 子句解决了这个问题。有了 finally,前面的代码就可以重写为以下的形式:
import java.net.*; import java.io.*; class WithFinally { public void foo2() throws IOException { //在任一个空闲的端口上创建一个套接字 ServerSocket ss = new ServerSocket(0); try { Socket socket = ss.accept(); //此处的其他代码... } finally { ss.close(); } } }
finally 块确保 close 方法总被执行,而不管 try 块内是否发出异常。因此,可以确保在退出该方法之前总会调用 close 方法。这样您就可以确信套接字被关闭并且您没有泄漏资源。在此方法中不需要再有一个 catch 块。在第一个示例中提供 catch 块只是为了关闭套接字,现在这是通过 finally 关闭的。如果您确实提供了一个 catch 块,则 finally 块中的代码在 catch 块完成以后执行。
finally 块必须与 try 或 try/catch 块配合使用。此外,不可能退出 try 块而不执行其 finally 块。如果 finally 块存在,则它总会执行。(无论从那点看,这个陈述都是正确的。有一种方法可以退出 try 块而不执行 finally 块。如果代码在 try 内部执行一条 System.exit(0); 语句,则应用程序终止而不会执行 finally 执行。另一方面,如果您在 try 块执行期间拨掉电源,finally 也不会执行。)
try…catch…finally 块
最好采用此结构处理异常 . 在 catch 中捕获异常 , 在 finally 块中清除不需要的资源 , 这样程序结构将会更完善 , 健壮 . 例如 :
try{
/**to do */
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
finally{
clearUpAll()
}
3 、激发异常
Java 语言可以不在方法中直接捕获,而用 throw 语句将异常抛给上层的调用者。 Throw 语句就是来明确地抛出一个异常;首先你必需得到一个 Throwable 的实例句柄,通过参数传到 catch 中,或者采用 new 操作符来创建一个。
格式: throw new WhcaException(e.getMessage);
程序会在 throw 语句后立即终止,它后面的语句都不执行,然后在包含它的所有 try 块中从里到外寻找含有与其匹配的 catch.
声明异常类
当 throw 语句被用在方法说明中时, throw 有用 throws 代替。关键字 throws 用来标明一个方法可能抛出的各种异常。对大多数 Exception 子类来说, Java 编译器会强迫你声明在一个方法中抛出的异常的类型。如下:
格式: type method_name(arg_list) throws WhcaException{
……
}
例如: public void execute(String str,int index) throws WhcaException{
try{
}
catch(Exception e){
throw new WhcaException(“JB: M:”+e.getMessage);
}
}
4 、创建自己的异常类
当程序员为提供一些特定的功能用 Java类时,往往需要保证类之间有良好的关系,而且类之间的接口易于理解和实现,这是定义一个新的异常类。建议创建自己的异常类,便于维护,管理。
定义一个新的异常类
通常采用 Exception 作为异常类的超类,如:
package whca.common;
public class WhcaException extends Exception{
public WhcaException(){
}
public WhcaException(String s){
super(s);
}
}
Java语言的设计从根本上便于我们写出整洁、设计良好的代码;尽管如此,在程序运行中仍可能有各种各样的错误出现。
1 、概念
采用新的异常处理机制
在以往的程序开发过程中,常常采用返回值进行处理。例如,在编写一个方法,可以返回一个状态代码,调用者根据状态代码判断出错与否。若状态代码表示一个错误,则调用这进行相应的处理,或显示一个错误页面或错误信息。通过返回值进行处理的方法是有效的,但是有它的许多不足之处。
1、 程序复杂
2、 可靠性差
3、 返回信息有限
4、 返回代码标准化困难
采用错误代码和异常处理相结合的方式的优越性:
1、 把错误代码与常规代码分开
2、 可以在 catch 中传播错误信息
3、 可以对错误类型分组
4、 方便定位错误,维护
异常
异常就是异常事件,它是程序遇到异常情况所激发的事件。许多异常,如程序错误,空指针,数组溢出等。下面是一个出错流程
上图中:
第一步:插入用户的 Keynet ,登录系统
第二步:服务器验证用户的身份,判断用户的权限
第三步:返回错误的信息。
这是一个简单的异常处理示例,怎样简单、方便、快捷的得到错误信息。可以采用错误代码和异常两种方式相结合的方式处理。
2 、异常处理
Java 的异常是面向对象的。一个 Java 的 Exception 是一个描述异常情况的对象 . 当出现异常情况时,一个 Exception 对象就产生了 , 并放到异常的成员函数里。
Java 的异常处理是通过 5 个关键词来实现的: try,catch,throw,throws 和 finally 。在 Java 语言的错误处理结构由 try , catch , finally 三个块组成。其中 try 块存放将可能发生异常的 Java 语言,并管理相关的异常指针; catch 块紧跟在 try 块后面,用来激发被捕获的异常; finally 块包含清除程序没有释放的资源,句柄等。不管 try 块中的代码如何退出,都将执行 finally 块。
try… catch… 块
可以采用 try 来指定一块预防所有异常的程序。紧跟在 try 程序块后面,应包含一个
或多个 catch 子句来指定你想要捕获的异常类型: try catch 的格式一般为:
try{
/**do something*/
}catch(…){
…
}catch(…){
…
}
例如:
try{
int a= 100/0
}catch(Exception e){
System.out.println(e.getMessage());
}
每当 Java程序激发一个异常时,它实际上是激发了一个对象,而只有其超类为Throwable类的对象才能被激发。Throwable类中的提供了一些方法。如:其中的getMessage()方法打印出异常对应信息。
Catch子句的目标是解决异常情况,把变量设到合理的状态,并象没有出错一样继续运行。如果一个子程序不处理没个异常,则返回到上一级处理,如此可以不断的递归向上直到最外一级。
finally 块
finally 关键字是对 Java 异常处理模型的最佳补充。 finally 结构使代码总会执行,而不管有无异常发生。使用 finally 可以维护对象的内部状态,并可以清理非内存资源。如果没有 finally,您的代码就会很费解。例如,下面的代码说明,在不使用 finally 的情况下您必须如何编写代码来释放非内存资源:
import java.net.*; import java.io.*; class WithoutFinally { public void foo() throws IOException { //在任一个空闲的端口上创建一个套接字 ServerSocket ss = new ServerSocket(0); try { Socket socket = ss.accept(); //此处的其他代码... } catch (IOException e) { ss.close(); //1 throw e; } //... ss.close(); //2 } }
这段代码创建了一个套接字,并调用 accept 方法。在退出该方法之前,您必须关闭此套接字,以避免资源漏洞。为了完成这一任务,我们在 //2 处调用 close,它是该方法的最后一条语句。但是,如果 try 块中发生一个异常会怎么样呢?在这种情况下,//2 处的 close 调用永远不会发生。因此,您必须捕获这个异常,并在重新发出这个异常之前在 //1 处插入对 close 的另一个调用。这样就可以确保在退出该方法之前关闭套接字。
这样编写代码既麻烦又易于出错,但在没有 finally 的情况下这是必不可少的。不幸的是,在没有 finally 机制的语言中,程序员就可能忘记以这种方式组织他们的代码,从而导致资源漏洞。Java 中的 finally 子句解决了这个问题。有了 finally,前面的代码就可以重写为以下的形式:
import java.net.*; import java.io.*; class WithFinally { public void foo2() throws IOException { //在任一个空闲的端口上创建一个套接字 ServerSocket ss = new ServerSocket(0); try { Socket socket = ss.accept(); //此处的其他代码... } finally { ss.close(); } } }
finally 块确保 close 方法总被执行,而不管 try 块内是否发出异常。因此,可以确保在退出该方法之前总会调用 close 方法。这样您就可以确信套接字被关闭并且您没有泄漏资源。在此方法中不需要再有一个 catch 块。在第一个示例中提供 catch 块只是为了关闭套接字,现在这是通过 finally 关闭的。如果您确实提供了一个 catch 块,则 finally 块中的代码在 catch 块完成以后执行。
finally 块必须与 try 或 try/catch 块配合使用。此外,不可能退出 try 块而不执行其 finally 块。如果 finally 块存在,则它总会执行。(无论从那点看,这个陈述都是正确的。有一种方法可以退出 try 块而不执行 finally 块。如果代码在 try 内部执行一条 System.exit(0); 语句,则应用程序终止而不会执行 finally 执行。另一方面,如果您在 try 块执行期间拨掉电源,finally 也不会执行。)
try…catch…finally 块
最好采用此结构处理异常 . 在 catch 中捕获异常 , 在 finally 块中清除不需要的资源 , 这样程序结构将会更完善 , 健壮 . 例如 :
try{
/**to do */
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
finally{
clearUpAll()
}
3 、激发异常
Java 语言可以不在方法中直接捕获,而用 throw 语句将异常抛给上层的调用者。 Throw 语句就是来明确地抛出一个异常;首先你必需得到一个 Throwable 的实例句柄,通过参数传到 catch 中,或者采用 new 操作符来创建一个。
格式: throw new WhcaException(e.getMessage);
程序会在 throw 语句后立即终止,它后面的语句都不执行,然后在包含它的所有 try 块中从里到外寻找含有与其匹配的 catch.
声明异常类
当 throw 语句被用在方法说明中时, throw 有用 throws 代替。关键字 throws 用来标明一个方法可能抛出的各种异常。对大多数 Exception 子类来说, Java 编译器会强迫你声明在一个方法中抛出的异常的类型。如下:
格式: type method_name(arg_list) throws WhcaException{
……
}
例如: public void execute(String str,int index) throws WhcaException{
try{
}
catch(Exception e){
throw new WhcaException(“JB: M:”+e.getMessage);
}
}
4 、创建自己的异常类
当程序员为提供一些特定的功能用 Java类时,往往需要保证类之间有良好的关系,而且类之间的接口易于理解和实现,这是定义一个新的异常类。建议创建自己的异常类,便于维护,管理。
定义一个新的异常类
通常采用 Exception 作为异常类的超类,如:
package whca.common;
public class WhcaException extends Exception{
public WhcaException(){
}
public WhcaException(String s){
super(s);
}
}
发表评论
-
mysql中varchar类型转换Integer
2011-11-24 15:22 1262CAST(varchar字段 AS SIGNED) -
java 添加和清除cookie
2011-10-24 09:38 2080//添加cookie Cookie cookie = new ... -
java cookie操作
2011-10-24 09:34 1480Cookie概念: Cookie的格式实际上是一段纯文 ... -
java保留两位小数点(转)
2011-10-19 15:48 5721java保留两位小数问题: 方式一: 四舍五入 dou ... -
ibatis中批量删除
2011-09-15 10:27 1699Ibatis中批量删除方法: 方法一: 在映射文件中,按如 ... -
Java反射getFields()和getDeclaredFields()的区别
2011-09-05 13:23 1647Java反射 getFields()和getDeclaredF ... -
AES加密算法原理
2011-09-01 15:18 1745AES加密算法原理 随 ... -
Java AES加密实例
2011-09-01 14:30 3456package com.encrypt.hello; i ... -
Quartz任务中调用Spring容器中bean及动态调度任务
2011-08-31 15:09 19818Quartz 是开源任务调度框 ... -
Observer模式
2011-08-23 09:46 1035Java深入到一定程度,就不可避免的碰到设计模式(design ... -
Java环境下Memcached应用详解(转)
2011-08-22 10:05 0本文将对在Java环境下Memcached应用进行详细介绍。M ... -
Spring容器详解(转)
2011-08-22 09:53 1285我们在使用ssh整合项目的时候,Spring在其中是一个非常重 ... -
Spring DI(依赖注入) IOC(控制反转) AOP(面向切面编程)
2011-08-22 09:43 2127spring 的优点? 1.降低了 ... -
11款用于优化、分析源代码的Java工具
2011-08-08 15:13 895本文将提供一些工具, ... -
Java编程中影响性能的一些特点
2011-08-08 15:04 776文中将提供一些在Java编程中影响性能的一些特点,为了能够提高 ... -
Velocity基础
2011-08-08 11:01 1805Velocity 基础 Velocity是一个基于java的 ... -
java io经典例子
2011-08-03 14:45 1161IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入 ... -
JUnit4详细教程
2011-08-02 15:36 1231因jdk5中的新特性,JUn ... -
JUnit4注解
2011-08-02 15:31 1022JUnit4注解 JUnit4的测试类不用再继承TestCa ... -
JUnit简明手册
2011-08-02 15:29 893用XP进行开发的过程,unit test是必不可少的环节。作为 ...
相关推荐
Java 异常处理习题 Java 异常处理是 Java 编程语言中的一种重要机制,用于处理程序在运行时可能出现的错误或异常情况。下面是关于 Java 异常处理的习题和知识点总结: 一、Java 异常处理关键字 * Java 中用来抛出...
java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理
本文将从 Java 异常的基本概念和语法开始,讲述 Java 异常处理的基本知识,分析 Java 异常体系结构,对比 Spring 的异常处理框架,阐述异常处理的基本原则,并提出了自己处理一个大型应用系统异常的思想,并通过设计...
### Java异常处理 #### 一、异常的基本概念 在编程领域中,异常是指程序在运行过程中遇到的问题或错误状态,这些问题通常会导致程序无法按照预期的方式继续执行。在Java语言中,异常处理是一种重要的机制,用于...
Java异常处理是编程中至关重要的一个环节,它允许开发者优雅地处理程序运行时可能出现的错误,确保程序的健壮性和稳定性。Java中的异常处理机制基于一个独特的概念——异常(Exception),这是一种表示程序运行中...
这个主题,"Java异常处理体系",涉及到Java如何优雅地处理程序运行时的异常,确保程序的健壮性和稳定性。这篇博文链接(已提供但无法直接访问)可能详细解释了Java异常处理的基本概念、机制以及最佳实践。 Java异常...
### 浅析JAVA异常处理机制 #### 一、Java异常处理机制概述 异常处理是Java语言中的一个重要机制,它能够确保程序在遇到不可预料的情况时仍能维持稳定运行。异常处理主要包括三个方面:捕获异常、控制程序流程以及...
Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误时能够优雅地运行,而不是突然崩溃。本篇文章将深入探讨Java异常处理的概念、机制以及如何通过代码实例进行有效的异常管理。 Java异常处理的核心...
Java异常处理设计是Java编程中一个至关重要的环节,它直接影响到程序的稳定性和可维护性。在Java中,异常处理是通过try-catch-finally语句块来实现的,主要涉及两大类异常:编译时异常(Checked Exception)和运行时...
Java异常处理的9个最佳实践涵盖了开发者在进行Java编程时应当遵循的一系列规则和方法,以确保代码的健壮性和可维护性。异常处理是编程中的一个重要部分,它能够帮助我们更有效地管理和响应程序运行时的错误情况。 ...
Java异常处理是Java编程语言中的一个关键特性,它允许程序员优雅地处理程序运行时可能出现的错误和不正常状况。在Java中,异常是程序执行过程中出现的问题,它们中断了正常的控制流程,使得程序无法继续按照预期的...
Java异常处理是Java编程中一个至关重要的概念,它关乎到程序的健壮性和稳定性。在Java语言中,异常处理提供了一种机制,使得程序在遇到错误或非正常情况时能够优雅地处理问题,而不是突然崩溃。这个“java高端技术...
通过遵循上述最佳实践,开发者可以编写出更健壮、可维护的Java代码,有效地利用Java异常处理机制来提高程序的稳定性。同时,阅读并理解"Effective Java Exceptions"文档可以帮助进一步深化对Java异常处理的理解。
从给定的文件内容中可以看出,这是一系列Java程序示例,它们用来说明Java异常处理机制。异常处理是Java语言中一个非常重要的部分,它能够帮助程序在遇到错误情况时仍然可以正常运行或者优雅地退出。这些程序通过各种...
java异常练习题,北大青鸟学士后课后练习,主要是异常处理的小测验
以下是对Java异常处理的一些误区和经验总结。 **误区一:过度使用try-catch块** 有些开发者习惯于在每个函数的开始部分都套用try-catch块,以为这样可以捕捉所有可能出现的异常。实际上,这种做法使得代码变得混乱...
零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理...