Topic: 静态到底是不是优先 ?

  Print this page

1.静态到底是不是优先 ? Copy to clipboard
Posted by: pinksnoopy
Posted on: 2005-05-24 05:09

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不是静态的吗 ??

静态的优先级别是怎样的 ??/ 如何去理解它 ?

2.Re:静态到底是不是优先 ? [Re: pinksnoopy] Copy to clipboard
Posted by: 4ngle
Posted on: 2005-05-24 10:17

静态是指没有引用指向该成员变量和成员函数.

在虚拟机中,class文件装载之后,虚拟机总是有一个静态初始化函数先执行保证静态成员最先初始化.

3.Re:静态到底是不是优先 ? [Re: pinksnoopy] Copy to clipboard
Posted by: marsbible
Posted on: 2005-05-24 17:16

当第一次访问静态变量或生成实例时类构造函数开始初始化静态变量,在本例中访问Two.i时即开始初始化,而
static One one_2=new One("one-2");
static One one_3=new One("one-3");
的时候就打印了
因此结果不奇怪。


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923