Java中的初始化问题

1. 类的属性初始化

Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。

(1)int类型变量默认初始值为0

(2)float类型变量默认初始值为0.0f

(3)double类型变量默认初始值为0.0

(4)boolean类型变量默认初始值为false

(5)char类型变量默认初始值为0(ASCII码)

(6)long类型变量默认初始值为0

 

所有对象引用类型变量默认初始值为null,即不指向任何对象,包括数组等。

 

对于两种不对的类属性,static属性与instance属性,初始化的时机是不同的:

(1)instance属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化。

 

2. 方法里的局部变量

(1)必须明确地进行初始化;

(2)如果在没有初始化之前就试图使用它,编译器会抗议;

(3)如果初始化的语句在try块中或if块中,也必须要让它在第一次使用前一定能够得到赋值。

 

3. 类初始化时构造函数调用顺序

(1)初始化对象的存储空间为零或null值;

(2)调用父类构造函数;

(3)按顺序分别调用类成员变量和实例成员变量的初始化表达式;

(4)调用本身构造函数

 

4. 类初始化时的其他问题
(1)如果java文件没有package,就默认给文件加上“无名”package;
(2)默认导入java.lang包,所以我们的java程序中可以使用String,Math,Integer等类,包括一些异常类;
(3)如果生成的类没有父类,则为这个类隐式加上父类Object,因此,包括Object中的许多方法都可以使用;
(4)运行顺序
建立一个非主类对象,顺序为:静态初始化块static{} -> 初始化块{} -> 构造函数constructor

牵涉到父类:
父类静态初始化块 -> 子类静态初始化块 -> 父类初始化块 -> 父类构造函数 -> 子类初始化块 -> 子类构造函数
注意:初始化块和构造函数是接连运行的,不会父类子类交替。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值