Java中类变量和实例变量的初始化
1. 类变量和实例变量
类变量即类成员变量中的静态变量,它们可以通过类名来直接访问。
实例变量是类成员变量中的非静态变量,只有在实例化对象之后通过对象来访问。
2. 空间分配的时间不同
类变量是在类加载后的准备阶段在方法区分配内存的。
实例变量是在类实例化为对象的时候在堆中分配内存。
3. 初始化
类变量在准备阶段会进行默认初始化,当某些条件满足时候会触发类的初始化。详见《深入理解java虚拟机》的类加载机制。
实例变量在空间分配内存后,虚拟机会将所分配到的内存空间都初始化为零值(不包括对象头)。这一步操作保证了对象的实例字段在java代码中可以不赋初值就可以直接访问,程序能访问到这些字段的数据类型所对应的零值。
对于局部变量,只能显示地进行初始化,否则不能访问该变量的值。
4. final关键字
当final关键字作用于类变量时,必须有显示的初始化。在声名对象的语句中初始化,或者在静态代码块中进行初始化。
当final关键字作用于实例变量时,也必须进行显示的初始化。在声名对象的语句中初始化,或者在构造代码块中进行初始化,或者在所有的构造函数中进行初始化。
final修饰的变量只能初始化化一次,因此该变量已经在一种方式中进行过初始化,则不能在另一种方式再进行一次初始化。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步