关于Java静态属性空间分配的时间。

静态属性是不用实例化对象就能通过类名直接调用对吧?那静态属性是个变量,或者对象,那它总得有个空间吧,它的空间开辟是在什么时候呢?
老师给我们讲,一个对象的创建分为两个过程,第一个开辟空间,它先于构造函数,然后就是调用构造函数对开辟的空间进行分配。我就猜想,静态属性是不是在开辟空间之前就创建,或者更早?

不是的,静态的属性是在编译期确定了开辟空间的大小。
而正常对象,需要在程序运行的时候进行开辟空间。需要动态开辟空间。
这个就高级了,往深处研究很难的。
一定是先开辟空间,然后把对象放进去的。追问

嗯,我知道了。
那还有一个问题,动态开辟的空间是在堆区对吧,那在该对象使用结束后该部分空间会被回收,而静态属性还会存在,直到程序运行结束,这样想对吗?

追答

对。
动态开辟的空间是在堆区对吧,那在该对象使用结束后该部分空间会被回收,

空间会被gc给回收,但是什么时候由gc决定。

追问

谢了。

温馨提示:答案为网友推荐,仅供参考
相似回答