动手动脑集合三
题目一:【以下代码为何无法通过编译?哪儿出错了?】
代码如下:
原因:需要在Foo()里面加个参数。
题目二:【观察输出结果,总结出“静态初始化块的执行顺序”】
代码如下:
1 public class TestStaticInitializeBlock { 2 public static void main(String[] args) { 3 new Leaf(); 4 } 5 } 6 7 8 class Root 9 { 10 static 11 { 12 System.out.println("Root的静态初始化块"); 13 } 14 { 15 System.out.println("Root的普通初始化块"); 16 } 17 public Root() 18 { 19 System.out.println("Root的无参数的构造器"); 20 } 21 } 22 class Mid extends Root 23 { 24 static 25 { 26 System.out.println("Mid的静态初始化块"); 27 } 28 { 29 System.out.println("Mid的普通初始化块"); 30 } 31 public Mid() 32 { 33 System.out.println("Mid的无参数的构造器"); 34 } 35 public Mid(String msg) 36 { 37 //通过this调用同一类中重载的构造器 38 this(); 39 System.out.println("Mid的带参数构造器,其参数值:" + msg); 40 } 41 } 42 class Leaf extends Mid 43 { 44 static 45 { 46 System.out.println("Leaf的静态初始化块"); 47 } 48 { 49 System.out.println("Leaf的普通初始化块"); 50 } 51 public Leaf() 52 { 53 //通过super调用父类中有一个字符串参数的构造器 54 super("Java初始化顺序演示"); 55 System.out.println("执行Leaf的构造器"); 56 } 57 58 }
截图如下:
执行顺序:
静态初始化块->初始化块->构造函数
题目三:【静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)? 请编写代码验证你的想法。】
代码如下:
1 public class Quiet { 2 int x=100; 3 static int y=200; 4 public static void method() { 5 System.out.println("实例变量x="+new Quiet().x); 6 System.out.println("静态变量y="+y); 7 } 8 public static void main(String[] args) { 9 Quiet.method(); 10 Quiet quiet=new Quiet(); 11 System.out.println("x="+quiet.x); 12 } 13 }
运行截图如下: