`
guizuhong2005
  • 浏览: 22034 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java编程 之 初始化

阅读更多
    Java进行初始化的地方有两个:初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块。静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句。
    程序在定义一个类的对象之前要先将该类的class文件转载进内存,而class文件是编译后生成的,其中包括了类的初始化过程的定义,即Java 编译器把所有的类变量(静态变量)初始化语句和类型的静态初始化器通通收集到 <clinit> 方法内,该方法只能被 Jvm 调用,专门承担初始化工作。而class文件与类中的成员变量对应的是 "<init>()" 方法。编译器会为每一个构造函数生成一个 "<init>()" 方法。

初始化的时机-------在首次主动使用前初始化
1.创建类的实例
2.访问类或接口的静态变量(static final常量除外,static final变量可以)(此时只会初始化静态变量和静态块,其他在创建该类时初始化)
3.调用类的静态方法
4.反射(Class.forName(packageName.className))
5.初始化类的子类(子类初始化问题:满足主动调用,即访问子类中的静态变量、方法,否则仅父类初始化)
6.java虚拟机启动时被标明为启动类的类
    注:加载顺序:启动类的static block最先加载(父类静态成员、静态代码块—>子类静态成员、静态代码块—>父类实例成员、代码块——>父类构造函数—>子类实例成员、代码块—>子类构造函数)

    类的静态变量即类变量是在首次装载后完成初始化的,而且此过程只进行一次。而类的成员变量的初始化是在装载完成后创建该类的对象时进行的。由此可知,类的初始化顺序是先静态成员,而后是非静态成员。需要指出的是,不管是静态成员还是非静态成员的初始化,如果存在父类则要先进行父类的初始化,然后才是子类的初始化。初始化块跟定义时初始化是同等的关系,两者的先后顺序与在类中出现的先后有关。当初始化块跟定义时初始化都进行完后则进入构造函数。

静态final变量在编译时不定的情况下。如果客户程序这个时候访问了该类的静态变量,那就会对类进行初始

jvm初始化类时,要求其父类都已经被初始化,但此规则不适用于接口
1.在初始化一个类时,并不会先初始化它所实现的接口
2.在初始化一个接口时,并不会先初始化它的父类接口



分享到:
评论

相关推荐

    java编程思想-初始化与清理

    java编程思想-初始化与清理了解this之后,你就能更全面地理解“静态(static)方法”的含义。静态方法就是没有this的方法。在“静态方法”的内部不能调用“非静态方法”,反过来倒是可以的。而且你可以在没有创建...

    java程序初始化顺序

    介绍一下java程序初始化的顺序,这会对您以后的开发所有帮助

    Java编程思想初始化与清理PPT教案学习.pptx

    Java编程思想初始化与清理PPT教案学习.pptx

    Java中对象的初始化

    《Java程序设计基础教程》按内容分成五篇:Java 语言入门篇、面向对象篇、数据流应用篇、Java GUI编程篇和高级应用篇,共有二十四讲组成。

    java初始化和清理

    Java 的初始化问题和其他高级语言类似。一个明显不一样的地方是体现在它的类加 载过程。传统的编程语言包括C++等,程序是作为启动过程的一部分立刻被加载,而Java 的 类加载只在需要使用程序代码时才会被加载(每个...

    Listener、Filter、Servlet与Java Web项目初始化项目例子 源代码

    通常JavaWeb项目启动时我们需要... 下面代码是模拟初始化的一个示例,可以在控制台看到程序的输出,和Listener、Filter、Servlet的启动先后顺序,强烈建议跟我一样喜欢动手的Coder操作一下,废话不多说,直接上代码了。

    JAVA程序设计实验

    实验一: Java编程基础 (1) 配置环境变量,熟悉编程环境。 (2) 建立一个Java的Application程序,编译、运行以下例题: public class ex01 { public static void main( String arg[ ]) { System.out.println(...

    java 静态非静态 字段方法 子类父类构造_初始化顺序!

    java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...

    Java编程思想第05章初始化与清理.ppt

    Java编程思想第05章初始化与清理.ppt

    Java ejbCreate初始化EJB代码实例.rar

    Java ejbCreate函数初始化EJB的一个代码实例,代码将创建一个EJB测试客户端程序,演示Address EJB的实现。  代码通过强制转型得到Home接口,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程...

    java类中元素初始化顺序详解

    对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)&gt;(变量、初始化块)&gt;构造器

    Java + 数组 + 初始化

    Java程序易于编写,而且有内置垃圾收集,不必考虑内存管理; Java虚拟机拥有工业级的稳定性和高度优化的性能,且经过了长时期的考验; Java拥有最广泛的开源社区支持,各种高质量组件随时可用。 Java语言常年霸占着...

    ads1115初始化配置读取程序

    stm32 驱动ads1115 初始化 配置 读取 程序 已测试通过

    Java程序设计基础:一维数组初始化.pptx

    一维数组初始化 目录 课程导入 掌握一维数组元素的访问方法 掌握一维数组的初始化方法 熟知一维数组的长度属性 掌握输出一维数组所有元素值的方法 访问数组元素 0.0 0.0 0.0 0.0 0.0 [0] [1] [2] [3] [4] myList 首...

    上期所股指期货程序交易CTP接口(Java源码+jar支持包)

    增加:JCTPLibraryUtil类,用于初始化CTP环境或卸载CTP环境 增加:JCTPMdApi类,将Bridj调用CTP的代码隐藏 增加:JCTPMdSpi类,将Bridj调用CTP的代码隐藏 增加:JCTPTraderApi类,将Bridj调用CTP的代码隐藏 增加:...

    数据库初始化/清除/备份/恢复工具包

    java写的数据库初始化,清除,备份,恢复组件,可以很容易的集成到相关产品内。

    Java程序设计基础:二维数组初始化.pptx

    二维数组的初始化 学习目标 课程导入 1 熟记二维数组元素访问的方法; 2 掌握二维数组初始化的简写方法; 学习目标 课程导入 3 掌握使用双重循环遍历二维数组的方法; 4 了解使用输入值给二维数组初始化的方法 5 ...

    java程序设计阅读程序写结果题22道

    [解析] 继承是而向对象编程的一个主要优点之一,它对如何设计Java类有着直接的影响。继承有如下几点好处: ①它可以利用已有的类来创建自己的类,只需要指出自己的类和已有的其他类有什么不同即可,而且还可以动态...

    java编程常用英语单词解释

    46. Initialize (v.):预置初始化的意思,用于描述对象的初始化。 47. Instanceof (关键字):运算符,用于检查对象是否为某种类型。 48. Interface (关键字):接口的意思,是 Java 中的一种关键字,用于定义接口。...

    Java2Word类库

    Java2Word类库。在服务器端安装后就不会报“java.lang.Exception: 初始化类库出错”。 在 http://download.csdn.net/source/315791 下载jar包和说明。

Global site tag (gtag.js) - Google Analytics