异常到底有啥用? 异常本来就不是为了直接解决问题的,它只是提供一种系统性的方法来方便你判断造成错误的原因以及出错位置,从而方便调试维护你的程序,像C等语言运行过程中出错经常就只告诉你一句A fatal error has occurred.出现了一个严重错误,说了等于白说,你还要自己检查寄存器堆栈数据,自己设一堆断点单步调试,多麻烦。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以根据异常的类型来判断是程序的哪部分出了问题 其实如果你细心的话 可以研究下 异常的种类 自然就会明了比如sqlexception 肯定就是 操作数据库时候出的问题。 当你程序有bug的时候,比如内存泄漏,这个时候如果不加异常捕获,那么程序就直接崩溃了,加了异常捕获之后,你就能通过抛出异常来知道哪儿错了,一个几十万行的大项目,如果程序运行中蹦了,那要直接找错误太难了!! 异常不是解决问题的,是帮忙定位问题的。遇到异常,可以自己往上抛,让方法的调用者去捕获异常;也可以自己try..catch 来捕获处理异常。异常处理中通常说明出错原因,就可以了。让开发人员看到异常信息,可以判断出是哪里出问题了。异常处理中最害怕的就是,把异常try...catch掉了,但catch中是个空实现,什么都没做,这个相当于自己把异常吃掉了,比较危险。 自己能解决的就自己解决,自己解决不了的才抛给自己的调用方去解决领导 -> 自己 -> 小弟 -> 小弟的小弟按照上面这种调用关系,自己调用的下层返回回来的异常,以及自己内部发生的异常,最好都自己解决掉最好不要抛给领导 单看异常是木有用的不过跟异常配套的try{}catch(){}很有用try{ 可能出异常的代码块}catch(捕获某种异常){ 出现该异常的处理方式}catch(捕获某种异常){ 出现该异常的处理方式} catch的内容就是在解决啊,比如记录日志,比如做数据回滚,比如返回响应“系统错误”,等待 "异常本来就不是为了直接解决问题的" 这句话不太同意, 异常其实也可以用的很灵活.异常同样可以直接决定业务逻辑的,比如请求非托管资源如网络io , 比如一段需要大量判断的代码,非空,返回xx不符合符合数据标准,返回xx数据库中没有值,返回xx 序列化是否成功....如果我写进try里面,默认它所有条件都具备,都有对应的数据, 一旦发生异常,在try里面返回就好代码精炼了很多. "异常本来就不是为了直接解决问题的" 这句话不太同意, 异常其实也可以用的很灵活.异常同样可以直接决定业务逻辑的,比如请求非托管资源如网络io , 比如一段需要大量判断的代码,非空,返回xx不符合符合数据标准,返回xx数据库中没有值,返回xx 序列化是否成功....如果我写进try里面,默认它所有条件都具备,都有对应的数据, 一旦发生异常,在try里面返回就好代码精炼了很多.我的意思是不能“直接”解决问题,它只能告诉你在什么地方发生了一个什么错误,你还是需要写额外的代码来解决错误(比如你说的返回XX),当然我漏掉了利用try...catch异常捕捉机制防止程序崩溃这一个功能,这确实是安全性易用性上一大优点 抛异常你可以知道哪里出错了,比如catch(Exception e){System.out.println(e);}控制台可以输出异常的原因 异常是软件运行当中必须面以的情况,否则你的软件产品就不健壮为什么JAVA规定runtimeexception 可以不捕捉,这是因为 runtimeexception 基本上可以通过程序优化来避免,比如空指针异常,在调用方法前判断一下变量是否为空即可避免;索引越界异常,在对数组进行索引时判断一下是否越界也可以避免。而非 runtimeexception,你的程序写得再好,也无法避免异常情况发生。比如你正在对数据库进行访问时,数据库服务器当机了,你正在与远程主机通过TCP进行通信时,远程主机当机或者网线被剪断了……但是当这些意外情况发生时,你的程序不能因此也崩溃。所以,既然意外无法避免,那么你就只能增加当意外发生时的处理机制。 解决问题还是靠程序员,异常只是辅助作用,告诉你哪里出问题了,等你写程序多了,一看到异常代码就知道哪段程序有bug了! 异常不仅仅是为了给你找 bug。更重要的是,有些意外情况,是程序再好也无法避免的,比如正在访问的数据库当机、写磁盘时出现坏道、正在进行远程通信时网络中断等,你的程序不能因为这些意外而崩溃,异常给这种无法避免的意外情况提供了便捷的处理机制。 windows的SEH(结构化异常处理)非常有用,,比如有些时候需要申请很大的存储器空间,但是一时又用不到全部空间,然后每次的内存读写都可以捕捉到访问违规的错误,然后就能得体的恢复正常运行,用户是完全感觉不到的.如果没有异常处理,错误会直接被WINDOWS内核来处理(直接干掉进程,而不是某个线程). 异常有时候能当if else用。。还有CPU本身就是在硬件支持异常的 你编写程序不能保证所有的情况都考虑到了,所以难免有错,把易出错的代码段,放到try 模块中,出错了就会被catch模块扑捉到,再处理增强到了程序的健壮性。 主要是处理一些非致命性的异常情况。例如处理数据的时候,比如提款机取钱,如果发生异常的话,如果没有try catch的话,就可能你卡里面扣钱了,却没有取到,如果有异常的话,当发生的时候可以进行数据库回滚等操作。 提高代码结构清晰 和优雅性!! 因为如果没有异常,完全可以这么做if(!check()){ //Do some error process}但是这么做,会有很大的问题,一方面 如果错误种类多,将不好处理,另一方面 错误的详细信息在处理端也不能准确的获得。所以引入了 异常 这种代码结构。 有时候会遇到无法避免或者难以避免的异常,这时候catch异常让程序得以继续往下运行,比如做数据验证的时候,非法数据完全可以跳过js验证直接通往后台,后台代码验证这些错误数据的时候可能出错,比如subString越界,类型转换错误什么的,但是可以catch然后给界面返回一个错误信息就可以了。 异常:阻止当前方法或作用域继续执行的问题。虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常。绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败。之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意。 选项卡!JTabbedPane的一些功能实现! java如何写菜单 frameset局部刷新怎么来实现? 如何在两个类中传递结果集 大家请多指教 请问怎么把一个字符串分隔为一个数组? 软件工程师必读的好文章---《软件工程思想》全文,可下载。 关系运算符 == [50分工大家讨论] Java 为什么吵的 如此热闹,它的最大用武之地在哪里? JAVA难题 请教一个Java的Swing技术问题. 为何这段代码,书中说可能会打印0,但在我在eclipse执行完后ready一直被主线程赋值了true,进不了while循环
比如sqlexception 肯定就是 操作数据库时候出的问题。
遇到异常,可以自己往上抛,让方法的调用者去捕获异常;也可以自己try..catch 来捕获处理异常。
异常处理中通常说明出错原因,就可以了。让开发人员看到异常信息,可以判断出是哪里出问题了。
异常处理中最害怕的就是,把异常try...catch掉了,但catch中是个空实现,什么都没做,这个相当于自己把异常吃掉了,比较危险。
最好不要抛给领导
不过跟异常配套的try{}catch(){}很有用
try{
可能出异常的代码块
}catch(捕获某种异常){
出现该异常的处理方式
}catch(捕获某种异常){
出现该异常的处理方式
}
异常同样可以直接决定业务逻辑的,
比如请求非托管资源如网络io ,
比如一段需要大量判断的代码,
非空,返回xx
不符合符合数据标准,返回xx
数据库中没有值,返回xx
序列化是否成功....如果我写进try里面,默认它所有条件都具备,都有对应的数据, 一旦发生异常,在try里面返回就好
代码精炼了很多.
异常同样可以直接决定业务逻辑的,
比如请求非托管资源如网络io ,
比如一段需要大量判断的代码,
非空,返回xx
不符合符合数据标准,返回xx
数据库中没有值,返回xx
序列化是否成功....如果我写进try里面,默认它所有条件都具备,都有对应的数据, 一旦发生异常,在try里面返回就好
代码精炼了很多.
我的意思是不能“直接”解决问题,它只能告诉你在什么地方发生了一个什么错误,你还是需要写额外的代码来解决错误(比如你说的返回XX),当然我漏掉了利用try...catch异常捕捉机制防止程序崩溃这一个功能,这确实是安全性易用性上一大优点
System.out.println(e);
}控制台可以输出异常的原因
异常不仅仅是为了给你找 bug。更重要的是,有些意外情况,是程序再好也无法避免的,比如正在访问的数据库当机、写磁盘时出现坏道、正在进行远程通信时网络中断等,你的程序不能因为这些意外而崩溃,异常给这种无法避免的意外情况提供了便捷的处理机制。
比如有些时候需要申请很大的存储器空间,但是一时又用不到全部空间,然后每次的内存读写都可以捕捉到访问违规的错误,然后就能得体的恢复正常运行,用户是完全感觉不到的.
如果没有异常处理,错误会直接被WINDOWS内核来处理(直接干掉进程,而不是某个线程).
if(!check()){
//Do some error process
}
但是这么做,会有很大的问题,一方面 如果错误种类多,将不好处理,另一方面 错误的详细信息在处理端也不能准确的获得。
所以引入了 异常 这种代码结构。