日期:2014-05-20  浏览次数:20945 次

异常处理的thows和thow以及自定义异常处理如何用!
大家教教我吧!这块内容我不懂啊!

------解决方案--------------------
区别一:throw 是语句抛出一个异常;throws 是方法抛出一个异常;

throw语法:throw <异常对象>

在方法声明中,添加throws子句表示该方法将抛出异常。

throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]

其中:异常类可以声明多个,用逗号分割。

区别二:throws可以单独使用,但throw不能;

区别三:throw要么和try-catch-finally语句配套使用,要么与throws配套使用。但throws可以单独使用,然后再由处理异常的方法捕获。


******************

throws说明你有哪个可能,倾向
throw的话,那就是你把那个倾向变成真实的了 
同时: 
1)throws出现在方法函数头;而throw出现在函数体;
2)throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常;
3)两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。


*************
以上为我找的答案,可供参考!
实际上以后用的多了,自然就会用了,我认为太深究没有太大意义
------解决方案--------------------
第16讲:异常处理
16.1、简介:
异常是程序执行时遇到的任何错误情况或意外行为。
以下这些情况都可以引发异常:您的代码或调用的代码(如共享库)中有错误,操作系统资源不可用,公共语言运行库遇到意外情况(如无法验证代码),等等

《Exception Handling for C++》关于异常处理论文,
向对象中每增加一个类,都可能包含一些错误。
Java使用和C++类似的异常处理
1、处理错误的方法有很多流行方法
2、一般方法是把程序处理代码段分散到系统代码中,在可能发生错误的地方处理错误
优点:便于程序员能够条理的看到程序中异常的处理
缺点:异常处理程序“搅乱”代码,程序员很难关心程序本身能否正常完成功能,而只关心了性能。
3、常见异常实例包括:数组下标越界,算法溢出(超出数值表达范围),除数为零,无效参数、内存溢出
异常处理功能:主要处理一些同步异常(除数为0),不宜处理一些异步事件(Disk I/O End、网络信息到达、点击鼠标、敲击键盘)这些最好使用java事件监听。
异常处理程序:能够让系统在出现异常的情况下恢复过来的程序
使用异常处理情况:异常诊断与异常处理不在同一个位置下时使用异常处理程序(若用户一直通过键盘与程序通话,那么就不能使用处理键盘输入处理)
使用异常的注意事项:
1、 异常处理位置与异常发生位置必须不同(若一个程序能够处理自己的错误,那么就采用传统的错误处理方式进行局部处理)
2、 要避免使用异常处理来代替错误处理,若这样就会降低程序的清晰性。
3、 尽管可以使用异常处理来代替错误处理,但会降低性能
4、 异常处理会占用程序的格外执行时间
5、 异常处理能够提高程序的容错性
6、 程序员使用JAVA标准的异常处理功能来代替他们的专用方法,可以在大型项目中提高程序的清晰性
7、 异常是超类Exception继承的子类,主要如何处理“未扑获的异常”,无法预料的异常。 
8、 异常处理在java中原理:









异常处理有Method调用者的调用者或者Method调用者来处理,
9、 异常处理适用分别开发的组件系统
10、 因为一些程序员使用不支持异常处理语言编程时,往往拖延或忘记错误处理程序的编写,故,Java强制程序员从项目一开始就着手进行异常处理,程序员必须投入很大精力把异常处理的策略融合到软件产品中
11、 最好在进行系统设计是就把异常处理融合在系统中,若系统一实现,就很难添加异常处理功能


16.2如何使用异常处理:

在以下情况下使用异常处理:

1、 当方法因无法控制的原因而不能实现其功能时;
2、 处理来自程序组件整体异常,这些程序组件不适宜直接处理异常
3、 在大型项目中,对于每个项目都以一致的方式进行错误处理
4、 在类库中出现每一个异常,都需要一个惟一错误处理,在类库中使用异常处理很合适


16.3 其他的错误处理技术:

