static静态的:可以用来修饰属性、方法、代码块(或初始化块)、内部类【不能用于构造器】
static修饰属性(类变量):
通过对象也能调用类变量
1.由类创建的所有对象都共用一个属性(类变量:变量前用static修饰的变量)(变量也可以叫属性)
2.当其中一个对象对此属性进行修改,会导致其他对象对此属性的一个调用(就是所有的都发生变化)
3.类变量随着类的加载而加载,而且独一份
4.静态的变量可以直接通过“类.类变量“进行调用
5.类变量的加载是要早于对象的,所以当有对象以后,可以“对象.类变量”使用。但是“类.实例变量”是不行的(类似父子关系,后出生的可以调用先出生的,先出生的不能调用后出生的)
6.类变量存在静态域中,供次类的所有对象使用
实例变量(实例=对象,也可以叫【对象变量】):不用static修饰的属性,每创建一个对象都会在堆内开辟一个空间,每个空间内都有不用static修饰的属性,是独立的,相当于副本,单个变量修改对其他变量不造成影响
实例变量是随着对象的创建而创建。没创建之前不分配内存空间
static修饰的方法(类方法):
1.随着类的加载而加载,在内存中也是独一份,一个对其改变会改变所有值
2.可以直接通过“类.类方法”的方式调用
3.方法内部可以调用静态的属性或方法(因为生命周期一样).不能调用非静态的属性或方法
4.非静态的方法是可以调用静态的属性或方法
注:静态的结构(static修饰的属性、方法、代码块、内部类)的生命周期要早于非静态的的结构,同时回收也要晚于非静态的结构
1.静态的方法内是不可以有this和super关键字的,应为this代表当前对象,super也是引用当前对象父类的值,静态的方法要早于对象
2.构造器和非静态的方法一样,可以调用静态的属性或方法
3.不依赖与具体对象的方法、属性都可以用static
4.使用静态变量可以实现“累加”的效果