当前位置: 代码迷 >> J2SE >> 错误到底有啥用
  详细解决方案

错误到底有啥用

热度:50   发布时间:2016-04-23 20:30:11.0
异常到底有啥用?
新手求教各位大神,异常到底有啥用啊,学完之后感觉就是把一个错误然后抛来抛去,抛不了就try...catch...   但是貌似并没有解决啊。。。
------解决方案--------------------
异常本来就不是为了直接解决问题的,它只是提供一种系统性的方法来方便你判断造成错误的原因以及出错位置,从而方便调试维护你的程序,像C等语言运行过程中出错经常就只告诉你一句A fatal error has occurred.出现了一个严重错误,说了等于白说,你还要自己检查寄存器堆栈数据,自己设一堆断点单步调试,多麻烦。。
------解决方案--------------------
比如一个很简单的例子

让用户输入一个数字,如果是数字就输出该数字,如果不是数字则提示用户重新输入。

这个情况当然你可以用很多种方式解决,其中有一种方式就是可以依靠异常来解决的。
把用户输入转换成数字,如果抛出异常则提示用户重新输入,否则输出数字。
如果用户输入的不是数字,而程序也不抛出异常的话,你怎么知道用户输入的不是数字呢。(当然你也可以通过正则表达式等方式进行判断,但是那不是很麻烦吗。)

还有例如,连接数据库的时候,如果连接不上会抛出一个异常,那程序就能够提示用户网络不通或者数据库未启动等。
------解决方案--------------------
这是你刚学完,做开发时间长了就知道有什么用了!
------解决方案--------------------
可以根据异常的类型来判断是程序的哪部分出了问题  其实如果你细心的话 可以研究下  异常的种类   自然就会明了
比如sqlexception  肯定就是 操作数据库时候出的问题。
------解决方案--------------------
当你程序有bug的时候,比如内存泄漏,这个时候如果不加异常捕获,那么程序就直接崩溃了,加了异常捕获之后,你就能通过抛出异常来知道哪儿错了,一个几十万行的大项目,如果程序运行中蹦了,那要直接找错误太难了!!
------解决方案--------------------
异常不是解决问题的,是帮忙定位问题的。
遇到异常,可以自己往上抛,让方法的调用者去捕获异常;也可以自己try..catch 来捕获处理异常。
异常处理中通常说明出错原因,就可以了。让开发人员看到异常信息,可以判断出是哪里出问题了。
异常处理中最害怕的就是,把异常try...catch掉了,但catch中是个空实现,什么都没做,这个相当于自己把异常吃掉了,比较危险。

------解决方案--------------------
自己能解决的就自己解决,自己解决不了的才抛给自己的调用方去解决

领导 -> 自己 -> 小弟 -> 小弟的小弟

按照上面这种调用关系,自己调用的下层返回回来的异常,以及自己内部发生的异常,最好都自己解决掉
最好不要抛给领导
------解决方案--------------------
单看异常是木有用的
不过跟异常配套的try{}catch(){}很有用
try{
    可能出异常的代码块
}catch(捕获某种异常){
    出现该异常的处理方式
}catch(捕获某种异常){
    出现该异常的处理方式
}

------解决方案--------------------
捕获异常 解决异常 这样能使你的程序更加健壮 稳定
------解决方案--------------------
对可能出现错误的代码做预先处理 防范作用
------解决方案--------------------
程序预料范围之外出错了 可以捕获不至于程序崩溃 还可以根据异常信息解决问题 提高健壮性
------解决方案--------------------
提高健壮性。
起到流程控制的作用
------解决方案--------------------
引用:
新手求教各位大神,异常到底有啥用啊,学完之后感觉就是把一个错误然后抛来抛去,抛不了就try...catch...   但是貌似并没有解决啊。。。

catch的内容就是在解决啊,比如记录日志,比如做数据回滚,比如返回响应“系统错误”,等待
------解决方案--------------------

------解决方案--------------------
慢慢就知道怎么用了
------解决方案--------------------
不要纠结异常,基础上学的,一定要打扎实、、、后期帮助很大
------解决方案--------------------
和我最开始想的一样,但是现在发现还是很有用的
------解决方案--------------------
引用:
异常本来就不是为了直接解决问题的,它只是提供一种系统性的方法来方便你判断造成错误的原因以及出错位置,从而方便调试维护你的程序,像C等语言运行过程中出错经常就只告诉你一句A fatal error has occurred.出现了一个严重错误,说了等于白说,你还要自己检查寄存器堆栈数据,自己设一堆断点单步调试,多麻烦。。

"异常本来就不是为了直接解决问题的" 这句话不太同意, 异常其实也可以用的很灵活.
异常同样可以直接决定业务逻辑的,
比如请求非托管资源如网络io , 
比如一段需要大量判断的代码,
非空,返回xx
不符合符合数据标准,返回xx
数据库中没有值,返回xx
 序列化是否成功....

如果我写进try里面,默认它所有条件都具备,都有对应的数据, 一旦发生异常,在try里面返回就好
代码精炼了很多.

------解决方案--------------------
引用:
Quote: 引用:

异常本来就不是为了直接解决问题的,它只是提供一种系统性的方法来方便你判断造成错误的原因以及出错位置,从而方便调试维护你的程序,像C等语言运行过程中出错经常就只告诉你一句A fatal error has occurred.出现了一个严重错误,说了等于白说,你还要自己检查寄存器堆栈数据,自己设一堆断点单步调试,多麻烦。。

"异常本来就不是为了直接解决问题的" 这句话不太同意, 异常其实也可以用的很灵活.
异常同样可以直接决定业务逻辑的,
比如请求非托管资源如网络io , 
比如一段需要大量判断的代码,
非空,返回xx
不符合符合数据标准,返回xx
数据库中没有值,返回xx
 序列化是否成功....

如果我写进try里面,默认它所有条件都具备,都有对应的数据, 一旦发生异常,在try里面返回就好
代码精炼了很多.

我的意思是不能“直接”解决问题,它只能告诉你在什么地方发生了一个什么错误,你还是需要写额外的代码来解决错误(比如你说的返回XX),当然我漏掉了利用try...catch异常捕捉机制防止程序崩溃这一个功能,这确实是安全性易用性上一大优点
------解决方案--------------------
抛异常你可以知道哪里出错了,比如
catch(Exception e){
System.out.println(e);
}

控制台可以输出异常的原因
  相关解决方案