woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

Java静态初始化,实例初始化以及构造方法

首先有三个概念需要了解:
一.静态初始化:是指执行静态初始化块里面的内容。
二.实例初始化:是指执行实例初始化块里面的内容。
三.构造方法:一个名称跟类的名称一样的方法,特殊在于不带返回值。
对于这三个概念,给出以下程序,方便理解:

Java代码 clip_image001

class Book{ 

    public static int booksum=0;//静态变量 

 

    static{//这是静态初始化块 

        print(); 

        System.out.println("this is static block"); 

    } 

 

    {//实例初始化块 

        System.out.println(booksum); 

    } 

 

    public Book(){//构造方法 

        System.out.println("this is Book's constructor~");  

        booksum+=1; 

    } 

 

    public static void print(){//静态方法 

        System.out.println("this is static method~"); 

    } 

} 

 


我仅从代码执行的角度来探讨Java加载类、创建对象的过程,并没有深入到JVM的机制中去,因此不保证JVM
这样的一个过程,但我认为如果仅想对Java的代码执行过程有个了解,我下面的分析就足够了。
1
一个对象第一次被创建时,先要加载该对象所属的类,即对应的.class文件,当然如果类已经加载,再次创建该类的对象时,就不再需要重新加载类了。
而一个类加载的时候,有三个部分需要加载:

a:一个是静态变量

b:再然后是静态方法,

c:然后是静态初始化块


2.然后开始创建该类的实例了,当然如果静态方法跟静态初始化对象中有对象的创建时,就继续加载该对象的类,当然已经加载了该对象的类的话就不需要再次加载了。那么对象实例的创建过程是什么呢?

a:首先是成员变量的引入,

b:然后是实例初始化块

c:之后才是构造方法,

造方法执行完成之后才算把这个对象给创建出来了。


在这个过程中,真正可以编写执行代码的地方有三个,

a:静态初始化、

b:实例初始化

c:以及构造方法。

 

    从以上的分析中我们可以看到,这三个代码块的执行顺序是

先类的静态初始化,

再实例初始化,

最后执行构造方法。

 

    也就是说,静态初始化是属于类加载的过程,所以它只执行一次,而实例初始化是每个对象创建时都会执行一次,而构造方法跟实例初始化其实也差不多,不过它在实例初始化之后执行,而且构造方法可以重载多个,执行哪个构造方法是根据你的选择来的。实例初始化据 Thinking in Java上说,对于匿名内部类的初始化来说是必须的。不过我还没看到那边,先了解一下,类的基本执行过程,做个总结,欢迎批评指正。

 

posted on 2009-08-17 12:16 肥仔 阅读(339) 评论(0)  编辑 收藏 引用 所属分类: Web-后台


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理