比如创建一个中国人的程序,则每个对象的国籍属性都为China。如果每个对象都存一份,会浪费空间。因此需要用static关键字将此变量设置为类变量(相当于默认/公有属性),该数据被该类的对象所共享。(比如学校的饮水机(static),在没来学校之前他便已经存在。而教室里的人需要用自己的杯子(非static)来接水才可以喝。饮水机随着教室(相当于类)的消失而消失,而杯子随着每个同学(相当于对象)的消失而消失)。
因此,是static变量先有,才能将对象加载出来。所以,static在类的加载时被初始化!所以static变量只有一份,如果被其中的一个对象修改,则别的对象也随之改动。
static特点:
1、类变量可以被对象调用,也可以用类直接调用
2、static是一个修饰符,用于修饰成员
3、static修饰的成员被所有的对象共享
4、static优先于对象存在,因为static成员随着类的加载而加载
5、static存储的是共享数据,对象中存储的是特有数据
成员变量和静态变量的区别:
1、两个变量的生命周期不同
成员变量随着对象的创建而存在,随着对象的被回收而释放
静态变量随着类的加载而存在,随着类的消失而消失。
因此静态方法不能调用非静态变量!因为对象还没有存在,成员变量还没有
加载(当于没有),而静态变量在类的加载时已经存在,因此无法调用。
2、调用方式不同
3、成员变量也叫实例变量
静态变量也叫类变量
4、数据存储位置不同
成员变量存储在堆内存的对象中,也叫对象的特有数据
静态变量存储在方法区的静态区中,所以也叫对象的共享数据
静态使用的注意事项:
1、静态方法只能访问静态成员,(非静态既可以访问静态也可以访问非静态)
2、静态方法中不可以使用this或者super关键字(没对象)。
3、主函数是静态的,所以要想在主函数中调用非静态变量,只能通过创建对象调用。
什么时候使用静态
1、静态变量
当分析对象中所具备的成员变量的值都是相同的,这时这个成员就可以被静
态修饰。如果有一个对象需要改变就不能作为静态值。
若果是相同的数据,对象不需要做修改,只要使用即可,不需要存储在对象
中,定义成静态的。
2、静态函数
函数是否用静态修饰,参考一函数功能是否有访问到对象中的特有数据。从
从代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是
非静态的,否则静态。