JAVA 类的初始化

来源:互联网 发布:win32api python 编辑:程序博客网 时间:2024/05/16 01:18

类的初始化

之前的一篇文章是讲述的对象的初始化,这篇文章讲一讲类的初始化,以及类的初始化和对象初始化之间的一些异同。

首先同对象初始化一样,要搞清楚什么时候会进行类的初始化,和对象初始化不同,对象初始化的时候是new创建一个对象的时候,java会为对象进行初始化;而类的初始化进行的时机是:类第一次被使用的时候进行初始化,而且类的初始化只进行一次。

类被使用有三个情况:(1)、new 类名() 、包括:类名 对象名 = new 类名(); (2)、类.静态方法() (3)、类.静态属性名; 

这儿就有人不明白,当创建一个对象的时候,是先进行类的初始化还是先进行对象的初始化?

答案是:先进行类的初始化,类的初始化优于对象的初始化,这一点要深刻理解,之后的学习会有很多地方都可以用这个来解释。

我们来说一下类的初始化的三个步骤:

第一步:类加载,将.class的二进制文件读到内存中;

第二步:(1)、类的静态变量分配空间、并且默认初始化(默认初始化之前说过的,整型为 0 ;浮点为:0.0 字符型为:'\u0000'引用为:null 布尔为:false)

      (2)、声明时初始化,静态初始化块初始化,并且和对象的初始化一样,是按照代码的顺序从上到下的顺序执行的。

可以通过一段代码并且分析内存来理解一下类的初始化

public class StaticMethod {
static int no;//1行,定义了一个类变量 
static {
System.out.println("i最初为"+no);//2行
no =++no ; //3行
}
public static void main(String[] args) {
System.out.println("第一次调用类变量值为:"+StaticMethod.no);//4行

System.out.println("第次调用类变量值为:"+StaticMethod.no);//5行
}
}

最终输出结果为: 最初为0
第一次调用类变量值为:1
第二次调用类变量值为:1

java执行的时候从main方法开始执行,main方法中调用了类变量,在代码第一行的时候定义了一个类变量,在静态代码块中,首先打印no的值并且给no赋了no=1的值

main方法中一共调用了两次类变量,但只初始化了一次。

可以通过内存的图来看一下:

首先是将类变量分配空间,默认初始化,再是静态初始化块进行初始化。

原创粉丝点击