当前位置: 移动技术网 > IT编程>开发语言>Java > [牛客网试题] Test.main() 函数执行后的输出是()

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

2019年05月12日  | 移动技术网IT编程  | 我要评论
 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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网