static关键字
关键字特点:
1、static意为静态,可以用来修饰共有的 成员变量 / 成员方法
2、static与类有关,和对象无关,伴随着类的加载而加载,被static修饰的成员变量或者方法优于对象的存在
3、被static修饰的成员变量或者成员方法能够被类的所有对象所共享,(例如: 空调 静态 ;水杯 非静态)
4、被static修饰的成员变量或者成员方法相比较非静态成员多了一种被调用的方法:可以通过 类名.成员名 调用
方法区:
类信息被存储在一个称为方法区的内存空间里,类信息就是由类加载器在类加载时从文件中提取
静态(类)变量也存储在方法区中
静态成员与非静态成员的区别
1、所属不同
静态成员属于类,而非静态成员是属于对象
2、内存中存储位置不同
静态成员存放于方法区中的静态区中,非静态成员存放在堆内存中
3、在内存中出现的时间不同
静态成员随着类的加载而加载,随着类的消亡而消亡(存活时间长,不建议定义过多)
非静态成员伴随着对象的创建而存在,伴随着对象的消亡而消亡
静态修饰方法
被静态修饰的方法称为静态方法
1、静态方法只能访问静态成员,包括成员变量和成员方法;不能直接访问非静态成员(包括成员变量和成员方法);
而且必须创建该类对象才能调用非静态成员,因为静态优于对象存在,在静态方法加载进内存时,非静态的还未进入内存中。
2、在静态方法中,没有this/super关键字
非静态修饰方法
非静态方法可以访问静态成员,也可以访问非静态成员
总结:
静态虽好,不能乱用
利:将对象共享的数据进行单独存储,节省空间,可以通过 类名.成员名 调用
弊:生命周期过长,访问出现局限性,静态只能直接访问静态,而不能直接访问非静态(非静态属于对象,静态优于非静态之前创建)