java-加载顺序(2)

2016-07-17  本文已影响0人  仆歌

++2016.7.17
++by side @java-加载顺序(2)

==================================
关于JAVA-加载顺序(2)

下面是阿里巴巴的面试题:
//阿里巴巴面试题
//输出打印结果

public class AlibabaInterview implements Cloneable

{
     public static int k = 0;
     public static AlibabaInterview t1 = new AlibabaInterview("t1");
     public static AlibabaInterview t2 = new AlibabaInterview("t2");
     public static int i = print("i");
     public static int n = 99;
 
     public int j = print("j");
     
     {
         print("构造代码块");
     }
 
     static {
         print("静态代码块");
     }
 
     public AlibabaInterview(String str) {
         System.out.println((++k) + ":" + str + "    i=" + i + "  n=" + n);
         ++n;
         ++i;
     }
 
     public static int print(String str) {
         System.out.println((++k) + ":" + str + "   i=" + i + "   n=" + n);
         ++n;
         return ++i;
     }
     
     public static void main(String[] args) {
         
     }
 }
解决本类问题需注意以下几点:
  • 类属性初始化时虚拟机是不会声明属性的同时赋值的,它会把所有属性和方法全部声明完了再从头按代码顺序赋值。

类加载过程(静态属性、静态方法声明-----静态属性赋值、静态块)注意先父类后子类。

解题步骤:

[4: j i=3 n=3] (此时k=4,i=4,n=4,)

[5: 构造代码块 i=4 n=4](此时k=5,i=5,n=5,)

[6: t1 i=5 n=5](此时k=6,i=6,n=6,)

打印结果如下:

打印结果

==================================
@小怪兽

ps:因作者能力有限,有错误的地方请见谅

上一篇 下一篇

猜你喜欢

热点阅读