`

Java中的数据成员初始化顺序

    博客分类:
  • Java
阅读更多

1-类的静态初始化块(注:只会第一次使用到这个类的时候被执行一次)
2-类的静态数据成员
3-类的非静态初始化块
4-类的非静态数据成员
5-类的构造函数

example in 《Thinking in java》

java 代码
  1. class Bowl{   
  2.     Bowl(int marker){   
  3.         System.out.println("Bowl :"+marker);   
  4.     }   
  5.     void f(int marker){   
  6.         System.out.println("f :"+marker);   
  7.     }   
  8. }   
  9.   
  10. class Table{   
  11.     static Bowl b1=new Bowl(1);   
  12.     Table(){   
  13.         System.out.println("Table()");   
  14.         b2.f(1);   
  15.     }   
  16.        
  17.     void f2(int marker){   
  18.         System.out.println("f2 :"+marker);   
  19.     }   
  20.     static Bowl b2=new Bowl(2);   
  21. }   
  22.   
  23. class Cupboard{   
  24.     Bowl b3=new Bowl(3);   
  25.     static Bowl b4=new Bowl(4);   
  26.     Cupboard(){   
  27.         System.out.println("Cupboard()");   
  28.         b4.f(2);   
  29.     }   
  30.     void f3(int marker){   
  31.         System.out.println("f3 :"+marker);   
  32.     }   
  33.     static Bowl b5=new Bowl(5);   
  34. }   
  35.   
  36.   
  37. public class StaticInitialization {   
  38.        
  39.     public static void main(String[] args) {   
  40.         System.out.println("Creating new Cupboard() in main");   
  41.         new Cupboard();   
  42.         System.out.println("Creating new Cupboard() in main");   
  43.         new Cupboard();   
  44.         t2.f2(1);   
  45.         t3.f3(1);   
  46.     }   
  47.     static Table t2=new Table();   
  48.     static Cupboard t3=new Cupboard();   
  49.        
  50. }  

 

执行结果:

  1. Bowl :1  
  2. Bowl :2  
  3. Table()   
  4. f :1  
  5. Bowl :4  
  6. Bowl :5  
  7. Bowl :3  
  8. Cupboard()   
  9. f :2  
  10. Creating new Cupboard() in main   
  11. Bowl :3  
  12. Cupboard()   
  13. f :2  
  14. Creating new Cupboard() in main   
  15. Bowl :3  
  16. Cupboard()   
  17. f :2  
  18. f2 :1  
  19. f3 :1  
分享到:
评论

相关推荐

    java中类的初始化顺序

    ### Java中类的初始化顺序详解 #### 一、概述 在Java编程语言中,类的初始化是一个非常重要的概念。类的初始化涉及到多个方面,包括静态成员变量、实例成员变量、静态初始化块、实例初始化块以及构造函数等。本文...

    关于Java静态成员变量和静态初始化块等的初始化顺序的详细介绍

    详细介绍了Java的静态成员变量、静态数据块、非静态成员变量和非静态成员变量等初始化顺序

    Java初始化顺序1

    Java 中的初始化顺序是按照定义的顺序进行的,而静态变量的初始化顺序则是按照定义的顺序,并且只在第一次访问时初始化。 Java 初始化顺序的知识点总结: * 类变量(静态变量)和实例变量(对象变量)的区别 * ...

    简单了解Java类成员初始化顺序

    Java类成员初始化顺序是Java编程中一个非常重要的概念,它直接关系到Java类的实例化和成员变量的初始化顺序。下面我们将通过详细的示例代码来介绍Java类成员初始化顺序。 首先,Java类中包含7种成员:静态变量、...

    C++和Java初始化顺序的比较代码

    本篇文章将深入探讨C++和Java中变量和成员初始化的差异,并通过具体的代码示例进行对比。 在C++中,初始化顺序遵循以下规则: 1. 静态成员变量:无论它们在哪里定义,静态成员变量都按照声明的顺序初始化。 2. 非...

    JAVA面试题解惑系列——类的初始化顺序

    在Java中,类的初始化顺序是一个经常被问及的面试题目,尤其对于Java程序员和工程师来说,了解这个知识点是必须的。在Java中,类的初始化顺序是面试中的经典问题之一,它涉及到继承、静态成员以及实例成员等多个方面...

    Java中对象初始化顺序的详细介绍

    这种情况下,初始化顺序如下:首先,`Lower`类的实例创建并分配默认值,然后调用`Upper`的构造器,接着执行`Initializer.initialize()`,该方法根据对象的实际类型(`Lower`)来设置字段的值。 5. **默认值**:即使...

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

    - 在类的静态成员初始化完成之后,才会执行类的非静态成员初始化。 - 最后执行类的构造函数来创建对象。 3. **静态与非静态初始化的区别**: - 静态初始化发生在类被加载时,而非静态初始化则发生在每个对象被...

    Java变量初始化

    Java 变量初始化的时机是指在 Java 语言中变量的初始化过程,包括变量的声明、初始化和赋值的步骤。 Java 变量声明 在 Java 语言中,每个变量必须先声明,然后才能使用。声明变量时必须指定该变量的数据类型。...

    JAVA面试题解惑系列(一)——类的初始化顺序-JAVA程序员JAVA工程师面试必看.pdf

    了解这些初始化顺序有助于避免可能出现的错误,比如数据竞争、初始化异常等问题。在面试中,能够清晰地解释这个概念不仅显示了你对Java基础知识的掌握,也体现了你在实际编程中解决问题的能力。所以,对于Java程序员...

    Java类初始化顺序

    Java类的初始化顺序是编程中一个非常重要的概念,它涉及到对象的创建过程和成员变量的初始化。当一个Java类被实例化或者其静态成员被访问时,类的初始化过程就开始了。以下详细解释了Java类的初始化顺序: 1. **...

    Java类的完整构造执行顺序

    2006年11月16日的更新提到了一种特殊情况,即在静态初始化块中直接或间接地创建了当前类的实例,这可能会导致初始化顺序的混乱。为了避免此类问题,应避免在静态初始化块中直接实例化当前类,而是将其延迟到类完全...

    Java static静态初始快

    在Java编程语言中,`static`关键字扮演着重要的角色,特别是在初始化类的静态成员时。`static`静态初始化块是用来初始化类级别的变量,也就是说,这些变量是属于类本身,而不是类的实例。当我们讨论“Java static...

    Java中初始化块详解及实例代码

    静态初始化块只可以初始化类变量,即static修饰的数据成员。静态初始化块的执行顺序在静态变量的初始化之前。 非静态初始化块 非静态初始化块在每个对象生成时都会被执行一次,可以初始化类的实例变量。非静态初始...

    Java中一些基础概念的使用详解

    首先,让我们来看一下Java中类的初始化顺序。在Java中,一个类可能包含静态变量、静态初始化块、成员变量、实例初始化块和构造函数。当创建一个对象时,这些元素的加载顺序遵循特定的规则: 1. 静态成员和静态初始...

    JAVA面试题答疑解惑

    在Java面试中,理解和掌握类的初始化顺序对于理解Java语言的特性至关重要。类的初始化顺序不仅涉及到对象的创建,还涉及到类成员的加载顺序,包括静态成员和实例成员。 在Java中,类的初始化顺序遵循以下规则: 1....

    Java开发者文档,分享日常学习的一些小知识点 .rar

     ※在所有类成员初始化完成之后,才调用本类的构造方法创建对象。  构造方法的作用就是初始化。  (2) 静态对象的初始化  程序中主类的静态变量会在main方法执行前初始化。  不仅第一次创建对象时,类中的...

    Java-objects-initial.rar_objects

    这个压缩包“Java-objects-initial.rar_objects”包含了关于Java对象初始化顺序的详细信息,主要以"Java objects initial.txt"文件的形式存在。以下是对这个主题的详细阐述: 首先,我们需要了解Java对象生命周期的...

    Thinking in java4(中文高清版)-java的'圣经'

    5.4 this关键字 5.4.1 在构造器中调用构造器 5.4.2 static的含义 5.5 清理:终结处理和垃圾回收 5.5.1 finalize()的用途何在 5.5.2 你必须实施清理 5.5.3 终结条件 5.5.4 垃圾回收器如何工作 5.6 成员初始化 ...

    Java基础知识精华总结

    - 静态成员的初始化顺序遵循它们在类中出现的顺序。 #### 继承时对象的初始化过程 当一个类继承自另一个类时,对象的初始化遵循以下步骤: 1. 超类(基类)的静态成员初始化。 2. 子类的静态成员初始化。 3. ...

Global site tag (gtag.js) - Google Analytics