大家平时写代码,里面写异常处理吗? 在真正的项目中肯定是需要异常处理的,你不可能让用户在用你的系统的时候看到xxx.xxx.NullPointerException然后一大堆错误信息吧,不够友好。异常这块是Java的重点,好好理解一下,尤其是自定义异常。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自己写小的代码段处不处理异常个人觉得无所谓,我一般就catch了以后往屏幕上print,方便自己调试就好了不过有的人可能会说要养成“完美代码”的习惯,时刻留意可能会出错,引起程序崩溃的地方,并输出用户友好的错误提示这个嘛自己的代码就看你自己怎么想,工作中那就得看公司的代码规范喽。。 关于catch操作,永远记住,如果你不知道如何处理这个异常,你就让他抛出,让调用你的人去处理假设A方法调用B方法,好比A是B的领导,指派B去干活,工作中出了纰漏,哪怕不是B的责任(比如B又调用了C,C出错了)如果B没这个权限的话,他就该把问题上报给他的领导而不是私自把这个问题掩盖掉(catch且并不再throw出去)try{}finally{} B没权限处理,所以直接上报,但是呢,在上报前,先要把开始的工作收尾(finally)try{}catch(e){throw new AnotherException(e);}finally{} B没权限处理,所以直接上报,但是呢,在上报前,先要把开始的工作收尾(finally),同时领导只接受一种回报格式,所以要整理一下,比如new AnotherException(e) 平时写代码,里面最好写异常处理,逐渐养成好的习惯异常不是累赘,而是朋友,是一种优美的简化技术举个例子:Windows自带的 计算器,1除以0,会表示出【0不能做分母(或者类似的信息)】,这里肯定用了异常技术但是程序员们会想,我事前判断一下分母是不是0,分分秒的就解决了问题,用神马异常?请继续看:输入1000000000000000,然后按下乘号,按下等于,再按下乘号,再按下等于,这样反复几回就会出现【已经溢出(或者类似的信息)】,这里肯定用了异常技术我,我,我事前检查一下每个乘法左右两边的数,看看它们相乘会不会溢出……这个例子说明,当程序中有针对用户输入数据的处理时,需要尽可能的检验数据输入的正当性但是绝大多数输入数据的合法性,不太可能事前都一一考虑到这个时候,异常处理就会大显身手写异常处理反倒比较简单,代码变少了很多;试想一下,不写异常处理,不论你写几千几万行检查代码,都很容易疏漏掉一些特殊的情况。再举个例子:打开Windows自带的记事本,随便输入几个文字然后保存文件,指定文件名为con【注意,不带后面的.txt】在我的机器上,显示了【con这个名字已经被Windows预约了,请使用其他的名字】客页!我最开始写代码的时候,怎么知道con是Windows的预约名称不能使用?我最开始写代码的时候,怎么知道 用户 要把一个文件保存到 路径名超过 256 个字符的地方去?我最开始写代码的时候,怎么知道 用户 试着把一个大文件保存到一个没有多少剩余空间的U盘里!?如果IDE和文本编辑器里没有异常处理,估计程序员早就抓狂了…… 异常处理是个好习惯,java提供了强大的异常处理机制,很方便的啊。一般是把异常跑抛出去让上一级处理、 我的观点和大家刚好相反。平时我很少写catch。不是说不做异常处理,而是因为相关的处理,都是通过框架解决。而且,我经历的绝大部分场合,对于异常处理来说,都是标准的:1 记录尽可能详细的日志信息,尤其是打印完整的stacktrace2 对事务进行回滚操作3 向用户报告比较简明易懂的错误消息而这些标准流程,完全只需要在框架层面进行配置即可,很少需要自己手写catch。当然,把catch当作条件判断,流程控制的情况除外。 异常肯定要认真写的,最好还要写明,最好还要在异常捕获里写上中文描述。这样的好处在于,如果出现bug之后,可以快速的定位是哪里出的问题。通常代码多了之后。逻辑可能会不清,或者也可能出现手误的情况,写异常对查错有好处。 关于catch异常很重要,尤其是自定义的异常捕获 自定义的异常捕获记录到log文件这个是必须的 RuntimeException 可以不处理,因为这多是由于你的程序没写好造成的。比如空指针异常、0作除数,这时你应该修改程序,保证调用时不会出现空的引用,保证进行除法运算时没除数不会为0。其它的异常要么抛出,要么自己处理。但是异常绝对不能在底层捕捉之后简单的打印,然后不对调用层产生影响。简单一个例子,一个银行转帐的事务:1、转出帐号减去转帐金额2、转入帐号加上转帐金额。如果在“1、转出帐号减转账金额”的方法调用时,发生异常,但只捕捉不处理,程序继续执行”2、转入帐号加上转帐金额“的操作,则后果是转账成功后,转出帐号的金额不变,但转入帐号金额却增加了。这样的后果是很严重的。 其实,有的异常可以不抛。举一个简单的例子:现在给你一个字符串,要求你把它转化成整数!String s="-12s"; int a=Integer.parseInt(s); 你可以不做异常处理,但是执行到这里的时候,包装类Integer的方法paraseInt还是会抛出异常!!!有没有更好的办法?有!事先判断String s是否可以转换为intString s="-12s"; if(s!=null&&(s.matches("-\\d++")||s.matches("\\d++"))){ int a=Integer.parseInt(s); }else{ System.out.println("s无法转换成int"); } 不用很关心 我刚才是学的时候也是觉得很复杂 其实到后来就很简单了 eclipse会有非运行时异常的检测 你点玩自动加就行了。运行时异常就要凭经验手动加了 我们平时写js都是一堆try catch来处理 初学者问个问题:需求和代码如下 导入包问题,回答者皆送分,谢谢 jdk的版本影响程序布局? jbuilder有没有格式化已有代码格式的快捷键? JPanel的字体设置问题。 怎样实现对sql server进行数据库备份 系統配置問題,在線等待!!謝謝 初次接触java,弱智问题,权当给大家送分! 请教这些方法有什么不同? JAVA的问题 泛型的上下限定 String对象想调用Object的toString方法
不过有的人可能会说要养成“完美代码”的习惯,时刻留意可能会出错,引起程序崩溃的地方,并输出用户友好的错误提示这个嘛自己的代码就看你自己怎么想,工作中那就得看公司的代码规范喽。。
假设A方法调用B方法,好比A是B的领导,指派B去干活,工作中出了纰漏,哪怕不是B的责任(比如B又调用了C,C出错了)
如果B没这个权限的话,他就该把问题上报给他的领导
而不是私自把这个问题掩盖掉(catch且并不再throw出去)try{}finally{} B没权限处理,所以直接上报,但是呢,在上报前,先要把开始的工作收尾(finally)
try{}catch(e){throw new AnotherException(e);}finally{} B没权限处理,所以直接上报,但是呢,在上报前,先要把开始的工作收尾(finally),同时领导只接受一种回报格式,所以要整理一下,比如new AnotherException(e)
异常不是累赘,而是朋友,是一种优美的简化技术举个例子:
Windows自带的 计算器,1除以0,会表示出【0不能做分母(或者类似的信息)】,这里肯定用了异常技术
但是程序员们会想,我事前判断一下分母是不是0,分分秒的就解决了问题,用神马异常?请继续看:
输入1000000000000000,然后按下乘号,按下等于,再按下乘号,再按下等于,这样反复几回
就会出现【已经溢出(或者类似的信息)】,这里肯定用了异常技术
我,我,我事前检查一下每个乘法左右两边的数,看看它们相乘会不会溢出……这个例子说明,当程序中有针对用户输入数据的处理时,
需要尽可能的检验数据输入的正当性
但是绝大多数输入数据的合法性,不太可能事前都一一考虑到
这个时候,异常处理就会大显身手
写异常处理反倒比较简单,代码变少了很多;试想一下,不写异常处理,不论你写几千几万行检查代码,都很容易疏漏掉一些特殊的情况。再举个例子:
打开Windows自带的记事本,随便输入几个文字
然后保存文件,指定文件名为con【注意,不带后面的.txt】
在我的机器上,显示了【con这个名字已经被Windows预约了,请使用其他的名字】客页!我最开始写代码的时候,怎么知道con是Windows的预约名称不能使用?
我最开始写代码的时候,怎么知道 用户 要把一个文件保存到 路径名超过 256 个字符的地方去?
我最开始写代码的时候,怎么知道 用户 试着把一个大文件保存到一个没有多少剩余空间的U盘里!?如果IDE和文本编辑器里没有异常处理,估计程序员早就抓狂了……
一般是把异常跑抛出去让上一级处理、
平时我很少写catch。不是说不做异常处理,而是因为相关的处理,都是通过框架解决。
而且,我经历的绝大部分场合,对于异常处理来说,都是标准的:
1 记录尽可能详细的日志信息,尤其是打印完整的stacktrace
2 对事务进行回滚操作
3 向用户报告比较简明易懂的错误消息而这些标准流程,完全只需要在框架层面进行配置即可,很少需要自己手写catch。当然,把catch当作条件判断,流程控制的情况除外。
这样的好处在于,如果出现bug之后,可以快速的定位是哪里出的问题。
通常代码多了之后。逻辑可能会不清,或者也可能出现手误的情况,写异常对查错有好处。
记录到log文件
这个是必须的
简单一个例子,一个银行转帐的事务:
1、转出帐号减去转帐金额
2、转入帐号加上转帐金额。
如果在“1、转出帐号减转账金额”的方法调用时,发生异常,但只捕捉不处理,程序继续执行”2、转入帐号加上转帐金额“的操作,则后果是转账成功后,转出帐号的金额不变,但转入帐号金额却增加了。
这样的后果是很严重的。
举一个简单的例子:现在给你一个字符串,要求你把它转化成整数!
String s="-12s";
int a=Integer.parseInt(s);
你可以不做异常处理,但是执行到这里的时候,包装类Integer的方法paraseInt还是会抛出异常!!!
有没有更好的办法?
有!事先判断String s是否可以转换为int
String s="-12s";
if(s!=null&&(s.matches("-\\d++")||s.matches("\\d++"))){
int a=Integer.parseInt(s);
}else{
System.out.println("s无法转换成int");
}
运行时异常就要凭经验手动加了