Java中static作用
-
static修饰的对象,它先于任何的对象出现。在程序最开始启动(JVM初始化)的时候,就会为static方法分配一块内存空间,成为静态区,属于这个类。而非static方法,必须在类实例化的时候,才会给分配内存空间,在实例化对象的时候JVM在堆区分配一个具体的对象,this指针指向这个对象。也就是说,this指针是指向堆区中的类的对象,而static域不属于this指向的范围所在,所以不能用实例对象调用。
-
static 修饰变量
static修饰的变量叫静态变量或类变量,静态变量只创建一次,JVM只为其分配一次内存空间,可以用类名直接访问。
public class Test { public static void main(String[] args) { System.out.println(A.n);//可以直接用类名调用 } } class A{ static int n = 9; }
-
static 修饰方法
- 静态方法也可以直接使用类名调用,任何实例对象也可以调用,静态方法中不能用this和super关键字(静态方法是存放在内存中的数据段里,this和super调用的是堆空间里的应用对象不能调用数据段区域里的数据,因此静态方法中不能用this和super关键字),也不能直接访问所属类的实例变量和实例方法(静态的不能调用非静态的)
- static方法独立于任何实例,所以static方法必须被实现,而不能是抽象的方法(abstract)
static 代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。