码迷,mamicode.com
首页 > 编程语言 > 详细

再次认识Java中构造器的初始化与继承

时间:2017-08-31 14:19:19      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:[]   对象引用   完成   构造器   ret   引用   stat   访问   put   

class Insect
{
    private int i = 9;
    protected static int j;
    Insect()
    {
        Print.print("i = " + i + ",j = " + j);
        j = 39;
    }

    private static int x1 = printInit("static Insect.x1 初始化");

    static int printInit(String s)
    {
        Print.print(s);
        return 47;
    }
}

public class Beetle extends Insect
{
    private int k = printInit("Beetle.k 初始化");

    public Beetle()
    {
        Print.print("k = " + k);
        Print.print("j = " + j);
    }

    private static int x2 = printInit("static Beetle.x2 初始化");

    public static void main(String[] args)
    {
        Print.print("Beetle constructor");
        Beetle a= new Beetle();
    }
}/* 输出
static Insect.x1 初始化
static Beetle.x2 初始化
Beetle constructor
i = 9,j = 0
Beetle.k 初始化
k = 47
j = 39
i = 9,j = 39 *///:~

在Beetle上运行Java时,所发生的第一件事情就是试图访问Beetle.main(),在对其加载的过程中编译器发现它有一个基类,则基类首先被加载,接下来,基类中的static初始化即会被执行,所以output中的第一个语句static Insect.x1 初始化产生;下面Beetle类开始执行与基类相同的步骤,所以static Beetle.x2 初始化得到输出。至此为止,必要的类都已加载完毕,对象就可以被创建了。创建对象a时,调用构造器,而构造器和static代码段中的代码在执行的过程中是顺序执行的,所以会输出i = 9,j = 0

加载完成后就开始执行main函数了第一个被执行的语句是Print.print("Beetle constructor");所以output中产生了Beetle constructor。

在基类的构造器被调用之前,对象中所有的基本类型都会被设为默认值,对象引用被设为null-这是通过将对象内存设为二进制零值而一举生成的。然后,基类的构造器会被调用。在本例中,它是被自动调用的,基类构造器和导出类的构造器一样,以相同的顺序来经历相同的过程。在基类构造器完成之后,实例变量按其次序被初始化。所以有k = 47,j = 39输出。

 

再次认识Java中构造器的初始化与继承

标签:[]   对象引用   完成   构造器   ret   引用   stat   访问   put   

原文地址:http://www.cnblogs.com/woaidongguagua/p/7457613.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!