[问题] compile time的判断

楼主: kdok123 (小天)   2014-12-23 20:51:36
ex:
class A{
static int i = 1;// compile time
static{
i = 2;// run time
}
}
public static void main(String[] args)
{
new A();
}
根据我的知识,程式跑的顺序是先static变量,static块,最后才进到main new A()
所以我们可以说,compile time 和 runtime的分隔就是
static变量和static块吗?
在static变量之前都是compile time,之后发生的都是runtime?
作者: duckfly (Java ass)   2014-12-23 22:31:00
全部static variables或block都是compile时就指定完成把static{}跟static var前后对调试试,以最后指定的为主由上到下执行,跟是否为static block或static field无关直接看byte code来比较差异,你会比较清楚
作者: ssccg (23)   2014-12-24 00:58:00
我以为static final才是compile timestatic不是都runtime由class loader做的?
作者: duckfly (Java ass)   2014-12-24 01:35:00
我这样说似乎有点误导,应该说compile时就把static初始化的步骤就先确定好,然后第一次使用static field时才初始化,而final static你可看成C中的#define,compile时就会直接做常量的替换。

Links booklink

Contact Us: admin [ a t ] ucptt.com