概述
static表示静态的,类加载时,JVM会把static修饰的放在JVM的方法区内,被本类以及本类的所有实例所公用。编译后所分配的内存会一直存在,直到程序退出内存才会释放。如果一个被所有实例共用的方法被申明为static,那么就可以节省空间,不用每个实例初始化的时候都被分配到内存。
静态变量
被static修饰的变量称为静态变量,静态变量在内存中只存在一个拷贝,JVM只为静态变量分配一次内存,在类的加载过程中完成静态内存的分配,可用类名直接访问,因为是共享的,所以存在线程不安全的问题
例子
private static String name;
静态方法
静态方法可以通过类名直接访问,和静态变量一样,属于类而不属于对象。只能访问所属类的静态变量和静态方法。方法不能用this和super关键字,因为this代表的是调用这个类对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加载后,对象还不一定存在,super同理。静态优先于对象存在
例子
public static void getName() {
}
静态代码块
静态代码块就是在类加载器加载对象时,要执行的一组语句。只会被执行一次,位置可以随意放,如果有多个,按照代码顺序执行
static{
int a = 1;
int b = 2;
}
静态类
只有在内部类中才能定义静态类,没有创建外层类,也同样存在。静态类的方法可以是静态方法也可以是非静态方法,外层可以通过调用静态类名访问静态方法,非静态方法需要创建对象才能访问
public class staticClass {
public static class xx{
String getname(){
return "小明";
}
}
}