1.static静态关键字
用法:是一个修饰符,用于修饰成员(成员变量,成员函数),static修饰的成员就不在对内存里了,静态修饰内容被
对象所共享
当成员被静态修饰后就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。类名.静态成员
2.static特点(内存部分):
A.随着类的加载而加载
当类被使用时,该类就要进内存,这时静态就已经存在了,所以当类消失时,静态也就不在了。同时说明它的周期
也是最长的-----静态成员变量==类变量----成员变量==实例变量
B.优先于对象的存在
明确一点,静态是先存在的,对象是后存在的,
C.被所有对象共享
D.可以直接被类名所调用
3.实例变量和类变量的区别
1.存放位置--类变量随着类的加载而存在于方法区中
--实例变量随着对象的建立而存在于堆内存中
2.生命周期--类变量生命周期最长,随着类的消失而消失
--实例变量生命周期随着对象的消失而消失
4.静态的使用注意事项:
A.静态方法只能访问静态成员,非静态方法既可以访问静态也可以访问非静态
B.静态方法中不可以定义this.super关键字,因为静态优先于对象存在,所以静态方法中不可以出现this关键字
C.静态的利弊
--利处,对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份。
可以直接被类名调用
--弊端,生命周期过长,访问出现局限性(静态虽好,但只能访问静态)
D.主函数是静态的。
--主函数,它是一个特殊的函数,作为程序的入口,可以被JVM调用
5.什么时候使用静态?
要从两方面下手:
A.因为静态修饰的内容有成员变量和函数
什么时候定义静态变量(类变量)呢?
当对象中出现了共享数据时,该数据被静态所修饰,对象中的特有数据要定义成非静态。存在于堆内存中
什么时候定义静态函数呢?
当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的
3.方法区(共享区或数据区):
类中的方法和类中的共享数据 |
|