A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨文宇 中级黑马   /  2012-8-4 00:01  /  1662 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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 );//不懂,帮我详细分析一下
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1 加油!

查看全部评分

4 个回复

倒序浏览
/*
* 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;
*   好好理解一下
*   将上面的打印语句中的变量调换顺序再加以分析
    调换顺序后:
        原理和上面的是一样的
请尝试自己分析一下,如果还不懂,请留言
希望能帮助到你。
加油!

*
*/

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
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:12
/*
* 1,程序从 public Class Demo9 这里 进来 ,进入main()函数
* 2,读 System.out.println( ClassX.x  ...

:handshake懂了
回复 使用道具 举报
一楼正解:
此题主要考察类的加载顺序和成员的默认初始化值
二楼的理解是对的,但是说的有点不到位,ClassX不是方法

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

图解

图解

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马