类的加载及初始化

原创 2007年09月28日 17:06:00
在许多传统语言中,其程序是作为启动过程的一部分立刻被加载的,然后是初始化,紧接着程序开始运行。这些语言的初始化过程必须小心控制,以确保static的初始化顺序不会造成麻烦
Java采用了一种不同的加载方式。在Java中,每个类的编译代码都存在于它自己的独立的文件中。该文件只在需要使用程序代码时才会被加载。一般来说,你可以说:“类的代码在初次使用时才加载。”这通常是指知道类的第一个对象被构建时才发生加载,但是当访问static数据成员或是static方法时,也会发生加载。
初次使用之处也是静态初始化(static初始化)发生之处。所有的static对象和static代码段都会在加载时依程序中的顺序(即,你定义类时的书写顺序)依次初始化。当然,static只会被初始化一次。
继承与初始化
你在导出类上运行Java时,所发生的第一件事情就是你试图访问导出类的main( )(一个static方法),于是加载器开始启动并找出导出类被编译的程序代码(它被编译到了一个名为导出类名 .class的文件之中)。在对它进行加载的过程中,编译器注意到它有一个基类(这是由关键字extends告知的),于是它继续进行加载。不管你是否打算产生一个该基类的对象,这都要发生。如果该基类还有其自身的基类,那么第二个基类就会被加载,如此类推。接下来,根基类中的静态初始化(在此例中为Insect)即会被执行,然后是下一个导出类,以此类推。这种方式很重要,因为导出类的静态初始化可能会依赖于基类成员能否被正确初始化的。
至此为止,必要的类都已加载完毕,对象就可以被创建了。首先,对象中所有的原始类型都会被设为缺省值,对象引用被设为零——这是通过将对象内存设为二进制零值而一举生成的。然后,基类的构造器会被调用。基类构造器和导出类的构造器一样,以相同的顺序来经历相同的过程。在基类构造器完成之后,实例变量(instance variables)按其次序被初始化。最后,构造器的其余部分被执行
对象初始化步骤:
1、基类静态数据初始化
2、导出类静态数据初始化
3、分配给对象的存储空间初始化成二进制的零
4、调用基类构造器
5、按照声明的顺序对实例变量初始化
 
6、 调用导出类的构造器主体
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

类的加载、连接、初始化、反射

类的加载:类加载器: 其实在java中有三种类类加载器。1)Bootstrap ClassLoader 此加载器采用c++编写,一般开发中很少见。2)Extension ClassLoader 用来...

java类的加载以及初始化顺序

类的加载和初始化的了解对于我们对编程的理解有很大帮助,最近在看类的记载方面的问题。从网上查阅了若干文章,现总结如下: 1. 没有继承的情况 单独一个类的场景下,初始化顺序为依次为 静态...

DevExpress LookUpEdit 初始化(数据加载) 底层类

(1)三个效果        1>传的参数较多,对数据表无要求,但可以设置下拉列的宽度和标题       2>传的参数很少,对数据表有要求(必须是处理好的)  ...

Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序

java中的块分为静态块(static{})和非静态块({}),这两种的执行是有区别的: 非静态块的执行时间是:在执行构造函数之前。 静态块的执行时间是:class文件加载时执行...

Java 的初始化及类的加载

程序是作为启动过程的一部分立即被加载,然后就是初始化,最后就是程序的运行了。可以不恰当的表示为  程序的加载--->初始化--->程序开始运行。 那类什么时候被加载呢? 一般就是在类的代码在被使用时...

Java类的加载、链接和初始化

Java类的加载是由类加载器来完成的。一般来说,类加载器分成两类:启动类加载器(bootstrap)和用户自定义的类加载器(user-defined)。两者的区别在于启动类加载器是由JVM的原生代码实...

类的加载、连接与初始化过程的详细分析(上)

前面一个博客文章介绍过了类从加载到可以被使用经过了加载、连接、初始化三个过程,下面对每个过程所发生的事情做详细分析。 一、类加载阶段         1.类加载方式     ...

Java学习总结6——类加载1(类初始化顺序)

出处:http://www.cnblogs.com/jackyrong/archive/2008/08/12/1266161.html 我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构...

jvm(二)类的加载,连接,初始化详解

3.类的主动使用与被动使用 3.1 主动使用:包括以下6种情况: 3.1.1 创建类的示例(new A()) 3.1.2 访问类或接口的静态变量(或者对静态变量赋值,如:A.num, A.num = ...
  • qwkxq
  • qwkxq
  • 2017-02-19 20:05
  • 357
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)