static修饰过的数据被对象共享。这个数据被称为对象的共享数据
static修饰的共享数据,在对象创建创建前就已经存在。
所以静态方法和属性可以被类直接访问。
|--static的特点:
static是一个修饰符,用于修饰成员(包括成员方法和成员变量)
static修饰的成员被所有的对象共享。
static优先于对象存在,static的成员随着类的加载就已经存在了
static既可以使用对象调用,也可以使用类直接地调用
static修饰的是共享成员,对象中存储的是特有数据。
|--成员变量和静态变量的区别:
|---两个变量的生命周期不同,(静态的生命周期比较长)
成员变量随着对象的创建而存在,随着对象的而释放
静态变量随着类的加载而存在,随着类的消失而消失(类也是对象<重点理解>)
|---调用方式不同
成员变量只能被对象调用。
静态变量可以被对象调用,也可以被类直接调用。
|---别名不同
成员变量也称为实例变量
静态变量称为类变量
|---存储位置不同
成员变量数据存储在堆内存的对象中,所以也叫特有数据。
静态变量数据存储在方法区中(共享数据区),所以也叫对象的共享数据。
|--静态使用的注意事项。
注意:静态方法不能调用非静态属性
因为静态方法在对象创建前就已经存在,非静态属性只有创建对象才存在
|---静态方法只能访问静态成员(成员变量和静态方法)。
非静 态方法既可以访问静态,也可以访问非静态。
|---静态方法中不可以使用this或者super关键字。
原因:this 代表当前对象,因为现在还没有对象
|---main函数是静态的。
|--如果方法没有访问特有数据,一般将方法设置为静态数据。(不需要创建对象,减少空间占用)
|--静态代码块和构造代码块
静态代码块:随着类的加载二执行,而且只执行一次
构造代码块:每次创建对象就可以执行。
|