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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张凯 中级黑马   /  2012-7-21 21:26  /  2331 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张凯 于 2012-7-22 09:27 编辑

static int counter=0;
while(true){
try {
if(counter++<2){
throw new MyNewException();}
System.out.println("No Exception");
}catch(MyNewException ex){
System.err.println("MyNewException happened");
}finally{
System.err.println("finally is called");
if(counter>2) {
System.out.println("循环了【"+counter+"】次");
break;}
}

在这里counter++<2,
counter是自加了之后再比较还是比较后再自加?
如果是自加后再与2进行比较。那么当counter已经为1的时候。那么counter自加后为2了。那么既不满足counter<2,也不满足counter>2。那么这个循环不是进去死循环了吗?
帮忙解决一下。详细点~谢谢~

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
本帖最后由 凉宫蛋蛋 于 2012-7-22 03:42 编辑
  1. package Heima001_DumpAndDown100;

  2. import java.io.IOException;

  3. public class test {
  4.         public static void main(String[] args) throws IOException {
  5.                 int counter = 0;
  6.                 while (true) {
  7.                         try {
  8.                                 //1.1第一轮,count=0
  9.                                 //1.2先判断 0 < 2?
  10.                                 if (counter++ < 2) {
  11.                                         //1.3上面判断成立,进入这里后,counter = 1
  12.                                         System.out.println(counter);
  13.                                         //1.4抛出异常,
  14.                                         throw new Exception();
  15.                                 }
  16.                                 System.out.println("No Exception");
  17.                                 //1.5
  18.                         } catch (Exception e) {
  19.                                 //1.6
  20.                                 System.err.println("MyNewException happened");
  21.                                 //1.7
  22.                         } finally {
  23.                                 //1.8
  24.                                 System.err.println("finally is called");
  25.                                 //1.9counter为1 1>2 ?不成立,回到while
  26.                                 if (counter > 2) {
  27.                                         System.out.println("循环了【" + counter + "】次");
  28.                                         break;
  29.                                 }
  30.                         }
  31.                 }
  32.         }
  33. }
复制代码
  1. package Heima001_DumpAndDown100;

  2. import java.io.IOException;

  3. public class test {
  4.         public static void main(String[] args) throws IOException {
  5.                 int counter = 0;
  6.                 while (true) {
  7.                         try {
  8.                                 //2.1第二轮,count=1
  9.                                 //2.2先判断 1 < 2?
  10.                                 if (counter++ < 2) {
  11.                                         //2.3上面判断成立,进入这里后,counter = 2
  12.                                         System.out.println(counter);
  13.                                         //2.4抛出异常,
  14.                                         throw new Exception();
  15.                                 }
  16.                                 System.out.println("No Exception");
  17.                                 //2.5
  18.                         } catch (Exception e) {
  19.                                 //2.6
  20.                                 System.err.println("MyNewException happened");
  21.                                 //2.7
  22.                         } finally {
  23.                                 //2.8
  24.                                 System.err.println("finally is called");
  25.                                 //2.9counter为2 2>2 ?不成立,回到while
  26.                                 if (counter > 2) {
  27.                                         System.out.println("循环了【" + counter + "】次");
  28.                                         break;
  29.                                 }
  30.                         }
  31.                 }
  32.         }
  33. }
复制代码
  1. package Heima001_DumpAndDown100;

  2. import java.io.IOException;

  3. public class test {
  4.         public static void main(String[] args) throws IOException {
  5.                 int counter = 0;
  6.                 while (true) {
  7.                         try {
  8.                                 //3.1第三轮,count=2
  9.                                 //3.2先判断 2 < 2? 不成立到catch
  10.                                 if (counter++ < 2) {
  11.                                        
  12.                                         System.out.println(counter);
  13.                                        
  14.                                         throw new Exception();
  15.                                 }
  16.                                 System.out.println("No Exception");
  17.                                 
  18.                         } catch (Exception e) {
  19.                                 //3.3来到这里后counter为3
  20.                                 System.err.println("MyNewException happened");
  21.                                 //3.4
  22.                         } finally {
  23.                                 //3.5
  24.                                 System.err.println("finally is called");
  25.                                 //3.6counter为3 3>2 ?成立
  26.                                 if (counter > 2) {
  27.                                         //3.7输出counter = 3
  28.                                         System.out.println("循环了【" + counter + "】次");
  29.                                         //3.8
  30.                                         break;
  31.                                 }
  32.                         }
  33.                 }
  34.                 //3.9跳出while
  35.         }
  36. }




  37. counter++是先判断后自加

  38. ++counter就是先自加后判断
  39. 求加分
复制代码

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
counter++是先判断后自加
++counter就是先自加后判断
回复 使用道具 举报
++放要后面是先使用,后加1.
即如果是付值,则先付值,后加1的,
如果是比较,则先比较,后加1.
你的代码是先运行了两次try中的语句,
只不过是运行一次,抛出一次异常,
抛出一次异常,catch就抓住一次异常,
其运行顺序可以这样来表示:try-->catch-->finally-->try-->catch-->finally-->try-->finally
当counter加到3时,最后一次循环try中没有抛异常,跳过catch,直接运行finally中的语句了
回复 使用道具 举报
首先 楼主的代码比较乱且没有主函数,我根据方法体内的语句分析楼主下面的问题

在这里counter++<2, //++ 运算符 如果在变量名前++counter 先自加再比较
                      如果在后面counter++先比较后自加

counter是自加了之后再比较还是比较后再自加?//所以 上述代码是先比较,后自加;

如果是自加后再与2进行比较。那么当counter已经为1的时候。那么counter自加后为2了。
那么既不满足counter<2,也不满足counter>2。那么这个循环不是进去死循环了吗?
//根据楼主方法体内的代码 counter的值
while(true){
  try {
  if(counter++<2){
每循环一次都会+1,

if(counter>2) {
System.out.println("循环了【"+counter+"】次");
break;}
所以当counter=3时 会跳出循环,程序共循环三次;

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
counter++先加1后比较,++counter先比较后加1
当进行第三次循环时,counter值为3,进入finally的if语句,输出”循环了3次“,跳出while循环
回复 使用道具 举报
林康春 黑马帝 2012-7-21 23:55:25
7#
回复 使用道具 举报
韦前辈,我的解释写在代码里边了,怎么我的就不能加分呢...

点评

建议你回答的时候先针对楼主的问题或代码进行回答,回答好了之后再扩展。  发表于 2012-7-22 11:03
回复 使用道具 举报
张凯 中级黑马 2012-7-22 09:27:30
9#
焦晨光 发表于 2012-7-21 22:28
首先 楼主的代码比较乱且没有主函数,我根据方法体内的语句分析楼主下面的问题

在这里counter++ ...

非常感谢,代码是有点乱。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马