static
用法:是一个修饰符,用于修饰成员(成员变量,成员函数),
当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调:类名.静态成员、类名.静态成员
存在:方法区,共享区,数据区(非堆内存、栈内存的另一个存储区),Static 块仅在该类被加载时执行一次。
java中为什么静态类可以直接调用方法?
因为被static修饰的方法会在程序启动时首先被Classloader对象先加载进内存,在堆内存中都有一块专门的区域(方法区)来存放,是属于程序的公共内存(但只能访问),而类名在这里你可以理解为命名空间。
静态方法也是类似,但是有一点要强调,静态方法只中不能调用非静态方法。而这个时候可能其它的非静态方法或者变量还没有被加载进来。
Static的局限
Static确实是存在诸多的作用,但是它也存在一些缺陷。
它只能调用static变量。
它只能调用static方法。
不能以任何形式引用this、super。
static变量在定义时必须要进行初始化,且初始化时间要早于非静态变量。
总结:无论是变量,方法,还是代码块,只要用static修饰,就是在类被加载时就已经”准备好了”,也就是可以被使用或者已经被执行,都可以脱离对象而执行。反之,如果没有static,则必须要依赖于对象实例。