欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

[牛客网试题] Test.main() 函数执行后的输出是()

程序员文章站 2022-04-14 15:41:29
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( ......
 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