LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 663|回复: 1

静态到底是不是优先 ?

[复制链接]
发表于 2005-5-24 04:57:40 | 显示全部楼层 |阅读模式
class One
{
  One(String str)
  {
    System.out.println(str);
  }
}
                                                                                                               
class Two
{
  static int i=0;
  One one_1=new One("one-1");
  static One one_2=new One("one-2");
  static One one_3=new One("one-3");
  Two(String str)
  {
    System.out.println(str);
  }
}
                                                                                                               
public class stat {
  public static void main(String args[]){
    System.out.println("Test main() start...");
    System.out.println("Two.i="+Two.i);
  }
}

结果为什么是
Test main() start...
one-2
one-3
Two.i=0

而不是
Test main() start...
Two.i=0
one-2
one-3

为什么是one-2和one-3优先过Two.i呢 ? Two.i不是静态的吗 ??
发表于 2005-5-27 14:40:20 | 显示全部楼层
Two.i是静态的,但是你也看到什么都应该有个先后顺序啊
当你调用Two.i的时候,首先装入了Class Two,Class Two 有四个属性 i, one_1,one_2, one_3,
因为one_1不属于静态,同时Class Two并没有被实例化,所以不会分配one_1指向具有实例的对象,但是其他三个属性是静态的,所以会指向:0(基础类型,不属于对象范围,但是内存存在空间),new One("one-2");,new One("one-3");,当然one_2,one_3的先后被赋于了Class One的实例,而Class One的默认构造函数就是打印字符给终端,所以就先看到了“one-2,one-3”的打印结构,最后由main方法执行打印方法System.out.println,来吧指向的 i 的值0打印到终端!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表