【第22期】观点:IT 行业加班,到底有没有价值?

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中创建对象的时候代码执行顺序

在Java中,创建一个对象,到底代码执行顺序是什么样子的。通过编写一个类,测试一下就知道了。 1、首先测试一个直接从Object继承的类。 public class Parent {     p...

代码说事 之 创建java对象的初始化顺序

package util; /** * 类初始化顺序: *父类静态代码块--->子类静态代码块--->父类代码块--->父类构造方法--->子类 *代码块--->子类构造方法 *1. 父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行 *2. 子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行 *2. 父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行 *4. 父类构造方法 *5. 子类实例成员和实例初始化块 ,按在代码中出现的顺序

java创建对象时代码执行顺序探讨

没有继承父类情况下,在创建对象时候相关代码的执行顺序: 静态代码块/静态成员变量 > 构造代码块/成员变量 > 构造方法 ,对于同一级别的部分按照顺序从前往后执行,下面举例说明 以下是class...

C/C++调用Java代码 创建对象、字符串操作

back>> 1. java对象的创建的步骤     - 函数NewObject可以创建java对象     - 用GetMethodID方法取得构造方法的jmethodID,传入方法名称设定为"<init>"表示取的是构造方法的methodID     - 构造方法的方法返回值类型的签名始终
  • zzqrj
  • zzqrj
  • 2011-12-01 16:08
  • 2072

Java代码执行顺序分析

    版权声明:这个系列的文章都是看了别人的文章有感而发创作的,所谓"知识没有抄袭之说",如果有人发现雷同或属巧合或属非巧合,不过不过本人绝对不屑copy然后paste的勾当,那样只会产生信息的冗余。 朋友们装载请记得注明出处!  </p
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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