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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡宝林 中级黑马   /  2012-6-7 20:47  /  1582 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hy19985125 于 2012-6-8 11:20 编辑

public class F {
public static void main(String[] args) {
   System.out.println(X.Y.Z);
    }
}
class X {
    static class Y {
        static String Z = "a";
    }
    static C Y = new C();
}
class C {
    String Z = "b";
}
程序打印X类中的内部类Y的Z属性,应该打印a
为什么打印的是b,求解!!!!

4 个回复

倒序浏览
本帖最后由 黑马张扬 于 2012-6-7 21:09 编辑
  1. X.(new C()).Z
复制代码
你这相当于于这样的  你的Y变量是静态的
你这样命名也不规范  static C y = new C(); 把这里改小写就打印a了
回复 使用道具 举报
public class F {
public static void main(String[] args) {
   System.out.println(X.Y.Z);
    }
}
class X {
    static class Y {
        static String Z = "a";
    }
    static C Y = new C();
}
class C {
    String Z = "b";
}

这样的结果一定是b;

  1. public class F {
  2. public static void main(String[] args) {
  3.    System.out.println(X.Y.Z);
  4.     }
  5. }
  6. class X {
  7.     static class Y {
  8.         static String Z = "a";
  9.     }
  10.     //static C Y = new C();
  11. }
  12. class C {
  13.     String Z = "b";
  14. }
复制代码
这样的结果是a;
原因是出在static C Y = new C();这里将Y,当成了是C类的元素了,这样,自然是返回b

评分

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

查看全部评分

回复 使用道具 举报
X.Y就是X类中的名为Y属性
Y的引用指向new C();
Y.Z就是C类对象中的名为Z属性
也就是b



回答完毕
回复 使用道具 举报
  1. public class F2 {
  2. public static void main(String[] args) {
  3.    System.out.println(X.Y.Z);//当内部类名和具体引用名字一样时,jvm会默认执行具体引用名所指向的东东
  4.     }
  5. }
  6. class X {
  7.    static class Y {//这个Y是一个类名
  8.         static String Z = "a";
  9.     }
  10.     static C Y = new C();//此Y是个引用名,jvm
  11.          
  12. }
  13. class C {
  14.     String Z = "b";
  15. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马