老生常谈了,static就是这样一个存在,开发中经常用到,但是也非常容易混淆他的概念,看完以下这段代码,我相信伙伴们可以更深入的了解它。
一:static含义
1.为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。
2.实现某个方法或属性与类而不是对象关联在一起
static可以修饰成员变量、成员方法、代码块、内部类、导入包
二:示例
//这段代码思考一下,最终输出的x值是多少?
class HasStatic{
private static int x = 100;
public static void main(String args[ ]){
HasStatic hs1 = new HasStatic();
hs1.x++;
HasStatic hs2 = new HasStatic();
hs2.x++;
hs1=new HasStatic();
hs1.x++;
HasStatic.x--;
System.out.println( "x=" +x);
}
}
三:解析
因为x的 修饰符为 static 所以x为类变量,结合static含义,为x单独分配了一个空间,即对于所有的实例来说,他们访问的x为同一个x,类变量存储在方法区,不属于每个实例的私有,
刚开始x=100
调用hs1.x++ x为101;
调用hs2.x++ x为102;
调用hs1.x++ x为103 (此时hs1指向了一个新的HasStatic实例,但是依然访问的是同一个X)
调用HasStatic.x-- x为102