黑马程序员技术交流社区

标题: 关于静态变量的初始化 [打印本页]

作者: 杨文宇    时间: 2012-8-4 00:01
标题: 关于静态变量的初始化
package day05;
// 考察静态变量的初始化
class ClassX{
        public static final int x = 1+ClassY.y;
}
class ClassY{
        public static final int y = 2+ClassZ.z;
}
class ClassZ extends ClassX{
        public static final int z = 3+ClassX.x;
}
public class Demo9 {
        public static void main(String[] args) {
                 System.out.println( ClassX.x + ClassY.y + ClassZ.z );//不懂,帮我详细分析一下
        }
}
作者: 林康春    时间: 2012-8-4 00:12
/*
* 1,程序从 public Class Demo9 这里 进来 ,进入main()函数
* 2,读 System.out.println( ClassX.x + ClassY.y + ClassZ.z);这条语句
* 3 首先读ClassX.x:加载ClassX这个类和这个类的static的静态成员变量和 静态代码块
*   在这里 加载ClassX.x,因为x=1+ClassY.y;所以程序去找ClassY.y:加载ClassY这个
*   类和这个类的static的静态成员变量和 静态代码块 ,因为 y=2+ClassZ.z,所以所以程
*   序去找ClassZ.z:加载ClassZ这个类和这个类的static的静态成员变量和 静态代码块 ,
*   而z = 3+ClassX.x,所以 程序去找ClassX.x,这时候ClassX.x的值还是默认值,也就是
*   0!这点必须要理解!
*      因此,找到了z=3+0=3;y=2+z=5;x=1+5=6;
*      x+y+z =14;
*   好好理解一下
*   将上面的打印语句中的变量调换顺序再加以分析
    调换顺序后:
        原理和上面的是一样的
请尝试自己分析一下,如果还不懂,请留言
希望能帮助到你。
加油!

*
*/
作者: 徐小骥    时间: 2012-8-4 00:12
System.out.println( ClassX.x + ClassY.y + ClassZ.z );
这是输出ClassX.x + ClassY.y + ClassZ.z三个数的和
ClassX.x就是调用ClassX这个方法中的x的值即1+ClassY.y
同理推论
作者: 杨文宇    时间: 2012-8-4 00:25
林康春 发表于 2012-8-4 00:12
/*
* 1,程序从 public Class Demo9 这里 进来 ,进入main()函数
* 2,读 System.out.println( ClassX.x  ...

:handshake懂了
作者: 侯宪博    时间: 2012-8-4 01:21
一楼正解:
此题主要考察类的加载顺序和成员的默认初始化值
二楼的理解是对的,但是说的有点不到位,ClassX不是方法

图解.JPG (29.73 KB, 下载次数: 22)

图解

图解





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2