为了账号安全,请及时绑定邮箱和手机立即绑定

为什么java到处都要用到try catch?

为什么java到处都要用到try catch?

慕容3067478 2019-02-23 08:58:32
新手学java,在什么情况下要包括try catch啊?我理解的try catch 是处理异常。难道java有些方法对象 本身就要配合try catch来使用的吗?
查看完整描述

18 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

你要try catch是因为你用的对象的方法声明可能会抛出异常的。

查看完整回答
反对 回复 2019-03-01
?
largeQ

TA贡献2039条经验 获得超8个赞

除了RuntimeException以外,其它异常如果不捕获就会编译不通过,一般编译器会提示方法可能抛出异常

查看完整回答
反对 回复 2019-03-01
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

有时候有很多方法的执行不会是一撸到底那么顺畅,中间总会出岔子,报异常。要知道到底出了啥岔子,就得把异常捕获,然后采取合理的方式进行处理。

查看完整回答
反对 回复 2019-03-01
?
噜噜哒

TA贡献1784条经验 获得超7个赞

异常捕获能够快速定位问题,一般加到你觉得可能会产生异常的代码上,选择合适的Exception和代码位置是最关键的。

查看完整回答
反对 回复 2019-03-01
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

要配合日志,快速定位错误还有错误信息

查看完整回答
反对 回复 2019-03-01
?
隔江千里

TA贡献1906条经验 获得超10个赞

首先并不是到处都用try catch。try catch是在可能会抛异常的时候使用的。他是一个很好的机制,但是不要滥用.
甚至某些编程语言不建议使用try catch

查看完整回答
反对 回复 2019-03-01
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

catch异常有利于程序稳定性

查看完整回答
反对 回复 2019-03-01
?
慕慕森

TA贡献1856条经验 获得超17个赞

一个健壮的程序并不是向我们想的那样去运行,它会在跑的过程中发生一些意外,例如数据库连上,对一个空引用调用它的方法,你要读取的本地文件不存在等等各种意外情况,这些就是异常,在写程序的时候都要考虑进去的,这时就需要捕获异常,然后对其进行特殊处理。

查看完整回答
反对 回复 2019-03-01
?
POPMUISE

TA贡献1765条经验 获得超5个赞

Java语言是非常健壮的,非RuntimeException必须要在程序中捕获向上抛出,总之总是要处理。try catch就是处理异常的。

查看完整回答
反对 回复 2019-03-01
?
交互式爱情

TA贡献1712条经验 获得超3个赞

设计方法的人可以用throws声明一个函数"可能"抛某种异常

使用此方法的人必须考虑这个异常 (要么调用时try/catch,要么自己也throws把异常传出去,两个都不做就会编译错误)

查看完整回答
反对 回复 2019-03-01
?
GCT1015

TA贡献1827条经验 获得超4个赞

因为臃肿......
开个玩笑

查看完整回答
反对 回复 2019-03-01
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

全局捕获程序运行时的异常么

查看完整回答
反对 回复 2019-03-01
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

从现今的角度上来看,try/catch略显笨重,尤其是使用底层JDBC的时候(虽然现在这种情况很少了,在做一些非正式的对数据库的小调整的时候,引入orm是一种不太可取的做法)。到处都是try/catch。而且都是统一的SQLException,要去查底层返回的code才知道出现了什么问题。

但是这正是java包容万象的一个特征。一个大一点的项目,很多时候都会有不可控的情况,不太可能事事顺心。事事都如你所料。一个健壮完善的系统应该有应对一些意想不到的简单的问题的基础应对。这是java异常体系建立的初衷。事实上,java允许扩展异常定义,也是为了开发调试的方便。

在spring出现前,我在给开发团队搭建架构的时候,都会在业务层和数据库层引入自定义异常,允许团队的成员自行扩展,但是需要分享交流,就是应对业务系统中可能出现的先期开发中未考虑到的情况。后来这种模式受到维护人员的一致好评。因为系统出现的80-90%的异常都在我们自定义的异常范围内,很少出现runtimeexception。查找问题维护起来非常方便。

查看完整回答
反对 回复 2019-03-01
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

如果没有try的话,出现异常会导致程序崩溃。而try则可以保证程序的正常运行下去,比如说:

try{
int i = 1/0;
}catch(Exception e){
........
}

一个计算的话,如果除数为0,则会报错,如果没有try的话,程序直接崩溃。用try的话,则可以让程序运行下去,并且输出为什么出错。try catch,配合log4j使用会对程序的日后维护帮助很大。

查看完整回答
反对 回复 2019-03-01
?
PIPIONE

TA贡献1829条经验 获得超9个赞

问:新手学java,在什么情况下要包括try catch啊?

答:普及一点基本知识:

  • 异常的原理机制

当程序中抛出一个异常后,程序从程序中导致异常的代码处跳出,java虚拟机检测寻找和try关键字匹配的处理该异常的catch块,如果找到,将控制权交到catch块中的代码,然后继续往下执行程序,try块中发生异常的代码不会被重新执行。如果没有找到处理该异常的catch块,在所有的finally块代码被执行和当前线程的所属的ThreadGroup的uncaughtException方法被调用后,遇到异常的当前线程被中止。

  • 异常的结构

Java异常结构中定义有Throwable类,Exceotion和Error是其派生的两个子类。其中Exception表示由于网络故障、文件损坏、设备错误、用户输入非法等情况导致的异常,这类异常是可以通过Java异常捕获机制处理的。而Error表示Java运行时环境出现的错误,例如:JVM内存溢出等。

  • 总结说明

异常是程序出问题的一种本能反应,使用try catch表示你能很好处理相应代码块的异常情况,从而避免程序异常中断,反之,你就throws Exception,把异常向上一级抛出。


问:我理解的try catch 是处理异常。难道java有些方法对象 本身就要配合try catch来使用的吗?

答:再普及一点基本知识:

  • 异常的分类

  • 可检测异常:可检测异常经编译器验证,对于声明抛出异常的任何方法,编译器将强制执行处理或声明规则,不捕捉这个异常,编译器就通不过,不允许编译。

  • 非检测异常:非检测异常不遵循处理或者声明规则。在产生此类异常时,不一定非要采取任何适当操作,编译器不会检查是否已经解决了这样一个异常。

  • 总结说明

关于这点问题,建议通过查看相关源代码来分析理解,总的原则就是,只要你调用的方法中带有可检测异常,你就需要处理,try catch是一种方式,或者就throws Exception,把异常向上一级抛出。下面举例说明如下:

(用到try catch的场景)

PrintWriter pw = null;
try {
    pw = new PrintWriter(new File(CodeUtil.invoPath, name));
    pw.write(str_invo.toString());
} catch (FileNotFoundException e) {
    throw new RuntimeException(name+"文件未找到!");
}

(查看相关源代码分析)

public PrintWriter(File file) throws FileNotFoundException {
    this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))),
         false);
}

(分析总结)
因为构造方法PrintWriter(File file)后面跟了throws FileNotFoundException,所以你调用该构造方法时就必须对它抛出的异常进行处理。

查看完整回答
反对 回复 2019-03-01
?
翻阅古今

TA贡献1780条经验 获得超5个赞

一般语言都是有异常处理机制的。

我的一篇文章其中一段对于Java的异常机制进行了简单的介绍,望能帮到你。

查看完整回答
反对 回复 2019-03-01
  • 18 回答
  • 0 关注
  • 2170 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号