作者kdok123 (小天)
看板java
标题[问题] compile time的判断
时间Tue Dec 23 20:51:36 2014
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?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.137.127.235
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/java/M.1419339099.A.F22.html
1F:→ duckfly: 全部static variables或block都是compile时就指定完成 12/23 22:31
2F:→ duckfly: 把static{}跟static var前後对调试试,以最後指定的为主 12/23 22:33
3F:→ duckfly: 由上到下执行,跟是否为static block或static field无关 12/23 22:36
4F:→ duckfly: 直接看byte code来比较差异,你会比较清楚 12/23 22:51
5F:→ ssccg: 我以为static final才是compile time 12/24 00:58
6F:→ ssccg: static不是都runtime由class loader做的? 12/24 00:59
7F:→ duckfly: 我这样说似乎有点误导,应该说compile时就把static初始化 12/24 01:35
8F:→ duckfly: 的步骤就先确定好,然後第一次使用static field时才初始 12/24 01:36
9F:→ duckfly: 化,而final static你可看成C中的#define,compile时就会 12/24 01:37
10F:→ duckfly: 直接做常量的替换。 12/24 01:38