static关键字
一.static修饰成员变量
static修饰成员变量:如果一个数据要被所有对象共享使用的时候 就可以用static修饰该成员变量
访问方式
注意
1.静态的成员变量可以用类名或者对象的形式进行访问
2.非静态成员变量只能用对象的形式进行访问
二.Static修饰成员函数
静态函数的访问方式
注意
1.静态函数可以直接访问静态的成员 但是不能直接访问非静态的成员
2. 非静态函数可以直接访问静态以及非静态的成员
3. 非静态函数只能使用对象调用 不能使用类名调用
4.静态函数不能出现this和super关键字
上述例子说明静态成员优先于对象存在 下面来看一个具体分析:
分析:
首先 Demo.class 加载到方法区中 当执行main方法时,发现要加载Stu类 于是Stu也被加载到了方法区中 此时Stu中的静态成员变量被放到了静态数据共享区 再然后栈内存中创建了s1对象,指向了堆中的空间 由此可见静态数据在类文件加载的时候就进入了内存而非静态数据在创建对象的时候才存在可以得到一个结论 静态数据优先于对象存在
总结:
我们再来看一下刚才的4条注意和他们的原因
1.静态函数可以直接访问静态的成员 但是不能直接访问非静态的成员
静态函数加载到内存中的时候 对象可能还没有在内存中 非静态数据也就不存在
2.非静态函数可以直接访问静态以及非静态的成员
非静态函数存在的时候 静态数据早就已经加载到了内存中
3.非静态函数只能使用对象调用 不能使用类名调用
4.静态函数不能出现this和super关键字
静态数据在类文件加载的时候就进入内存 但此时可能还没有对象存在 而this关键字代表该函数的调用者对象 必须依赖对象的存在
三.静态成员与非静态成员区别
编辑整理 丨赵伟纬
来源:悦码,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/101536