JAVA对象创建代码调用顺序

原创 2016年05月31日 20:57:57

JAVA对象创建代码调用顺序

JAVA中初始化对象有多种方法:静态代码块、数据直接初始化、非静态代码块、构造器等。JVM创建一个新的对象有一个调用顺序。
看如下代码:

//Father类
public class Father {
    String A = "这是Father的数据初始化";
    {
        System.out.println(A);
        System.out.println("这是Father非静态块");
    }
    static{
        System.out.println("这是Father静态块");
    }
    public Father(){
        System.out.println("这是Father的构造器");
    }
}
//Son类继承Father
public class Son extends Father{
    static String B = "这是Son的静态数据初始化";
    String C = "这是Son的数据初始化";
    {
        System.out.println("这是Son非静态块");
    }
    static{
        System.out.println(B);
        System.out.println("这是Son静态块");
    }
    public Son(){
        System.out.println("这是Son的构造器");
    }
}
//主函数创建类
public class Main {
    public static void main(String args[]){
        Son aSon = new Son();
    }
}

输出结果如下:

这是Father静态块
这是Son的静态数据初始化
这是Son静态块
这是Father的数据初始化
这是Father非静态块
这是Father的构造器
这是Son非静态块
这是Son的构造器

可以得出结论,代码调用顺序为:

  1. 先父后子,所有静态块先加载;
  2. 在相应静态/非静态初始化中按照顺序:数据初始化->代码块(static/nonstatic)->构造器(nonstatic)。
版权声明:本文为博主原创文章,未经博主允许不得转载。

java静态代码调用顺序

package com.proj.oop; class Child extends Parent { public final int age = 12; static{ System.out...
  • bdbjxsr
  • bdbjxsr
  • 2015年10月21日 10:17
  • 156

JAVA中复杂对象调用构造器顺序

最近读《JAVA编程》思想有点心得,给大家分享下。 关于Java中复杂对象调用构造器顺序,话不多说直接上代码public class A { public A() { Syst...
  • c275046758
  • c275046758
  • 2015年09月15日 22:35
  • 693

Java构造函数调用顺序问题

java构造代码调用顺序研究。
  • u012927281
  • u012927281
  • 2017年06月07日 19:18
  • 610

java中继承期间父子类型的初始化顺序以及重写方法的调用规则

今天学习了java中继承期间父子类型的初始化顺序以及重写方法的调用规则,这个知识点比较抽象,理解起来也比较复杂。根据自己的学习、自我理解、总结,用来sharing~       由于这边不是java...
  • hhhhhggggddd
  • hhhhhggggddd
  • 2017年03月23日 17:41
  • 663

JAVA之父子类的构造函数、静态代码块等执行顺序

最近在做项目时遇到了Java构造函数,代码块的一些执行顺序方面的知识,随兴做了个实验,毕竟实践出真知嘛。遇到的问题简单说一下就是在子类A继承父类B的时候,如果在代码中A a = new A();这个时...
  • as02446418
  • as02446418
  • 2015年07月27日 22:27
  • 1530

iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期

~~~~我的生活,我的点点滴滴!!
  • AC_huang
  • AC_huang
  • 2015年02月04日 11:32
  • 4871

Java在继承中构造器的调用顺序

Java中子类继承父类时代码结构初始化以及调用的顺序:    子类声明一个对象时,     步骤1: 这时先调用的是基类的静态初始化块,然后是下一层的子类,一直到声明对象的类的静态初始化块。从这里...
  • wangjinyang_123
  • wangjinyang_123
  • 2015年06月08日 20:16
  • 1103

Java对象创建过程和内存结构分析

JAVA内存分配和管理是JAVA的核心技术之一,在看了尚硅谷宋红康老师讲解的JAVA内存知识之后,结合《深入理解JVM这本书》对自己所学的知识进行简单的总结,写了这篇日志。 1.JAVA内存分区 ...
  • u010001192
  • u010001192
  • 2015年05月03日 16:02
  • 2690

Java基础-06.总结二维数组,面向对象

1:二维数组(理解) (1)元素是一维数组的数组。 (2)格式: A:数据类型[][] 数组名 = new 数据类型[m][n]; B:数据类型[][] 数组名 = new 数据类型[m][]; C:...
  • s1547823103
  • s1547823103
  • 2016年12月05日 17:36
  • 444

Java中对象创建和构造方运行顺序?

Java中new对象的时候与构造方法运行的先后顺序,调用构造方法时对象是否产生了?可以用一个例子来说明吗?它在内存的具体分配。 调用构造方法时对象是否产生了? 能否具体说明一下 即:new ...
  • qq_16769857
  • qq_16769857
  • 2015年08月29日 16:57
  • 522
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA对象创建代码调用顺序
举报原因:
原因补充:

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