Java异常基础一
2009-09-11 19:46
246 查看
编程时,碰到一种不希望看到,也无法给返回值,一般输出一句话:打印错误或return,这样,程序是不健壮的。那如何让程序更加健壮?碰到不希望看到的该如何办?
程序运行过程:main()调用A方法,A方法再调用B方法......,就像公司中CEO要布置任务给部门总监,总监再把任务给经理,经理再分给基层职员,CEO不会自己去做,一层一层分下去,再一层一层返回来;结构化设计的思想就是尽量将程序分下去,最基层的方法执行后逐层往上返回,程序执行的过程就是方法调用的过程。如果在方法调用过程中,一旦出现一些异常情况,如职员给经理准备财务报表的过程中突然发现报表丢失,遇到这种突发异常,首先看在所管辖或职权范围内能否找到数据,如果找不到数据一般会向上报告给经理,经理怎么办?他会在他所管辖的范围内找一次,他有可能找到,如在他的电脑中有报表,就把这个异常处理了;如果经理也不知道,他会再往上报给总监,总监也一样先找一次,如果找到解决办法就解决了,如果解决不了在程序中会再往上报,报给CEO,但在实际工作中是不可能往上报了(?因为报上去后CEO知情,有可能就在它的文件柜里有,可能不大,CEO也不知情,CEO怎么办?告诉上帝,上帝说:”连报表都没有,唉,算了,你们不要做公司“,OK,公司倒闭),上帝就是Java虚拟机,虚拟机就会终止你程序的运行。
那么在这个过程中,哪个级别去处理最好?有什么样的原则?思考:1、谁知情谁处理!2、谁负责谁处理!公司规定财务报表由经理保管,他就负责;3、谁导致谁处理!公司总监要2009第2季度的报表,经理就把任务分配给3个职员,A职员负责4月份,B职员负责5月份,C职员负责8月份,但现在是8月份还没结束,所以不能出报表,没办法,告诉经理,这时候就得经理处理,因为经理将错误的参数(8月份)传给职员,所以经理处理。
以上共2个问题:1、何时抛出异常?2、何时处理异常?
异常处理实际上在做应急预案,如果出现某些异常情况应该怎么去处理,要预先处理好。
异常分类:
Exception (异常)
一般是可以恢复的,程序员可以自己定义的,或者其它业务上的问题;
Error(错误)
,严重的,错误的,不可恢复的系统级的问题,如,在程序执行过程中发现是个无限递归,会导致空间溢出,只能终止。注意这个Error和开发过程中遇到的问题是不一样,开发中遇到的问题是编译时问题(错误或警告),编译时问题一般都是语法问题。我们现在讲的是运行时异常或错误。
我们计划的异常处理都是指Exception的处理。
Exception异常又分为:RuntimeException(运行时异常,也叫未检查异常或不受检查异常)和已检查异常(或受检查异常):
已检查异常
是指程序员已经足够小心的检查了他的代码,但是还是不能保证代码不出现异常;如,程序要访问某个文件,但访问时文件不存在,这和程序本身没有太大关系;再如,程序要进行网络连接,但执行时没有连接网线,这些问题都是已检查异常。
未检查异常
一般是由程序员没有细心检查代码,而导致的如空指针异常、数组越界、类型转换异常等都是由于程序员粗心大意造成的。这些异常是在编码过程中是能够避免的。
看到此你需要思考:我们需要处理的到底是已检查异常还是未检查异常?如一幢大楼运行过程中被雷击中,这肯定是已检查异常,但运行过程中发现有个地方四周没有窗户和门,这就是未检查异常,那到底我们需要针对哪个异常进行应急预案呢?当验收大楼时肯定政府部门要检查你的抗震级别,消防措施等,这些措施是你在修建时必须考虑,而且要求是强制执行的,那么这个要求就是必须处理的,如果不处理则编译通不过。如果出现未检查异常,那就只能加门或窗户,即修改代码了。
从另外一个角度来讲,已检查异常(受检查异常)就是受编译器检查的异常。
程序运行过程:main()调用A方法,A方法再调用B方法......,就像公司中CEO要布置任务给部门总监,总监再把任务给经理,经理再分给基层职员,CEO不会自己去做,一层一层分下去,再一层一层返回来;结构化设计的思想就是尽量将程序分下去,最基层的方法执行后逐层往上返回,程序执行的过程就是方法调用的过程。如果在方法调用过程中,一旦出现一些异常情况,如职员给经理准备财务报表的过程中突然发现报表丢失,遇到这种突发异常,首先看在所管辖或职权范围内能否找到数据,如果找不到数据一般会向上报告给经理,经理怎么办?他会在他所管辖的范围内找一次,他有可能找到,如在他的电脑中有报表,就把这个异常处理了;如果经理也不知道,他会再往上报给总监,总监也一样先找一次,如果找到解决办法就解决了,如果解决不了在程序中会再往上报,报给CEO,但在实际工作中是不可能往上报了(?因为报上去后CEO知情,有可能就在它的文件柜里有,可能不大,CEO也不知情,CEO怎么办?告诉上帝,上帝说:”连报表都没有,唉,算了,你们不要做公司“,OK,公司倒闭),上帝就是Java虚拟机,虚拟机就会终止你程序的运行。
那么在这个过程中,哪个级别去处理最好?有什么样的原则?思考:1、谁知情谁处理!2、谁负责谁处理!公司规定财务报表由经理保管,他就负责;3、谁导致谁处理!公司总监要2009第2季度的报表,经理就把任务分配给3个职员,A职员负责4月份,B职员负责5月份,C职员负责8月份,但现在是8月份还没结束,所以不能出报表,没办法,告诉经理,这时候就得经理处理,因为经理将错误的参数(8月份)传给职员,所以经理处理。
以上共2个问题:1、何时抛出异常?2、何时处理异常?
异常处理实际上在做应急预案,如果出现某些异常情况应该怎么去处理,要预先处理好。
异常分类:
Exception (异常)
一般是可以恢复的,程序员可以自己定义的,或者其它业务上的问题;
Error(错误)
,严重的,错误的,不可恢复的系统级的问题,如,在程序执行过程中发现是个无限递归,会导致空间溢出,只能终止。注意这个Error和开发过程中遇到的问题是不一样,开发中遇到的问题是编译时问题(错误或警告),编译时问题一般都是语法问题。我们现在讲的是运行时异常或错误。
我们计划的异常处理都是指Exception的处理。
Exception异常又分为:RuntimeException(运行时异常,也叫未检查异常或不受检查异常)和已检查异常(或受检查异常):
已检查异常
是指程序员已经足够小心的检查了他的代码,但是还是不能保证代码不出现异常;如,程序要访问某个文件,但访问时文件不存在,这和程序本身没有太大关系;再如,程序要进行网络连接,但执行时没有连接网线,这些问题都是已检查异常。
未检查异常
一般是由程序员没有细心检查代码,而导致的如空指针异常、数组越界、类型转换异常等都是由于程序员粗心大意造成的。这些异常是在编码过程中是能够避免的。
看到此你需要思考:我们需要处理的到底是已检查异常还是未检查异常?如一幢大楼运行过程中被雷击中,这肯定是已检查异常,但运行过程中发现有个地方四周没有窗户和门,这就是未检查异常,那到底我们需要针对哪个异常进行应急预案呢?当验收大楼时肯定政府部门要检查你的抗震级别,消防措施等,这些措施是你在修建时必须考虑,而且要求是强制执行的,那么这个要求就是必须处理的,如果不处理则编译通不过。如果出现未检查异常,那就只能加门或窗户,即修改代码了。
从另外一个角度来讲,已检查异常(受检查异常)就是受编译器检查的异常。
相关文章推荐
- Java基础_异常
- JAVA基础必备(十)——异常
- java 基础:异常处理(六)
- 黑马程序员——Java基础---自定义异常类
- Java基础巩固——异常
- JAVA异常基础
- 黑马程序员——Java基础——异常体系
- JAVA基础知识之多线程——线程组和未处理异常
- Java异常基础
- Java基础——异常
- 黑马程序员————Java基础部分之多态、内部类、异常
- 7 Java基础 异常
- Java知多少(43)异常处理基础
- JavaIO与异常基础
- JAVA基础教程之JAVA异常机制
- java基础学习日志--异常案例
- Java基础日记———异常
- java异常与IO流(基础知识)
- java基础知识回顾——异常
- 基础知识《十一》Java异常处理总结