静态变量的内存布局
静态,static。
搬上之前的Car类代码
class Car{
String brand;
int price;
void run();
static int count; //多了一个static
}
不难发现吧?多了一个static int count。
那么问题来了,变量count在内存中放在什么地方?
首先肯定不能放在对象里。当我们创建两个Car的时候,就会有两个count。当对其中一个Car的count有++处理的时候,另一个Car不变。因为根本就不共用一块内存,所以这种做法不是静态变量的内存布局。
那么,我们能不能在这段内存空间内,新开辟一块空间出来,专门放静态变量?事实上,这就是JAVA处理静态内存布局的方法。
用图片可以更好的表述这个观点。见下图静态数据区那一部分。
这样在程序运行的时候,不管是堆中的哪个Car调用了count,都是共用一个静态数据区。
这也是为什么count变量不会在每次对象构造/函数执行的时候都初始化的原因。
静态变量根本就不是这个对象的东西,而是从数据区拿过来用。
静态函数
静态数据区除了能存放静态变量,还能存放静态函数。
道理是一样的,只不过把整个一个函数都放在了静态数据区内。
这样的例子有很多。比如当我们使用强制转换整形int的时候执行的代码:
Integer.parseInt()
这个parseInt就是Integer类里的静态函数之一。
静态函数的作用一时半会总结不出来,用途很多。日后能总结出来再写吧。
就这样。这节课只上了一个小时,有点短。