static修饰变量成员变量如果被static修饰叫静态变量或类变量,他就能够在她的类的任何对象创建前被访问,而不必引用任何对象。
static修饰方法被static修饰的方法称为静态方法或类方法。静态方法能直接调用静态方法于静态变量,但是不能直接访问实例变量和实例方法。直接通过类名调用静态方法与变量。
静态块构造代码块给对象进行初始化,静态块给类进行初始化。静态代码块只会被运行一次,静态块中的变量是局部变量,一个类中可以有多个静态代码块,执行顺序按位置决定。
对象的内存
对象的内存由:头+普通成员变量+内存填充 三个部分构成
检查对象在堆中所占内存大小的方法
class People{ //有8个字节,是头的内存大小
}
class People{
short c;
int a ; //内存大小是16字节,
short b; //头--8字节,int--4字节,short--2字节
} //对象内存整体以8字节对齐,内部没有内存填充
class People{
int a; //内存16字节,静态变量不在堆中存放,与方法一起存放在方法区中
static long b;
}
单例
该类只能生成一个对象
快加载单例
class People{
private static People p=new People();
private People(){
}
public static People GetPeople(){
return p;
}
}
慢加载单例
class People{
private static People ;
private People(){
p=new People()
}
public static People GetPeople(){
return p;
}
}
类的初始化过程
- 静态变量成员
- 静态块
- 实例变量成员
- 实例块
- 构造方法