static:静态的
1)静态变量:
1.1)由static修饰
1.2)属于类,存储在方法区中,只有一份
1.3)常常通过类名点来访问
1.4)何时用:所有对象所共享的数据(图片、音频、视频等)
2)静态方法:
2.1)由static修饰
2.2)属于类,存储在方法区中,只有一份
2.3)常常通过类名点来访问
2.4)静态方法中没有隐式的this传递,所以不能直接访问实例成员
2.5)何时用:方法的操作与对象无关
2.6)被static修饰的方法中不能直接调用外面的方法的,所以如果想要调用的话,需要先创建当前World类对象,而后再通过引用.来调用其他方法
3)静态块:
3.1)由static修饰
3.2)属于类,在类被加载期间自动执行, 一个类只被加载一次,所以静态块也只执行一次
3.3)何时用:初始化/加载静态资源(图片、音频、视频等)
- 图片、音频、视频 数据-----------------静态变量中
- 给图片、音频、视频数据 赋值-----------静态块中
- 对图片、音频、视频数据 做操作---------静态方法中
//static的演示
public class StaticDemo {
public static void main(String[] args) {
Loo o1 = new Loo();
o1.show();
Loo o2 = new Loo();
o2.show();
Loo o3 = new Loo();
o3.show();
System.out.println(Loo.b); //常常由类名点来访问
Moo.test(); //常常由类名点来访问
Noo o4 = new Noo();
Noo o5 = new Noo();
Noo o6 = new Noo();
}
}
class Noo{ //演示静态块
static {
System.out.println("静态块");
}
Noo(){
System.out.println("构造方法");
}
}
class Moo{ //演示静态方法
int a; //实例变量(对象点来访问)
static int b; //静态变量(类名点来访问)
void show() { //有隐式this
System.out.println(this.a);
System.out.println(Moo.b);
}
static void test() { //没有隐式this
//静态方法中没有隐式this传递,
//没有this就意味着没有对象,
//而实例变量a必须通过对象点来访问
//所以下面的代码发生编译错误
//System.out.println(a); //编译错误
System.out.println(Moo.b);
}
}
class Loo{ //演示静态变量
int a; //实例变量。存储在堆中,有多次
static int b; //静态变量。存储在栈中,只有一份
Loo(){
a++;//每次运行都是1,因为每次都是新对象
b++;//每次运行增1,因为只有一份
}
void show() {
System.out.println("a="+a+",b="+b);
}
}
成员变量:
1)实例变量:没有static修饰,属于对象,存储在堆中,有几个对象就有几份,通过对象点来访问
2)静态变量:由static修饰,属于类,存储在方法区中,只有一份,通过类名点来访问
堆:new出来的对象(包括实例变量)
栈:局部变量(包括方法的参数)
方法区:.class字节码文件(包括静态变量、方法)