先介绍一下类变量和实例变量:
类变量:通俗来说就是在类中,用static修饰的变量,可以理解为买你买的手机上面的出厂软件,所有对象共享一份,初始化在类链接的准备阶段,存储在方法区,此阶段默认赋值为0(引用则为null),初始化阶段-<clinit>对其进行显示赋值.
public class demo1 {
private static int id=1;
}
0 iconst_1
1 putstatic #2 <demo1.id : I>
4 return
可以看到的确是在clinit里面对静态变量进行了显示赋值。
实例变量:可以理解为你买了手机后自己根据喜好安装的各类软件,各个对象之间的实例变量是互不干扰的,在对象创建的时候分配堆内存的。
局部变量:通俗来说就是在类里面的{}块里面声明的变量,存储在局部变量表,注意一定要赋初值,要不然局部变量表无法存储该变量!
final修饰的变量在编译后,字节码文件里面就显示赋值了,例如:
public class demo1 {
private final int num=1;
}
可以看到字节码文件里面已经记录了 num的常量值