java中异常处理语句错误用法的是_Java异常处理中try,catch,finally的各种组合用法...

在看android的SystemServer.java 由于不懂JAVA,所以看一点记录一点。

本文主要是针对JAVA的异常处理的一些语句进行分析;

谈不上讲解,因为JAVA还不熟,各种百度,google,归总一下,便成了此文;

try { [tryStatements]}

catch(exception)

{ [catchStatements]}

finally { [finallyStatements]}

参数

tryStatements

可选。可能发生错误的语句。

exception

必选。任何变量名称。exception 的初始值是引发的错误的值。

catchStatements

可选。处理在相关联的 tryStatement 中发生的错误的语句。

finallyStatements

可选。在所有其他的错误过程发生之后被无条件执行的语句。

备注

try...catch...finally 语句提供了一种方法,可处理给定代码块中可能会发生的一些或全部错误,同时仍保持代码的运行。如果发生了程序员没有处理的错误,JScript 只给用户提供它的一般错误信息,就好象没有错误处理一样。

tryStatements 参数包含可能发生错误的代码,

而 catchStatement 则包含了可处理任何发生的错误的代码。

如果在 tryStatements 中发生了一个错误,

则将把程序控制传递给 catchStatements 来处理该错误。

exception 的初始值是发生在 tryStatements 中发生的错误的值。

如果不发生错误,则不执行 catchStatements。

如果在与发生错误的 tryStatements 相关联的 catchStatements 中不能处理该错误,则使用 throw 语句将这个错误传播或重新引发给更高级的错误处理程序。

在执行完 tryStatements 中的语句,并在 catchStatements 的所有错误处理发生之后,可无条件执行 finallyStatements 中的语句。

请注意,即使 try 或 catch 块中出现返回语句,或 catch 块中引发错误,都会执行 finallyStatements 中的代码。

finallyStatments 一定会始终运行。

1.try+catch

程序的流程是:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句

try {

/*

* NotificationManagerService is dependant on MountService,

* (for media / usb notifications) so we must start MountService first.

*/

Slog.i(TAG, "Mount Service");

mountService = new MountService(context);

ServiceManager.addService("mount", mountService);

} catch (Throwable e) {

reportWtf("starting Mount Service", e);

上面语句,就会先执行try块中的code,如果有异常,则抛出转到catch块去处理;之后执行reportWtf语句;

2.try+catch+finally

程序的流程是:运行到try块中,如果有异常抛出,则转到catch块,catch块执行完毕后,执行finally块的代码,再执行finally块后面的代码。

如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行finally块后面的语句

try {

display.systemReady(safeMode, onlyCore);

} catch (Throwable e) {

reportWtf("making Display Manager Service ready", e);

}

// These are needed to propagate to the runnable below.

final Context contextF = context;

3.try+finally

程序的流程是:运行到try块中,如果有异常抛出的话,程序转向执行finally块的代码。那末finally块后面的代码还会被执行吗?不会!因为你没有处理异常,所以遇到异常后,执行完finally后,方法就已抛出异常的方式退出了。

这种方式中要注意的是,由于你没有捕获异常,所以要在方法后面声明抛出异常

没有找到这种方法的code;

共同点:

1.在catch块和finally块中仍然可以再抛出新的异常

例如 throw new Exception("illegal invoked");

如果对于新抛出的异常没有写try的话,则要在方法后面声明抛出异常

反之,如果给catch块或finally块里的异常再套上一层try,catch的话,方法后面就不必声明异常了。 (这两句也没有懂~)

注意点:

每次执行后输出结果的顺序可能都不太相同,这是因为采用不同的流打印的结果,不必太在意

1. public class Test1 {

2.

3. /**

4. * @param args

5. * @throws MyException

6. */

7. public static void main(String[] args) {

8. //public static void main(String[] args) throws MyException {

9.

10. // TODO Auto-generated method stub

11. TestException te = new TestException();

12.

13. /*

14. * try+catch

15. *

16. try{

17. te.test();

18. }catch(MyException e){

19. e.printStackTrace();

20. }

21. System.out.println("after exception");

22. */

23.

24. /*

25. * try+catch+finally

26. *

27. try{

28. te.test();

29. }catch(MyException e){

30. e.printStackTrace();

31. }finally{

32. System.out.println("entry finally block");

33. }

34. System.out.println("after exception");

35. */

36.

37.

38. /*

39. * try+finally

40. *

41. try{

42. te.test();

43. }finally{

44. System.out.println("entry finally block");

45. }

46.

47. System.out.println("after exception");

48. */

49.

50. }

51.

52. }

53.

54. class TestException {

55. void test() throws MyException{

56. throw new MyException("illegal invoked");

57. }

58. }

59.

60. class MyException extends Exception{

61. MyException(String msg){

62. super(msg);

63. }

64. }

你可能感兴趣的:(java中异常处理语句错误用法的是_Java异常处理中try,catch,finally的各种组合用法...)