static的用法
static关键字涉及很多Java虚拟机相关内容,感兴趣的读者可以看看Java虚拟机相关内容哦!
方便在没有创建对象的情况下来进行调用(方法/变量)。
static:静态的,用于修饰成员(成员变量,成员方法);
-
被static所修饰的变量或者方法会储存在数据共享区(静态存储区);
-
被static修饰后的类成员变量只有一份!
-
当成员被static修饰之后,就多了一种访问方式,除了可以被对象调用之外,还可以直接被类名调用,(类名.静态成员);
使用:(一定要提到类加载)
- 静态变量:修饰成员变量
- 静态变量属于类,被所有的对象所共享,在内存中只有一个副本(静态变量之所以又称为类变量,是因为它和类关联在在一起,随着类加载而存在于方法区中(而不是堆中))
- 静态变量当且仅当在类初次加载时会被初始化
- 静态成员变量可以通过类直接访问
- 非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响
- 非静态成员变量必须要创建实例后才能访问
- 静态方法:修饰成员方法
- 在静态方法中只能访问静态成员(静态变量或者静态方法),不能访问非静态成员
- 静态方法随着类加载而加载
- 调用方式:类名.静态方法名
- 静态代码块
- static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
注:
-
独立于类
-
在类加载的时候执行,只执行一次
-
修饰的方法只在调用时执行
方法注意事项:
-
静态的方法只能访问静态的成员;
-
非静态得方法即能访问静态得成员(成员变量,成员方法)又能访问非静态得成员;
-
局部变量不能被static修饰;
-
静态得方法中是不可以定义this、super关键字的,因为静态优先于对象存在,所以静态方法不可以出this;