域的默认初始化分为两种:对于静态域,类在装载时对其进行初始化.对于非静态域,在类的实例创建时进行初始化.在默认的初始化前,域的值是不可预测的.
首先“类的实例化”与“类的加载、连接与初始化”完全是两个不同的阶段,只有“类的加载、连接与初始化”都完成了才能进行“类的实例化”。
还有一点,静态块里的代码也不是在类被加载时执行,而是在类被初始化时执行的。
类的加载简单说只是把class文件加载到内存,并没有执行任何代码。


如:以下代码是合法的
class A
{
static int i=j+1;
static int j=i+1;
}
实际上等于:i=1,j=2

而下面的代码是非法的
class B
{
int i=1;
int j=i+1;
}
因为非静态变量i在类B实例化前并没有初始化,代码j=i+1无法能到正确的i值.

相关文章:

  • 2021-07-14
  • 2021-11-15
  • 2021-10-24
  • 2022-12-23
  • 2022-01-08
  • 2022-01-16
  • 2022-03-02
  • 2022-12-23
猜你喜欢
  • 2021-12-26
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-27
  • 2021-05-24
  • 2021-06-14
相关资源
相似解决方案