黑马程序员技术交流社区

标题: [已解决]请教一个问题 [打印本页]

作者: 胡宝林    时间: 2012-6-7 20:47
标题: [已解决]请教一个问题
本帖最后由 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,求解!!!!

作者: 黑马张扬    时间: 2012-6-7 21:01
本帖最后由 黑马张扬 于 2012-6-7 21:09 编辑
  1. X.(new C()).Z
复制代码
你这相当于于这样的  你的Y变量是静态的
你这样命名也不规范  static C y = new C(); 把这里改小写就打印a了
作者: 王渠    时间: 2012-6-7 21:04
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
作者: 伊文龙    时间: 2012-6-7 21:10
X.Y就是X类中的名为Y属性
Y的引用指向new C();
Y.Z就是C类对象中的名为Z属性
也就是b



回答完毕
作者: 葛奎    时间: 2012-6-7 21:14
  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. }
复制代码





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