static修饰的成员是在类加载的时候初始化的,而非static的成员是在创建对象的时候,即new 操作的时候才初始化的。
先后顺序是先加载,才能初始化,那么加载的时候初始化static的成员,此时非static的成员还没有被加载必然不能使用,而非static的成员是在类加载之后,通过new操作符创建对象的时候初始化,此时static 已经分配内存空间,所以非静态成员可以访问静态成员!
简单点说:静态成员属于类,不需要生成对象就存在了.而非静态需要生成对象才产生.,所以静态成员不能直接访问.
static的特点:
1.随着类的加载而加载;
也就是说,静态随着类的消失而消失,说明它的生命周期最长
2.优先于对象存在;
明确一点:静态先存在,对象后存在
3.被所有对象共享;
4.可以直接被类名所调用;
静态变量和类变量的区别:
1,存放的位置:
类变量随着类的加载而存在于方法区中;
实例变量随着对象的建立存在于堆内存中
2,生命周期:
类变量的生命周期最长,随着类的消失而消失
实例变量的生命周期随着对象的消失而消失
静态使用注意事项:
1,静态方法只能访问静态成员
非静态既可以访问静态也可以访问非静态
2,静态方法中不可以使用this,super关键字
因为静态优先于对象存在,所以金泰方法中不可以出现this
静态的利弊
利:对对象的共享数据进行单独空间的存储,节省空间,没有必要没一个对象中都存储一份
可以直接被类名所调用(类.静态成员)
弊:生命周期过长,访问出现局限性(只能访问静态) |