当前位置:  编程技术>java/j2ee

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

    来源: 互联网  发布时间:2014-10-27

    本文导语:  代码如下:public class Test4 {    @Test    public void test(){        child child = new child();    }} class parent{    public static String parentStaticField = "父类静态变量";    public String parentNormalField ="父类普通变量";    static {        S...

代码如下:

public class Test4 {
    @Test
    public void test(){
        child child = new child();
    }
}

class parent{
    public static String parentStaticField = "父类静态变量";
    public String parentNormalField ="父类普通变量";
    static {
        System.out.println(parentStaticField);
        System.out.println("父类静态块");
    }

    {
        System.out.println(parentNormalField);
        System.out.println("父类普通块");
    }

    public parent(){

        System.out.println("父类构造方法");
    }
}

class child extends parent{
    public static String childStaticField = "子类静态变量";
    public String childNormalField ="子类普通变量";
    static {
        System.out.println(childStaticField);
        System.out.println("子类静态块");
    }

    {
        System.out.println(childNormalField);
        System.out.println("子类普通块");
    }

    public child(){
        System.out.println("子类构造方法");
    }
}


输出:

代码如下:

父类静态变量
父类静态块
子类静态变量
子类静态块
父类普通变量
父类普通块
父类构造方法
子类普通变量
子类普通块
子类构造方法

执行过程:

1、当执行到new child时,装载器寻找已经编译的child类的代码(也就是child.class文件)。在装载的过程中,装载器注意到它有一个基类,于是它再装载基类。不管你创不创建基类对象,这个过程总会发生。如果基类还有基类,那么第二个基类也会被装载,依此类推。

2、执行根基类的static初始化,然后是下一个派生类的static初始化,依此类推。这个顺序非常重要,因为派生类的“static初始化”有可能要依赖基类成员的正确初始化。

3、当所有必要的类都已经装载结束,创建child类对象。

4、child类存在父类,则调用父类的构造函数,可以使用super来指定调用哪个构造函数。

  基类的构造过程以及构造顺序,同派生类的相同。首先基类中各个变量按照字面顺序进行初始化,然后执行基类的构造函数的其余部分。

5、对子类成员数据按照它们声明的顺序初始化,执行子类构造函数的其余部分。


    
 
 

您可能感兴趣的文章:

  • java map(HashMap TreeMap)用法:初始化,遍历和排序详解
  • java安全里面的PrivateKey和PublicKey是怎么初始化的??
  • Java对象初始化顺序的使用
  • java父类和子类初始化顺序的深入理解
  • JAVA中使用双括号来初始化静态常量的小技巧
  • 通过java字节码分析学习对象初始化顺序
  • java对象初始化顺序验证示例
  • Java数组声明、创建、初始化基础
  • 一个关于java构建器的初始化菜鸟问题,10分求解!!
  • 在java中 利用匿名内部类进行较简洁的双括弧初始化的方法
  • Java中List与Map初始化的一些写法分享
  • java中关于合成过程中初始化的一问
  • Java类变量和成员变量初始化过程的应用介绍
  • 浅谈Java变量的初始化顺序详解
  • java不通过配置文件初始化logger示例
  • 哪位java同门师兄有《java2编程详解》电子文档,注意不是影印版
  • 请问哪儿有java2编程详解的电子书下载??本人急需!!跟贴有分!!!
  • 谁有JAVA的类库详解或下载地址?
  • 请问那里有《JAVA2编程详解》可以下载?
  • 《Java 2 编程详解》程序清单14.12中的一个问题。
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • 我非常想知道JAVA跟C/C++对于硬件控制的能力孰强孰弱.(菜鸟问题,要详解,在线等待)
  • Java中的随机数详解
  • 深入分析Java内存区域的使用详解
  • Java加载JDBC驱动程序实例详解
  • Java代码重构的几种模式详解
  • JAVA中list,set,数组之间的转换详解
  • Java中关于int和Integer的区别详解
  • java equals函数用法详解
  • Java I/O技术之文件操作详解
  • java this super使用方法详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 问一个关于java小程序执行顺序的问题
  • 一个关于java构建器的初始化菜鸟问题,10分求解!! iis7站长之家
  • 急,请问,java执行流程的顺序,谢谢!!!!
  • 着急!我安装jdk1.4时,按照java网上的安装顺序进行,可执行不下去,为什么?具体见内容
  • 浅谈Java中父类与子类的加载顺序详解
  • java实现顺序结构线性列表的函数代码
  • 为什么Java中读Result中的列只能按顺序?
  • java中子类继承父类,程序运行顺序的深入分析
  • 在Java中自由块的执行顺序
  • java数据结构实现顺序表示例
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍
  • 新年第一天,让我们讨论一下未来一年JAVA的发展趋势! 个人认为,JAVA将主要朝ERP和JAVA手机方面发展!
  • java命名空间java.security类keystore的类成员方法: getdefaulttype定义及介绍
  • 我想学Java,但不知道Java的实用的开发工具有那些,Java主要用在哪些方面,EJB到底是什么东西??
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getclasspath定义及介绍
  • redhat7.3下,java程序打印中文直接用java命令执行正常,用crontab执行java命令为乱码
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javaserializedobjectmimetype定义及介绍
  • 各位学java的朋友,学java的未来是什么,你们学java都用来开发什么项目啊!来者给分!!
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javafilelistflavor定义及介绍
  • 请问java程序中的import为什么有的用java.….*,而有的又用java.….…,有什么区别吗?
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getvmname定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3