zoukankan      html  css  js  c++  java
  • [牛客网试题] Test.main() 函数执行后的输出是()

     1 public class Test {  
     2     public static void main(String [] args){  
     3         System.out.println(new B().getValue());  
     4     }  
     5     static class A{  
     6         protected int value;  
     7         public A(int v) {  
     8             setValue(v);  
     9         }  
    10         public void setValue(int value){  
    11             this.value = value;  
    12         }  
    13         public int getValue(){  
    14             try{  
    15                 value++;  
    16                 return value;  
    17             } catch(Exception e){  
    18                 System.out.println(e.toString());  
    19             } finally {  
    20                 this.setValue(value);  
    21                 System.out.println(value);  
    22             }  
    23             return value;  
    24         }  
    25     }  
    26     static class B extends A{  
    27         public B() {  
    28             super(5);  
    29             setValue(getValue() - 3);  
    30         }  
    31         public void setValue(int value){  
    32             super.setValue(2 * value);  
    33         }  
    34     }  
    35 }  

    A选项  11 17 34

    B选项  22 74 74

    C选项  6  7  7

    D选项  22  34  17

    答案: D选项

    解析:

    首先,super()函数指的是调用父类的构造方法

    ①    new B()执行B的构造函数

    第一行是super(5);

    此时执行的是A的构造函数,A的构造函数调用的是setValue()方法,由于B重写了A的这个方法,

    所以!!!执行的是B的 setValue()方法。

    即传入的参数是2*5=10

    此时,因为super,所以调用的是父类的 setValue()方法,即value=10

    第一行执行完毕。

    第二行是 setValue(getValue()-3);

    B没有getValue()方法,故执行父类的此方法,

    try返回的是value=10+1=11,保存在临时栈中

    finally中调用this的方法,这个this指的是B的对象,又重写,故就是B的 setValue()方法

    value=2*11=22,第一个打印到屏幕上的数字

    接下来参数 getValue()-3=11-3=8

    传入B的 setValue()方法

    此时value=2*8=16

    至此,new B()执行结束

    ②    new B(). getValue()

    B没有 getValue(),故执行A的 getValue()

    try返回16+1=17,保存到临时栈中

    finally调用B的 setValue()方法

    value=17*2=34,第二个打印到屏幕上面的数字

    最后主函数打印返回值,也就是打印try保存到临时栈中的17

  • 相关阅读:
    POJ 1320 Street Numbers 解佩尔方程
    数学分支(转)
    深入理解Java类加载器(1):Java类加载原理解析
    Java类加载器的工作原理
    深入理解Java:类加载机制及反射
    类加载机制:全盘负责和双亲委托
    java底层学习
    代码面试最常用的10大算法
    程序员面试金典算法题
    了解ASCII、gb系列、Unicode、UTF-8的区别
  • 原文地址:https://www.cnblogs.com/parkour1026/p/10850719.html
Copyright © 2011-2022 走看看