static作为修饰符可以:
static修饰属性:
为所有对象公有 (谁用谁拿 一改全改 地址一样)
所有对象共用同一份 不再存储到对象的堆内存
而是存储到 全局静态区(数据区)
不再通过对象调用 而是 类名.属性名调用
static修饰方法 :
是静态方法 通过类名.方法名调用 无需对象
存储在 全局方法区中的静态区
//public static void 方法名(){
}
static优点:
把多个对象公用的属性抽取出来 单独存储到全局静态区中<br /> 节省内存<br /> 调用方便 无需对象<br />
static限制:
1.由于 static不受对象控制 属于所有对象共用属性
所以static的生命周期比较长:
static修饰的成员(属性跟方法) 随着类加载而加载
类消亡而消亡
对象属性是随着对象创建而创建,对象销毁而消亡
由于static属性 生命周期太长 所以会产生空占内存的情况
2. 静态只能调用静态 非静态则无此限制
静态方法中 只能调用其他静态方法或者静态属性
无法调用其他普通属性/方法
static属性生成时间早 其他属性还没有生成 所以不能调用
3.静态方法中不能使用this
因为静态是随着类加载而加载
static是静态方法 通过类名.方法名调用 无需对象
此时对象还未诞生 所以不能使用this