static关键字
static 静态修饰关键字,可以修饰 变量,程序块,类的方法。被修饰的变量表示为类的所有对象所共有的变量,被修饰的方法表示为类的方法。
当你定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而不会重新分配内存;如果static修饰一个程序块的时候(像static{...}),jvm会优先加载静态块中的代码。static的作用域是类而并非是某个具体对象。
静态方法
声明static方法有以下限制:
·静态方法仅能调用其他静态方法。
·静态方法只能访问static数据。
·静态方法不能引用任何形式的this或者supper。
class Test{
static void test(){
System.out.println("Wlecome");
}
}
public class call{
public static void main(String[] args){
Test.go();
}
}
静态变量
当一个变量声明为static变量实质上就是一个全局变量。当声明一个对象时,并不产生static变量。而是所有该类的实例都共用这一个static变量。静态变量与静态方法类似,所有该类实例共享此静态变量。在类装载时,只分配一块空间,所有类的对象都可以操作。
class Value {
static int c = 0;
static void inc() {
c++;
}
}
public class Count2 {
public static void prt(String s) {
System.out.print(s);
}
public static void main(String[] args) {
Value v1, v2;
v1 = new Value();
v2 = new Value();
prt("v1.c=" + v1.c + " v2.c=" + v2.c);
v1.inc();
prt(" v1.c=" + v1.c + " v2.c=" + v2.c);
}
}
结果为:v1.c=0 v2.c=0 v1.c=1 v2.c=1
静态代码块
静态代码块在类被初次加载的时候,会按照static块的顺序来执行每个static块,并且每个static块只会执行一次。