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方法中一共调用了两次类变量,但只初始化了一次。
可以通过内存的图来看一下:
首先是将类变量分配空间,默认初始化,再是静态初始化块进行初始化。
- java 类的初始化
- java 类的初始化
- java类的初始化
- Java类的初始化
- JAVA类的初始化
- Java类的初始化
- java 类的初始化
- Java类的初始化
- Java类的初始化
- java类的初始化
- Java类的初始化
- Java类的初始化
- Java类的初始化
- java 类的初始化
- Java类的初始化
- java类的初始化
- java类的初始化
- java 类的初始化
- js创建对象的几种方法总结
- JavaScript03—Window对象
- css3,js,jquery选择器前端学习
- 太阳自转 * 地球自转、公转 * 月球自转、公转
- 搭建Python+Selenium环境
- JAVA 类的初始化
- uboot启动代码分析
- PHP调试之Xdebug
- 康拓展开
- 手把手教你如何加入到github的开源世界
- shell脚本学习第二天——变量定义(含字符串变量定义)
- TCP/IP、Http、Socket、XMPP-从入门到深入
- do..while的作用
- [AHK]为某个脚本增加开关,控制其它脚本