static作为修饰符可以:

1.static修饰属性; 2.static修饰方法;

static修饰属性:

为所有对象公有 (谁用谁拿 一改全改 地址一样)
所有对象共用同一份 不再存储到对象的堆内存
而是存储到 全局静态区(数据区)
不再通过对象调用 而是 类名.属性名调用
image.png
image.png

static修饰方法 :

是静态方法 通过类名.方法名调用 无需对象
存储在 全局方法区中的静态区
//public static void 方法名(){
}
image.png
image.png

static优点:

  1. 把多个对象公用的属性抽取出来 单独存储到全局静态区中<br /> 节省内存<br /> 调用方便 无需对象<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1653964735870-375b2a8f-37fb-4ffa-88ee-7c7ed87c9c4a.png#clientId=u598c8228-1192-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=329&id=uf197995e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=411&originWidth=890&originalType=binary&ratio=1&rotation=0&showTitle=false&size=65699&status=done&style=none&taskId=u50eae1f9-c4cd-400c-a174-a7e3447f07f&title=&width=712)

static限制:

1.由于 static不受对象控制 属于所有对象共用属性
所以static的生命周期比较长:
static修饰的成员(属性跟方法) 随着类加载而加载
类消亡而消亡
对象属性是随着对象创建而创建,对象销毁而消亡
由于static属性 生命周期太长 所以会产生空占内存的情况
2. 静态只能调用静态 非静态则无此限制
静态方法中 只能调用其他静态方法或者静态属性
无法调用其他普通属性/方法
static属性生成时间早 其他属性还没有生成 所以不能调用
image.png
3.静态方法中不能使用this
因为静态是随着类加载而加载
static是静态方法 通过类名.方法名调用 无需对象
此时对象还未诞生 所以不能使用this