(1)
  public static void main(String[] args){
      int i = 0;
      for(int j=0; j<100; j++){
        i=i++;
        System.out.println(i);
      }
    }
这个程序的输出结果为什么是100个0啊?i=i++;i初值为0先赋给i后再++呀,i不是1吗?(2)try{
   div2();
   System.out.println("=====我想要执行====");
      }catch(Throwable a){
    a.printStackTrace();
    System.out.println("------------");
    System.out.println(a.getCause());
        }
   System.out.println("-----");


public static void div() throws Throwable{
throw new Throwable("div 中的Throwable。");
}

public static void div2() throws Throwable{
try{
div();
return;
}catch(Throwable a){
a.printStackTrace();
System.out.println("----------------");
throw new Throwable("div2 中的Throwable。", a);
}finally{
System.out.println("==========我想永远都执行==========");
}
}这段程序到底有没有对div2()方法进行捕获啊?而且怎样才能让System.out.println("=====我想要执行====");执行呢?

解决方案 »

  1.   


      public static void main(String[] args){
      int i = 0;
      for(int j=0; j<100; j++){
      i=++i;
      System.out.println(i);
      }
      }
      

  2.   

    int i = 0;
    i++的话 i会不停的往上加,就是你需要的结果但你搞了个i = i++
    这样,i好不容易加了1,又被你玩回去了,明白不
    原因: 
    i = i++
    赋值运算符的优先级是从右到左结合。i++作为表达式,它的值是0,然后i的值加1,i就是1了。最后,=的左边是给i赋值,就是i++表达式=0.根因:=操作符的结合顺序以及i++的特性
      

  3.   

    对于第一个不应该是i=i++;直接i++就可以达到你的要求,i++可以理解为 i(new)=i(old)+1 return i(old)
    i=i++;就使虽然执行了 i(new)=i(old)+1但给i赋值始终是i(old)即为0
    对于第二个有对div2()方法进行捕获,因为捕获了所有才不会有System.out.println("=====我想要执行====")的输出
      

  4.   

    第一个问题楼上已经解释的很清楚了,第二个问题,你的div2()方法已经进行捕获,而且System.out.println(""==========我想永远都执行=========="");肯定会执行的,无论div2()是否被捕获
      

  5.   

    i++是先执行程序,再加1
    i=i++的意思就是,把0首先赋值给i,然后i再加1
    这样,i始终都是0
    你应该这样写public static void main(String[] args){
          int i = 0;
          for(int j=0; j<100; j++){
            //直接写i++就可以,输出结果是1-100
            i++;
            System.out.println(i);
          }
        }
      

  6.   

       public static void main(String[] args){
          int i = 0;
          for(int j=0; j<100; j++){
            i=(i++);
            System.out.println(i);
          }
        }为什么这句话 i=(i++);加了括号还是会先运行赋值语句呀,为什么结果还是100个0呀???
    帮忙看一下吧!!!
      

  7.   


    你这问题
    第一个,i=i++;(先是赋值了,再++的,蛋来蛋去,还是自己玩~)
    第二个,捕获了不会执行FINALLY后面的,反之,就会。
      

  8.   

    这是因为:i++是按如下方式进行处理的:
    第一步:t=i;
    第二步:i=i+1;
    第三步:需要表达式i++的值的地方,用t来代替。
    因此:你的代码: i=(i++);
    其实就是:
    t=i;  //对应第一步
    i=i+1; //对应第二步
    i=t;   //对应第三步
      

  9.   


    package exceptionDemo;public class Test2 {
    public static void main(String[] args) {
    try {
    div2();
    System.out.println("=====我想要执行====");
    } catch (Throwable a) {
    //a.printStackTrace();
    System.out.println("------------2");
    System.out.println(a.getCause());
    }
    System.out.println("-------3");
    } public static void div() throws Throwable {
    throw new Throwable("div 中的Throwable。");
    } public static void div2() throws Throwable {
    try {
    div();
    return;
    } catch (Throwable a) {
    //a.printStackTrace();
    System.out.println("----------------1");
    throw new Throwable("div2 中的Throwable。", a);
    } finally {
    System.out.println("==========我想永远都执行==========");
    } }
    }
    执行顺序。系统执行语句打印异常的顺序是不定的,暂时注释便于看清
    ----------------1
    ==========我想永远都执行==========
    ------------2
    java.lang.Throwable: div 中的Throwable。
    -------3div2()方法抛出了异常并且被捕获,所以不会执行“我想要执行”语句
      

  10.   

    但如果div2()方法没有被捕获是不是就会执行System.out.println("=====我想要执行====");语句啊
      

  11.   

    第一题是先加还是先覆值的问题,i=i++ ,是先覆值后运++第二题的话如果要执行("=====我想要执行====");
    就须在捕获之前进行,如果捕获了,就不会执行了,如下就会执行("=====我想要执行====");public class Test2 {
        public static void main(String[] args) {
            try {
    System.out.println("=====我想要执行====");
                div2();
                
            } catch (Throwable a) {
                //a.printStackTrace();
                System.out.println("------------");
                System.out.println(a.getCause());
            }
            System.out.println("-------");
        }    public static void div() throws Throwable {
            throw new Throwable("div 中的Throwable。");
        }    public static void div2() throws Throwable {
            try {
                div();
                return;
            } catch (Throwable a) {
                //a.printStackTrace();
                System.out.println("----------------");
                throw new Throwable("div2 中的Throwable。", a);
            } finally {
                System.out.println("==========我想永远都执行==========");
            }    }
    }
      

  12.   

    问一下,怎样才算异常被捕获了啊??是不是有catch{}语句就表示异常被捕获了啊
      

  13.   

    问一下,怎样才算异常被捕获了啊??是不是有catch{}语句就表示异常被捕获了啊