zoukankan      html  css  js  c++  java
  • 一道笔试题引发的血案之查看程序运行结果

    判断程序输出的结果

    public class Test {
        
        public static void main(String[] args) {
            System.out.println(new B().getValue());
        }
        static class A {
            protected int value;
            public A(int v) {
                setValue(v);
            }
            public void setValue(int value) {
                this.value = value;
            }
            public int getValue() {
                try {
                    value++;
                    return value;
                }catch (Exception e) {
                    System.out.println(e.toString());
                }finally {
                    this.setValue(value);
                    System.out.println(value);
                }
                return value;
            }
        }
        static class B extends A {
            public B() {
                super(5);
                setValue(getValue() - 3);
            }
            public void setValue(int value) {
                super.setValue(2 * value);
            }
        }
        
    }

    答案

    分析过程

    实例化B首先实例化A

    在实例化B的时候,调用B的构造器,并将5作为参数传递给A的构造器,执行setValue方法,此时B类内已经对继承来的setValue进行了覆写,在内部又调用了A的setValue并将 2* 5=10 作为参数传递进去

    此时B的成员value值是10,然后执行A的构造器内的setValue(getValue() -3)这一行代码,首先执行他继承来的getValue方法

    在getValue中,value的值加1变为11,此时11要作为此方法的返回值被返回,接下来执行finally块内的代码,再次调用B的setValue方法将value的值设置为22,并将value打印出来(22

    接下来setValue(getValue() - 3)内的变量就得到返回了,那就是11,于是将其减去3得到8,并作为参数传递,接下来又是调用setValue将8乘以2得到16进行传递,然后按照上面的顺序 加1 得到17 并等待返回

    然后finally块内,17乘以2得到34输出(34

    最后17被返回,打印(17


  • 相关阅读:
    div中嵌套div中使用margin-top失效问题
    thinkphp点击导航变色
    thinkphp I() 方法
    判断是手机端还是电脑端 isMobile()
    手机端H5 header定义样式
    AR.Drone 2.0四轴飞机体验:最好的玩具航拍器
    这是一个专注于电脑技术、软件应用、互联网、嵌入式,电子技术行业等的原创IT博客
    ul li列子
    [HTML]去除li前面的小黑点,和ul、LI部分属性
    Bad update sites
  • 原文地址:https://www.cnblogs.com/xinglichao/p/10482063.html
Copyright © 2011-2022 走看看