A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张俊迪 中级黑马   /  2013-6-9 11:29  /  1744 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张俊迪 于 2013-6-9 20:34 编辑

对于异常至今一直比较模糊,模糊的地方有以下两点
第一:就是try和throw,什么时候应该用try什么时候应该用throw,我也知道能处理的用try不能处理的就throw,可是处理中要怎么处理,不就是显示错误的信息吗,可是我在网上看了最好不要只显示错误信息,最好对异常进行处理,他的这个处理啥意思呢。
第二:就是RuntimeException异常和非RuntimeException异常的问题,对于这个问题我的理解是分别是运行时异常和编译时异常,在看视频的时候老师说RuntimeException异常不能处理需要对代码进行处理,他说的这个代码处理是不是下面的情况例如ArithmeticException异常,只要判断输入除数数据不为零就可以了,可是要是判断了不为零,那也就没必要处理这异常了,纠结
也许钻牛角尖了,希望大神们将我拉出,最好举几个例子,例子最能说明问题的

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

9 个回复

倒序浏览
大神们都睡觉去了,还是都吃饭去了,求解答!!!!!!!
回复 使用道具 举报
向外抛throw和try/catch都是对异常的一种处理,throw关键字的格式:throw new ArithmeticException(); 抛出一个异常,这些异常可以使unchecked exception(也就是RuntimeException),也可以是checked execption. throw必须有一个捕获该异常的try/catch语句
即:
try
{throw new ArithmeticException();;}
catch(Exception e)
{……}

至于最好不要只显示错误信息,最好对异常进行处理是指:
你try、catch的时候要返回用户可以看得懂信息,错误那些专业的信息是程序员我们自己看的
例如:
try{}
catch(Exception e)
{System.out.println("程序出现错误");
}

转牛角尖也是一种好事,他可以帮你把问题弄得更清楚,但是不能什么事都转这样活得会很累的哦!

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}
回复 使用道具 举报
小羽天空 发表于 2013-6-9 13:12
向外抛throw和try/catch都是对异常的一种处理,throw关键字的格式:throw new ArithmeticException(); 抛出 ...

你说的这些我都明白,但是还很模糊,就那你的System.out.println("程序出错");这不还是单纯的显示错误信息吗,难道这就算处理了,难道显示信息和处理是一个概念,求回应
回复 使用道具 举报
袁梦希 发表于 2013-6-9 14:44
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。 ...

还不大行,在等等,明白了就改
回复 使用道具 举报
我觉着把,目前的都是一些简单的代码,小程序,所以一个错误信息就够了。等以后复杂的程序只有这一个错误信息就不行了。需要详细点了。要告诉用户哪里错了,或者自己修改避免此类异常。
RuntimeException和Exception把,遇到程序有异常,不需要处理而是需要立即停止!就runtime了·其他的就是Exception。像除法运算,你都给一个0当除数,那肯定不能再继续啦。我目前是觉得运算之类出错是不能继续的。可能不太全面,暂时这样理解把
我也才看到这里
回复 使用道具 举报
本帖最后由 小羽天空 于 2013-6-9 18:39 编辑
张俊迪 发表于 2013-6-9 14:47
你说的这些我都明白,但是还很模糊,就那你的System.out.println("程序出错");这不还是单纯的显示错误信 ...

你打印在控制台告诉用户肯定是通俗易懂的,如果是单纯的显示错误信息就是一大串代码给用户,他们哪里看的懂,你说是不。


单纯的错误信息:
    java.net.ConnectException: Connection refused: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
        at java.net.Socket.connect(Socket.java:519)
        at java.net.Socket.connect(Socket.java:469)
        at java.net.Socket.<init>(Socket.java:366)
        at java.net.Socket.<init>(Socket.java:180)
        at Test24.Client1.main(Client1.java:10)
你说这种代码给用户他们看得懂吗。连最后反馈给你信息哪里错了,都不知道怎么说。

回复 使用道具 举报
小羽天空 发表于 2013-6-9 18:36
你打印在控制台告诉用户肯定是通俗易懂的,如果是单纯的显示错误信息就是一大串代码给用户,他们哪里看的 ...

好的,也是哪么回事
回复 使用道具 举报
首先可以明确,对于异常的实现过程你是懂的。

这也是很多初学者不理解的地方,这里就不写代码演示了,相信说明白就能理解了。

|--try和throw:
    |--throw:一个方法,如果里面的代码有可能有异常发生,又会被使用,那么就throw给调用者,有调用者来进行处理,因为不被使用在方法中进行处理是没有意义的。这时就可以给调用者去处理。

    |--try:首先它要实现的有两件事情,你刚才疑问的只是其中一个。第一,处理了可以给用户返回具体的错误信息,我们平常练习只是简单的给出为什么错误或者什么错误,确实在开发中需要详细的反馈,需要告诉用户使用出错误了,需要怎么解决等,增加用户的体验度。第二,通过try处理。程序还可以继续运行,而只是throw的话,发生了异常程序会停止运行,后面的程序也会停止。


|--运行异常和非运行异常
    |--运行异常:它的存在是为了这种情况:例如,程序提示输入整数,用户偏要输入字符串,并启动程序,这时候程序就没有运行的必要了,数据都错误了,运行也是没有意义的。对于老师说的那种情况,停止运行,检查代码的错误,有些时候是这样的,分情况,这种情况:例如,一个程序,只能输入正数,结果输入了负数,由于数据类型没有问题,程序还会运行,这时就是程序优化不足,应该在输入时进行判断,负数不能输入,再有其他的问题就是用户操作的问题了。这时不同的两种运行时异常情况。

记住一些特殊的例子,可以帮助你进行更好的理解学习,希望回答对你有帮助!

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马