有些题目,基础,但是,绕来绕去的头疼!罗列如下做一下记载,一是巩固自己的基础知识,二是提醒自己犯过的错误不要再犯!
1、Test.main() 函数执行后的输出是()
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对象,调用B的构造方法,不过之前会调用带参的A的构造方法;
②A的构造方法中setValue调用的是B类的!调用B类的setValue方法将A类的value设为10;super(5)执行完
③执行下一行的getValue,先在B类中找,没有则去A类中找。找到,value++后变为11并返回;
④执行finally部分,this.setValue(value)方法同样调用的是B类的!执行后将A类value设为22,并打印出来;
⑤getValue()-3执行完结果为8,执行setValue(8),将A类value设为16,value++变为17,同上打印出34,返回17;
⑥打印出“22 34 17”