黑马程序员技术交流社区

标题: 分析下这个程序的执行过程 [打印本页]

作者: 贾波    时间: 2013-11-30 13:18
标题: 分析下这个程序的执行过程
  1. public class Test {

  2.         private static int count = 0;

  3.         static {
  4.                 count++;
  5.         }

  6.         public Test() {
  7.                 System.out.println(count);
  8.                 count++;
  9.         }

  10.         private void throwException() throws Exception {
  11.                 throw new Exception();
  12.         }

  13.         public int getCount(boolean isThrow) {
  14.                 try {
  15.                         if (isThrow)
  16.                                 throwException();
  17.                         return (--count);
  18.                 } catch (Exception e) {
  19.                         System.out.println(count++);
  20.                 } finally {
  21.                         System.out.println(++count);
  22.                 }
  23.                 return ++count;
  24.         }

  25.         public static void main(String[] args) {
  26.                 Test test = new Test();
  27.                 System.out.println(test.getCount(false));
  28.                 System.out.println(test.getCount(true));
  29.         }

  30. }
复制代码
输出结果:
1
2
1
2
4
5



作者: 王东旭    时间: 2013-11-30 21:33
public class Test {

        private static int count = 0;

        static {
                count++;
        }

        public Test() {
                System.out.println(count);
                count++;
        }

        private void throwException() throws Exception {
                throw new Exception();
        }

        public int getCount(boolean isThrow) {
                try {
                        if (isThrow)
                                throwException();
                        return (--count);
                } catch (Exception e) {
                        System.out.println(count++);
                } finally {
                        System.out.println(++count);
                }
                return ++count;
        }

        public static void main(String[] args) {
                                //从mian方法入手,首先加载静态代码块,count++,此时count=1,然后执行构造函数,打印1,count自增,count=2;
                Test test = new Test();
                                //下面调用getCount方法.传入false, 在try中--count,return语句已经记录下返回值为1 此时count=1.紧接着执行finally语句,打印2
                                //返回1,打印1,此时count为2
                System.out.println(test.getCount(false));
                                //调用getCount方法,抛出异常,进入catch语句,打印2,结束后count=3,继续执行finally语句,打印4,结束后count=4,最后return 5
                                //count = 5,打印5
                System.out.println(test.getCount(true));
        }

}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2