1.以下main函数执行结果是什么
public class A { A(){ System.out.println("class:A 无参构造函数"); } A(String arg){ System.out.println("class:A 有参构造函数,传入参数为:" + arg); } { System.out.println("class:A 构造代码块"); } static{ System.out.println("class:A 静态代码块"); } public void print(){ System.out.println("class:A 执行print"); } }
public class B extends A { B(){ System.out.println("class:B 无参构造函数"); } B(String arg){ System.out.println("class:B 有参构造函数,传入参数为:" + arg); } { System.out.println("class:B 构造代码块"); } static{ System.out.println("class:B 静态代码块"); } @Override public void print(){ System.out.println("class:B 执行print"); } }
public class Test{ public static void main(String[] args){ B b = new B("hi"); b.print(); } }
执行结果:
注:之所以会执行A相关,是因为java规则:子类创建对象的同时会先创造父类的对象,因此必须先调用父类的构造方法。
参考资料:
http://blog.youkuaiyun.com/kingzone_2008/article/details/45015301
http://blog.youkuaiyun.com/iamluole/article/details/7973174
2.以下各代码块执行的结果是怎样的:
function fun(n,o){
console.log(o);
return {
fun:function(m){
return fun(m,n);
}
}
}
(A)var a = fun(0);a.fun(1);a.fun(2);a.fun(3);
(B)var b = fun(0).fun(1).fun(2).fun(3);
(C)var c = fun(0).fun(1);c.fun(2);c.fun(3);
执行结果:
(A)
(B)
(C)