处理异常的方法:
1、 在程序可以忽略异常(忽略异常在大型公用软件和关键处理软件可能会导致重大的软件破坏,而自己用的软件,通常可忽略一些错误)
2、 遇到异常时,程序可以根据提示来终止运行(但是处理关键任务是绝对不可以采用,〈神5返回仓温控系统〉?863项目。)


16.4 java异常处理的基础:

java的异常处理适用于在一个方法中能够检测出错误单不能处理错误的情况,这样方法将抛出一个异常(JAVA无法保证“存在”的异常处理程序能够处理某种异常,若“存在”,就“捕获”异常,并处理“异常”,如找不到,那么:

命令行APP/控制台APP(不基于GUI),当异常不能被“捕获”,那么该程序会运行默认异常处理程序,退出JAVA,若Applet或基于GUI的APP,当一个异常未被“捕获”,GUI在运行默认异常处理程序依然会显示,而且用户使用的GUI处于一个不稳定的状态)

JAVA代码中:1、可能出现异常的代码-----{ …… try{抛出一个异常}-----程序块 ……catch1{异常处理程序1};……catch100 {异常处理程序100}; finally{无类是否出现异常都执行的程序} 
1、 若try抛出Exception,App寻找在Catch1~100寻找合适异常处理程序,若找到,执行CATCH{}代码,没有,执行最后一个catch{}后代码
2、 若try未抛出Exception,就执行执行最后一个catch{}后代码。

3、 throws子句来抛出指定的异常,异常抛出点(throws 语句位置、try{}程序块、try()程序块中直接和间接调用的方法中)

4、 java采用终止方式异常处理,不是恢复方式的异常处理

5、 发生异常时,异常周围信息(抛出对象本身类型)-------------异常处理程序

12.5一个异常处理的简单实例:除数为0

需求:使用一个小应用程序,完成两数相除的计算



------解决方案--------------------
分析:
我们使用有顶向下,逐步求精的方法:
1、 首步我们一般在程序中先处理我们完成异常处理的类,完成异常处理的功能,因为可能除数为0是会出现异常,我们查找java.lang包中各个Exception类,发现RuntimeException类集合中的ArithmeticException可以处理运算异常,我们就让一个DivideByZeroException(继承于ArithmeticException) 更特殊类来专门处理除数为零的异常。在DivideByZeroException()中调用super()(专门初始化传如参数的方法)来传如异常处理后对象描述(初始状态)
2、 第一步,创建一个Applet类完成完成两数相除的计算
3、 第二步:处理对象与方法:声明4个GUI组件对象和1个用于存储计算结果(double)的和2个被除数与除数基本类型(int)

A、 初始化对象方法init()
B、 处理当除数键盘输入后,触发事件进行计算的方法(返回判断)action()

a、 因为在此方法中,有可能出现除数为0的可能,而且在计算中才回出现错误,错误出现后需要进行处理异常,那么我在其中使用try{}程序块先调用方法quotient进行计算result=quotient(number1,number2),1、然后让quotient()方法(使用方法体中的throws Ex{}抛出异常程序块---此为深层嵌套)抛出异常(因为此处理信息比较简单,但存在信息传递,我们让其拖后处理)我们没有显式在try()块中抛出异常。有抛出异常就有获得异常,使用catch{}程序块完成,a)、在quotient()中(实际深层嵌套throws Ex{}抛出异常程序块),当除数=0时,就调用throw子句创建并抛出一个new catch{}“捕获”(指定匹配类型DivideByZeroException) quotient()抛出异常信息(DivideByZeroException),而接受此信息是由exception接收,并调用toString()方法把exception转换成字符串,使用showStatus(exception.toString()); 显示出来 (因为需求要求显示异常)。b)、若当除数!=0时,那么就不抛出异常,然后将程序返回到try()程序块中quotient()方法调用处,接着使用showStatus()方法显示算式和结果(number1+”/”+number2+”=”+Double.toString(result))程序将跳过catch{}程序块,action()方法将执行return true