采用Socket连接进行时间同步JAVA程序代码
2014-12-19 09:38
441 查看
//清单一: public class Test1 { public static void main(String[] args) { System.out.println("return value of test(): " + test()); } public static int test() { int i = 1; // if(i == 1) // return 0; System.out.println("the previous statement of try block"); i = i / 0; try { System.out.println("try block"); return i; } finally { System.out.println("finally block"); } } } //结论:如果在try中遇到异常,如果没有catch,则直接退出,不会执行finally /*执行结果:the previous statement of try block Exception in thread "main" java.lang.ArithmeticException: / by zero at com.testfinally.sym.Test1.test(Test1.java:12) at com.testfinally.sym.Test1.main(Test1.java:5) */ //清单二: public class Test2 { public static void main(String[] args) { System.out.println("return value of test(): " + test()); } public static int test() { int i = 1; try { System.out.println("try block"); System.exit(0); return i; } finally { System.out.println("finally block"); } } } //结论同上 /*执行结果:try block*/ //清单三: public class Test3 { public static void main(String[] args) { try { System.out.println("try block"); return; } finally { System.out.println("finally block"); } } } //结论:正常情况下,finally先于return执行 /*执行结果:try block finally block*/ //清单四: public class Test4 { public static void main(String[] args) { System.out.println("reture value of test() : " + test()); } public static int test() { int i = 1; try { System.out.println("try block"); i = 1 / 0; return 1; } catch (Exception e) { System.out.println("exception block"); return 2; } finally { System.out.println("finally block"); } } } //结论:当在try中出现异常,则进入catch;这种情况下三个块中return的优先级:如果、//finally中有return,则函数的返回值就为此return的值;如果finally中没有return,而//catch中有return,则最后的返回值就采用此return的值;如果finally中没有//return,catch中也没有return,则最后的返回值就采用try中的return的值。如果在执行//的时候不需要进入到catch,则不用关注catch中的return值 /*执行结果:try block exception block finally block reture value of test() : 2*/ //清单五: public class Test5 { public static void main(String[] args) { System.out.println("return value of getValue(): " + getValue()); } public static int getValue() { try { return 0; } finally { return 1; } } } //结论同上 /*执行结果:return value of getValue(): 1*/ //清单6: public class Test6 { public static void main(String[] args) { System.out.println("return value of getValue(): " + getValue()); } public static int getValue() { int i = 1; try { return i; } finally { i++; } } } //结论:Java 虚拟机会把 finally 语句块作为 subroutine(对于这个 subroutine 不知该//如何翻译为好,干脆就不翻译了,免得产生歧义和误解。)直接插入到 try 语句块或者 //catch 语句块的控制转移语句之前。但是,还有另外一个不可忽视的因素,那就是在执行 //subroutine(也就是 finally 语句块)之前,try 或者 catch 语句块会保留其返回值到//本地变量表(Local Variable Table)中。待 subroutine 执行完毕之后,再恢复保留的//返回值到操作数栈中,然后通过 return 或者 throw 语句将其返回给该方法的调用者//(invoker)。请注意,前文中我们曾经提到过 return、throw 和 break、continue 的区//别,对于这条规则(保留返回值),只适用于 return 和 throw 语句,不适用于 break //和 continue 语句,因为它们根本就没有返回值。 /*执行结果:return value of getValue(): 1*/ //清单7 public class Test7 { public static void main(String[] args) { System.out.println("return value of getValue(): " + getValue()); } public static int getValue() { int i = 1; try { i = 4; } finally { i++; return i; } } } //结论:return在finally中,情况与清单6就不一样了,属于正常返回 /*执行结果:return value of getValue(): 5*/ //清单8 public class Test8 { public static void main(String[] args) { System.out.println("return value of getValue(): " + getValue()); } public static int getValue() { int i = 1; try { i = 4; } finally { i++; } return i; } } //结论:return在外面也是正常返回 /*执行结果:return value of getValue(): 5*/ //清单9 public class Test9 { public static void main(String[] args) { System.out.println(test()); } public static String test() { try { System.out.println("try block"); return test1(); } finally { System.out.println("finally block"); } } public static String test1() { System.out.println("return statement"); return "after return"; } } //结论:return test1(); 这条语句等同于 : //1. String tmp = test1(); //2. return tmp; /*执行结果:try block return statement finally block after return*/
相关文章推荐
- 采用Socket连接进行时间同步JAVA程序代码
- 跪求java 程序 swing加socket 做的反向连接远程控制软件,公司要我做我只用反向连接做了一个屏幕截取的,可是带事件控制的做不出报错一大堆,我都卡住了一周了。无奈啊!跪求java反向连接 带事件控制的完整代码!
- java application应用程序 使用JDBC和proxool两种方式连接数据库 的测试程序代码
- socket连接 java服务器端 C#客户端进行交互 简单例子
- 利用java在服务器和客服端建立连接,进行通讯(代码实例)
- [编写高质量代码:改善java程序的151个建议]建议74 不推荐使用binarySearch对列表进行检索
- 用JNI进行Java编程---从Java程序调用C/C++代码
- JAVA连接sybase数据库程序代码
- JAVA操作SSL协议,通过Socket访问Https的程序代码例子
- 到现在为止,成功调试完成我的第一个Java程序,意味着我也要进行Java这一行了,请看我的代码!
- 在Java与C程序间进行socket通信的讨论
- Java程序运行时间计时代码
- Java连接各类数据库的程序代码
- JAVA 测试程序代码运行时间
- java与c/c++进行socket通信的一些问题(1)-JSP教程,Java技巧及代码
- [编写高质量代码:改善java程序的151个建议]建议75 集合中元素必须做到compareTo和equals同步
- [编写高质量代码:改善java程序的151个建议]建议73 使用Comparator进行排序