LinuxSir.cn,穿越时空的Linuxsir!

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

static问题

[复制链接]
发表于 2005-5-24 03:59:52 | 显示全部楼层 |阅读模式
class One{
  public One(String str)
  {
    System.out.println(str);
  }
}
                                                                                                               
class Two{
  One one_1=new One("one-1");
  One one_2=new One("one-2");
  static One one_3=new One("one-3");
  public Two(String str)
  {
    System.out.println(str);
  }
}
                                                                                                               
public class fell{
  static Two two_3=new Two("two-3");
  public static void main(String args[])
  {
    System.out.println("Test main() start ... ");
    Two two_1=new Two("two-1");
    System.out.println("------------");
    Two two_2=new Two("two-2");
  }
}

结果是:
one-3
one-1
one-2
two-3
Test main() start ...
one-1
one-2
two-1
------------
one-1
one-2
two-2


我有三个问题:
1:在class Two里,为什么static One one_3=new One("one-3");前面有了个static后,就会先运行它(因为我在运行结果里看到他是先显示的) ? 不是声明为静态后,就不会分配空间给它了吗 ?

2:在结果里,为什么输出了Test main() start ...后,one-3就没再出现了 ?

3:static的优先级很高吗 ?static Two two_3=new Two("two-3");后,class One和class Two里面的内容都运行过了 ? 是否它的优先级很高,还是怎么回事 ?


麻烦大家帮我看看,, 谢谢
发表于 2005-5-28 00:15:39 | 显示全部楼层
static 的fields 都是在class 初始化的时候最先赋值的,而且是对于整个class只初始化一次,所有的instance都只有一个共同的static field
回复 支持 反对

使用道具 举报

发表于 2005-6-6 20:21:10 | 显示全部楼层
static是静态,那么静态的变量应该在类没有构造之前就已经分配内存空间,而不是叫最先赋值,静态变量一般只有用静态方法调用,而静态变量的赋值工作应该做在类的构造函数之前,像你的应该这样
class Two{
One one_1=new One("one-1");
One one_2=new One("one-2");
static One one_3;
static {
    one_3 =new One("one-3");
}
public Two(String str)
{
System.out.println(str);
}
}
这样你就理解了
回复 支持 反对

使用道具 举报

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

本版积分规则

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