static(静态):
- “static”关键字表明一个成员变量或成员方法可以在没有所属的类的实例变量的情况下被访问
- static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static 方法是编 译时静态绑定的。
修饰成员变量:
把一个数据共享,该数据使用static修饰即可。
格式 static int age= 18 那么age在内存中只存在一份(节省空间)
修饰成员函数:
静态成员函数的访问方式:
方式一:使用对象进行访问。 格式: 对象.函数名
方式二:使用类名进行访问。 格式: 类名.函数名。
静态成员函数要注意:
1. 静态函数可以使用对象或者类名进行调用,非静态函数(不加static修饰的函数)只能使用对象进行调用。
2. 静态函数可以直接访问静态的成员,但是不能直接访问非静态的成员。
原因:静态函数可以使用类名调用,而这时候对象可能还没有存在内存中,这时候非 静态的数据也就不存在内存中。
3. 非静态函数可以直接访问静态以及非静态成员。
原因:非静态函数必须要由对象调用,如果对象存在了,静态数据以及非静态数据早 就存在内存中。
4. 静态函数不能出现this与super两个关键字。
原因:因为静态函数可以使用类名直接调用,而这时可能还没有对象存在,this又要 代表当前对象。
以上原因:存在的问题,搞清谁先存在。 (内存中先有静态内容,后有的非静态)
5.什么时候使用static修饰一个函数呢?
情况一:如果一个函数没有直接访问非静态的成员(成员函数和成员变量);
情况二:当一个方法或者变量需要初始化加载,或者是经常被调用的时候可以加上static;
情况三:不需要创建对象就可以用的函数。
区别 | 静态成员变量 | 非静态成员变量 |
---|---|---|
数量 | (1份)静态成员变量只会在方法中维护一份数据。 | (n份)非静态成员变量是在每个对象中都维护一份数据 |
访问方式 | 对象名和类名 | 只能使用对象访问 |
存储位置 | 方法区 | 堆内存 |
生命周期 | 类文件加载存在,删除消失 | 对象创建存在,消失而消失 |
作用 | 共享数据给所有对象使用 | 描述一类事物的属性 |