static : 是一个访问修饰符,用来修饰对象的成员属性和成员方法。
当成员用static修饰后,不仅可以用对象调用,还可以直接通过类名来调用。
static的成员在内存中不是放在堆内存,而是放在 一个共享区包括 方法区(类中的方法,静态成员)、数据区等
特点:
1.随着类的加载来加载,随着类的消失而消失,也就是说他的生命周期最长。
2.优先于对象存在。
3.为所有对象所共享
4.不仅可以被对象引用,还可以直接通过类名来调用
类变量 | 实例变量 | |
内存 | 存在于方法区中 | 存在于堆内存中 |
生命周期 |
生命周期最长,随类的建立而建立,消失而消失 | 随着对象的建立和消失而建立和消失 |
静态使用注意事项:
1.静态方法只能访问静态成员(方法和变量);非静态方法可以访问静态方法
2.静态方法中不可以定义this super 关键字,因为静态优先于对象存在,this 和super均是对象的引用
3.主函数是静态的
它的优缺点:
优点:对对象共享的共享数据进行单独空间的存储,节省内存空间; 可以被类名直接调用,而不一定要定义对象。
缺点:但是它的声明周期过长,且访问有一定的局限性。
什么时候使用static呢? 可以从两方面来说,因为static可以用来修饰变量和方法
什么时候定义static 变量呢?
A: 当对象中出现共享数据时,该数据被静态所修饰
什么时候定义static方法呢?
A:当功能方法内部没有访问到非静态数据(对象特有数据)时,那么该功能可以定义成静态的。