(二十八)static关键字
/*
* static 静态的
* static修饰的成员变量的特点
* 1.static修饰的成员变量是该类的所有对象共享
* 2.static修饰的成员变量是随着类的加载就在静态区中开辟内存了,所以有限与非静态成员开辟内存
* 3.static修饰的成员变量可以通过类名直接访问
* 静态成员变量和非静态成员变量的区别?
* 1.存储的数据
* 静态成员变量存储的是所有对象共享的数据
* 非静态成员变量存储的是每个对象特有的数据
* 存储的位置
* 静态成员便令是随着类的加载在方法区中的静态区开辟内存
* 非静态成员变量是随着对象的创建,在堆中开辟内存
* 调用方式
* 静态成员变量可以通过类名访问,也可以通过对象访问
* 非静态成员变量可以通过对象访问
* 生命周期
* 静态成员变量随着类的加载就在方法区中的静态区出现,整个程序执行玩消失。
* 非静态成员变量随着对象的创建在堆中出现,随着对象被垃圾回收机制回收,而消失。
*/
总结:拥有static的静态成员会在程序的执行的时候优先开始执行,且会在程序执行结束后消失,拥有全局都可以访问到的特性。可以直接通过类名调用,也可以通过对象调用。静态资源中无法访问非静态资源,因为在程序的加载顺序中,静态资源优于非静态资源加载,在静态资源中引用非静态资源时,非静态资源不存在,或报错,静态资源无法从上下文中引入非静态 变量 name,但是可以引用静态成员的变量。
什么时候把成员变量修饰为static?
当成员变量需要被类的所有对象访问时
什么时候把成员函数修饰为static?
当成员函数中没有用到所属类中的任何的非静态成员时
class Student { String name;//实例成员变量 static String country = "CN";//类变量 public void show() {//实例成员函数 System.out.println(name + " " + country); } } class Demo9 { public static void main(String[] args) { Student stu = new Student(); stu.name = "Jack"; stu.show(); Student stu2 = new Student(); stu2.name = "Tom"; stu2.show(); System.out.println(Student.country); } }
作者:狗尾草
-------------------------------------------
个性签名:海到无边天作岸,山登绝顶人为峰!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!