A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邹学良 中级黑马   /  2013-3-7 12:43  /  1995 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邹学良 于 2013-3-7 13:31 编辑
  1. public class Test1 {

  2. public static void main(String[] args) {
  3. run();
  4. }
  5. private static void run() {
  6. try {
  7. System.out.println("try");
  8. run();
  9. }
  10. catch (Throwable e) {
  11. System.out.println("catch");
  12. run();
  13. }
  14. finally {
  15. System.out.println("finally");
  16. run();
  17. }
  18. }
  19. }
复制代码
一直不停打印try和finally
TRY和FINALLY语句交替执行,那么它打印的应该是TRY   TRY FINALLY交替打印
但打印出来的为什么是tryfinallyfinally    tryfinallyfinally  try这种交替
为什么会出现这种情况?

大神们说下代码的执行步骤??

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

14 个回复

倒序浏览
没异常肯定就一直不停打印try和finally了
回复 使用道具 举报
是因为你写的是一个类似于死循环的程序。你在try,catch,finally中都调用了run()方法。
一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。
用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。
finally为确保一段代码不管发生什么"异常"都被执行一段代码。

希望对你有所帮助!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
不错的死循环哦,学习了,原来死循环还可以这么写
回复 使用道具 举报
袁见 发表于 2013-3-7 12:51
是因为你写的是一个类似于死循环的程序。你在try,catch,finally中都调用了run()方法。
一般情况下是用try ...

我也知道这个,问题没说清楚
TRY和FINALLY语句交替执行,那么它打印的应该是TRY  FINALLY TRY FINALLY交替打印
但打印出来的是tryfinallyfinally    tryfinallyfinally  try这种交替
回复 使用道具 举报
邹学良 发表于 2013-3-7 13:05
我也知道这个,问题没说清楚
TRY和FINALLY语句交替执行,那么它打印的应该是TRY  FINALLY TRY FINALLY交 ...

这个肯定是不会交替执行的,因为你在try和finally中都掉了run方法。
回复 使用道具 举报
袁见 发表于 2013-3-7 13:09
这个肯定是不会交替执行的,因为你在try和finally中都掉了run方法。

那它是在执行完TRY打印部分后,是先调用RUN还是先执行FINALLY?
回复 使用道具 举报
袁见 发表于 2013-3-7 13:09
这个肯定是不会交替执行的,因为你在try和finally中都掉了run方法。

为什么你说"这个肯定是不会交替执行的,因为你在try和finally中都掉了run方法。"
还是不明白,可以把原因说详细的?
回复 使用道具 举报
邹学良 发表于 2013-3-7 13:24
那它是在执行完TRY打印部分后,是先调用RUN还是先执行FINALLY?

当执行到try中时,首先打印一句话try,然后在调用run方法,run开始执行有要打印一句try,但第一个执行了try,发现没异常,就会去执行finally中的代码,但在try中调用的run方法可能有执行完了,马上又执行finally。所以打印处理的结果,可能是tryfinallyfinally也有可能是trytryfinally。
回复 使用道具 举报
楼主,我发现有没改动代码的情况下测试,发现没次结果都不一样,不并是你所说的那样
不知其他人测得结果是怎么的?
回复 使用道具 举报
本帖最后由 邹学良 于 2013-3-7 13:58 编辑
谢洋 发表于 2013-3-7 13:44
楼主,我发现有没改动代码的情况下测试,发现没次结果都不一样,不并是你所说的那样
不知其他人测得结果是 ...


都是小有不同,但tryfinallyfinally
tryfinallyfinally
try
都是一样

这也就是我不明白的地方
回复 使用道具 举报
邹学良 发表于 2013-3-7 13:56
都是小有不同,但tryfinallyfinally
tryfinallyfinally
try

大多数情况跟你说的一样,我试了n多次后,出现类似于
finallyfinally
finallyfinally
try
try
try
finally
反正好像没有规律
回复 使用道具 举报
我的电脑上运行的是一直打印try,要是这样 就不难理解了,那就是在try中在不停的递归run()方法。
回复 使用道具 举报
黑马潘浩 发表于 2013-3-7 14:37
我的电脑上运行的是一直打印try,要是这样 就不难理解了,那就是在try中在不停的递归run()方法。 ...


久打印一下结果就不同了
回复 使用道具 举报
你这种 递归 方法不会有确定的值得,而且你不是一个递归 你是在一个方法里调用自己多次 那就想多线程似的  看谁抢到CPU了    所以打印是随即的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马