美文网首页
类和实例变量的初始化过程

类和实例变量的初始化过程

作者: ccUpUp | 来源:发表于2019-02-20 18:33 被阅读0次

关于类和实例变量初始化过程,我们直接看代码来解释比较好理解。
代码如下:

public class Father{
    private int i = test();
    private static int j = method();

    static{
        System.out.print("(1)");
    }
    Father(){
        System.out.print("(2)");
    }
    {
        System.out.print("(3)");
    }


    public int test(){
        System.out.print("(4)");
        return 1;
    }
    public static int method(){
        System.out.print("(5)");
        return 1;
    }
}
public class Son extends Father{
    private int i = test();
    private static int j = method();
    static{
        System.out.print("(6)");
    }
    Son(){
//      super();//写或不写都在,在子类构造器中一定会调用父类的构造器
        System.out.print("(7)");
    }
    {
        System.out.print("(8)");
    }
    public int test(){
        System.out.print("(9)");
        return 1;
    }
    public static int method(){
        System.out.print("(10)");
        return 1;
    }
    public static void main(String[] args) {
        Son s1 = new Son();
        System.out.println();
        Son s2 = new Son();
    }
}

执行结果如下:

(5)(1)(10)(6)(9)(3)(2)(9)(8)(7)
(9)(3)(2)(9)(8)(7)

我们根据程序执行结果来分析可以得知:

类和实例变量的初始化过程:
程序首先初始化父类,再初始化子类。
具体初始化顺序如下:
第一步首先初始化类
1)静态实例变量
2)静态代码块
3)它俩谁在程序前边谁先执行
第二步初始化类的实例变量
1)初始化非静态变量
2)非静态代码块
3)它俩谁在程序前边谁先执行
4)父构造器
5)子构造器
需要注意的是程序中的test()方法为重写的方法,Son对象在初始化时执行的是Son类里的test()方法。

非静态方法前面其实有一个默认的对象this,this在构造器(或<init>)它表示的是正在创建的对象,因为这里是在创建Son对象,所以test()执行的是子类重写的代码(面向对象多态)。

相关文章

  • 自整理1

    1.java类的实例的初始化过程: 静态变量->静态代码块->main->实例变量->实例初始化块->构造器 加载...

  • Java初始化顺序

    Java初始化顺序:①类变量、类方法>②(父类代码)>③实例变量>④构造器当一个类要实例化时,static变量和方...

  • 类和实例变量的初始化过程

    关于类和实例变量初始化过程,我们直接看代码来解释比较好理解。代码如下: 执行结果如下: 我们根据程序执行结果来分析...

  • Dart - 类(变量声明、构造函数)

    这节详细介绍如何定义类的变量声明和构造方法。 实例变量 下面是声明实例变量的示例: 备忘:"所有未初始化的实例变量...

  • 2019-03-07

    实例变量:已声明的用来复制的变量类变量:类里面的变量,类里面没有的变量可以在类初始化后在外边声明。实例变量可以用类...

  • From Objective-C to Ruby(4)-类和模块

    类 定义类 OC: ruby: 初始化方法 OC: ruby: 实例变量和属性 OC: ruby: 类方法和对象方...

  • Python实例变量和类变量

    Python实例变量和类变量 类变量(类属性): 类变量属于类所有,所有实例共享一个变量 实例变量(实例属性) 实...

  • java类变量及成员变量初始化的顺序问题

    类对象:属于类本身,类初始化的时候会在内存中开辟对应的内存空间,多个类的实例是共享这一份类变量的,类实例访问类变量...

  • 对比几种常用语言的类,实例,类属性、方法,实例属性、方法等

    1、类和构造函数 构造函数:初始化实例实例属性:定义在方法中的变量,只作用于当前实例实例方法:属于实例的函数 1....

  • 第45节:Java当中的变量,面向对象

    Java当中的变量 01 Java当中的实例变量和类变量 什么是实例变量和类变量呢? 实例变量为没有用static...

网友评论

      本文标题:类和实例变量的初始化过程

      本文链接:https://www.haomeiwen.com/subject/ljqkyqtx.html