在Java中,被static修饰的变量就叫作静态变量,或者叫类变量。
为什么Java中要引入静态变量?到底静态变量有什么用?
为了说明这些问题,下面来看一下静态变量和实例变量(没有被static修饰的变量)的区别。
1)JVM只是在加载类的过程中就完成了静态变量的内存的分配,在内存中只有一份拷贝,并且地址是不可变的,所以可以直接使用类名访问,当然也可以使用对象来访问(不推荐);
2)实例变量,JVM只有在一个类的实例化的时候才分配一次内存,它在内存中有多份拷贝,并且是相互独立的,所以只能通过对象来访问。
根据静态变量和实例变量的区别,我们可以使用静态变量来实现一些功能,例如:
1)当需要同时实例的实现个数时,例如在数据库连接类中,如果当前连接的个数为0时,就自动的释放掉;
2)使用静态变量可以很方便的实现单例模式。
单例模式的结构如下:
很显然,如果将变量mInstance定义为静态变量,当其他对象需要使用该类时,只需要调用getInstance方法返回mInstance就可以了,这样子就可以保证类Singleton只有一个实例。