`
xjlnjut730
  • 浏览: 56523 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

阅读更多

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

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文件,当然如果类已经加载,再次创建该类的对象时,就不再需要重新加载类了。
而一个类加载的时候,有三个部分需要加载,一个是静态变量,再然后是静态方法,然后是静态初始化块。
2.然后开始创建该类的实例了,当然如果静态方法跟静态初始化对象中有对象的创建时,就继续加载该对象的类,当然已经加载了该对象的类的话就不需要再次加 载了。那么对象实例的创建过程是什么呢?首先是成员变量的引入,然后是实例初始化块,之后才是构造方法,构造方法执行完成之后才算把这个对象给创建出来 了。
在这个过程中,真正可以编写执行代码的地方有三个,静态初始化、实例初始化以及构造方法。从以上的分析中我们可以看到,这三个代码块的执行顺序是先类的静 态初始化,再实例初始化,最后执行构造方法。也就是说,静态初始化是属于类加载的过程,所以它只执行一次,而实例初始化是每个对象创建时都会执行一次,而 构造方法跟实例初始化其实也差不多,不过它在实例初始化之后执行,而且构造方法可以重载多个,执行哪个构造方法是根据你的选择来的。实例初始化据 Thinking in Java上说,对于匿名内部类的初始化来说是必须的。不过我还没看到那边,先了解一下,类的基本执行过程,做个总结,欢迎批评指正。

4
0
分享到:
评论
3 楼 zengzhen 2013-04-26  
也不把运行结果贴出来!
2 楼 mzqhappylife 2012-05-05  
总结的真不错,顶下
1 楼 liujiawinds 2012-04-15  
public class TestInstanceInit{
	{
		a=6;
	}
	int a=9;
	public static void main(String[] args){
		System.out.println(new TestInstanceInit().a);
	}
}

弱弱的问下,为什么这个会输入9呢。

相关推荐

    Java静态初始化块和对象初始化块

    静态初始化块是以`static`关键字标识的代码块,它在类被加载到Java虚拟机(JVM)时执行,且只执行一次。静态初始化块常用于设置类级别的变量,或者执行只应执行一次的初始化操作。例如,如果一个类需要在程序运行前...

    java 静态非静态 字段方法 子类父类构造_初始化顺序!

    java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...

    java 初始化与方法

    静态初始化块用于在类加载时执行一次的初始化操作,而实例初始化块则在每次创建新对象时执行。这两个块可以用来设置默认值、初始化复杂对象或者执行其他必要的配置。 接下来,我们讨论Java方法。方法是代码的复用...

    java代码的初始化顺序demo

    总之,Java代码的初始化顺序是类加载的必然过程,涉及到静态和实例初始化块、构造函数、成员变量初始化以及继承关系的影响。这个demo是学习和理解这些概念的重要工具,通过实际操作可以加深对Java内存管理和对象生命...

    java程序初始化顺序

    - 静态初始化块(static{}):如果类中存在静态初始化块,该块的代码会在类加载后的准备阶段执行,用于初始化静态变量或执行其他静态设置任务。 - 静态变量的赋值:接着,静态变量会被赋予它们的初始值,这可以是...

    java中类的初始化顺序

    类的初始化涉及到多个方面,包括静态成员变量、实例成员变量、静态初始化块、实例初始化块以及构造函数等。本文将详细探讨Java中类的初始化过程及其顺序,并通过具体的代码示例来帮助理解这一过程。 #### 二、基础...

    学习java静态数据初始化.doc

    ### Java静态数据初始化详解 #### 一、Java静态初始化...通过本篇文章的学习,我们了解了Java中静态初始化的基本概念、执行过程以及如何正确地在程序中使用静态初始化。这对于理解和优化Java应用程序具有重要意义。

    java类中静态域、块,非静态域、块,构造函数的初始化顺序

    - **非静态块(实例初始化块)**:在每次创建类的新实例时执行的代码块,用于初始化非静态域。 - **构造函数**:用于初始化新创建的对象的方法。 #### 二、初始化顺序 按照 Java 的规定,以下列出了类初始化的基本...

    Java static静态初始快

    3. **静态初始化块与构造函数**:静态初始化块和构造函数有明显的区别。构造函数是在创建对象时执行,而静态初始化块是在类加载时执行。两者不会相互影响,它们各自负责不同的初始化任务。 4. **多线程环境**:如果...

    java 静态块实例块构造器调用

    实例块是类中不包含`static`关键字的代码块,它在创建类的新实例时执行,用于初始化实例变量。每次创建类的新实例时,都会执行实例块。 ```java public class Parent { { System.out.println("Parent instance ...

    Java初始化块Java初始化块.doc

    静态初始化块不能访问非静态成员,包括实例属性和实例方法,因为它们依赖于对象实例,而静态初始化块在类加载时并没有对象存在。 类的初始化顺序如下: - 当Java创建一个对象时,先为对象的所有属性分配内存。 - ...

    java的静态域实例域

    构造方法可以用来初始化实例域,确保每个新对象都有适当的初始状态: ```java public class MyClass { int id; public MyClass(int initialId) { this.id = initialId; // 构造方法初始化实例域 } } ``` ...

    Java类继承初始化顺序

    总之,Java类继承初始化顺序涉及到静态和非静态初始化块、构造器的调用以及方法的覆盖。理解这些概念对于编写健壮的、易于维护的Java代码至关重要。在实际编程中,应合理利用继承特性,同时注意避免不必要的复杂性和...

    java面试题静态加载顺序构造方法

    java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。 package extend; public class X { Y y=new Y(); static{ System.out.println("tttt"); } X(){ System....

    Java中初始化数据域的四种方法

    静态初始化块常用于初始化静态数据结构或一次性设置全局配置。 以上四种方法在不同的场景下各有优劣。直接赋值简单快速,但缺乏灵活性;构造器初始化可以根据对象实例化时的状态来设置初始值;初始化块适合于更...

    详解Java的初始化与清理

    3. 接着,执行当前类的非静态初始化,包括当前类的构造器。 4. 最后,执行实例初始化块(如果存在)。 以下是一个例子,展示了这个顺序: ```java class Insect { private int i = 9; protected int j; private...

    java构造方法

    在创建一个对象时,Java首先初始化类中的静态成员,然后是实例成员,最后才是构造方法。这意味着如果一个类中有多个成员变量,它们的初始化顺序将按照代码中声明的顺序进行。 #### 八、总结 构造方法是Java编程...

    对象初始化流程梳理对象初始化流程梳理

    Java中的对象初始化流程是编程实践中一个非常重要的概念,它涉及到类加载、静态初始化块、实例初始化块、构造器等多个方面。下面将详细解释这个过程。 首先,对象初始化流程的起点是程序的入口点,即`main`方法。当...

    java学习之神奇初始化

    4. **实例变量的显式初始化**:在构造器调用之前,会按照声明顺序初始化实例变量。 5. **构造器中的初始化**:构造器中定义的初始化逻辑。 6. **非静态初始化块**:位于类体中的非静态初始化块按照它们出现的顺序被...

Global site tag (gtag.js) - Google Analytics