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

java中对象的初始化

    博客分类:
  • java
阅读更多
      Java程序的初始化对于新手来说是比较复杂,看似繁琐,对于我们已经有些经验的程序员来说也未必很清楚,搞清楚了对象初始化的过程不至于在程序中犯些莫名的错误。创建对象时,初始化的顺序是由变量在类的定义里的顺序所决定。变量的定义可以分散在类定义中的各个地方,并且与方法定义相互交错,但是变量的初始化会优先于任何方法,甚至是构造函数的调用。在变量中又可以分为静态变量和非静态变量,在创建对象或调用类的静态方法时,首先会对类的所有静态成员进行初始化,然后初始化非静态成员,代码如下:
Cup 代码
  1. package test;  
  2.   
  3. public class Cup{  
  4.     public Cup(int marker) {  
  5.         System.out.println("Cup(" + marker + ")");  
  6.     }  
  7.     void f(int marker){  
  8.         System.out.println("f(" + marker + ")");  
  9.     }  
  10. }  
Cups 代码
  1. package test;  
  2.   
  3. public class Cups{  
  4.   
  5.     static Cup c1 = new Cup(1);      
  6.     Cup c3 = new Cup(3);  
  7.   
  8.     public Cups() {  
  9.         System.out.println("Cups()");  
  10.     } 
  11.    static Cup c2 = new Cup(2); 
  12. }  
ExplicitStatic 代码
  1. package test;  
  2.   
  3. public class ExplicitStatic {  

  4.     public static void main(String[] args) {  
  5.         System.out.println("Inside main()");  
  6.         Cups cups = new Cups();  
  7.     }  
  8.   
运行结果如下:
 
  1. Inside main()  
  2. Cup(1)  
  3. Cup(2)  
  4. Cup(3)  
  5. Cups()  
       从运行结果可以看出,创建Cups对象时先初始化它的两个静态成员c1和c2,又由于这两个静态成员在Cups类中定义的顺序是c1、c2所以输出结果为Cup(1),Cup(2),接着才初始化非静态的成员c3,最后才是Cups的构造函数的调用。
      如果对象存在父类,则在初始化时首先会初始化父类对象。我们可以这样考虑,子类是继承父类的,它必然会使用父类的protected和public的成员变量和方法,如果父类不先初始化子类又如何去使用呢。
分享到:
评论

相关推荐

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

    在Java编程语言中,对象初始化是一个关键的概念,它涉及到类加载、对象实例化以及成员变量的赋值。本文将深入探讨Java中对象初始化的顺序,帮助开发者理解这一过程的细节。 首先,Java类的加载过程分为三个阶段:...

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

    总之,理解并有效地使用静态和对象初始化块是Java开发中的关键技能,它们可以帮助我们更好地控制类和对象的初始化过程,确保代码的高效性和正确性。在实际编程中,我们应该根据需求谨慎选择合适的初始化策略,以优化...

    java中对象创建、初始化、引用

    ### Java中对象创建、初始化与引用详解 #### 一、Java对象、引用及创建过程 在Java中,对象是程序的基本单位,它包含了属性(成员变量)和行为(方法)。对象是由类创建出来的实例,而类则是一组具有相同属性和...

    java代码的初始化顺序demo

    在Java编程语言中,类和对象的初始化是一个关键的概念,对于理解和编写健壮的程序至关重要。这个"java代码的初始化顺序demo"显然旨在演示这一过程。让我们深入探讨Java中的初始化顺序及其背后的机制。 1. **类加载...

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

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

    “礼让”原则学习Java对象初始化顺序.pdf

    Java 对象初始化顺序是指在 Java 程序中,对象的初始化过程中发生的顺序问题。这是 Java 编程语言的基础知识点之一,但是许多学生在学习和使用时总是感到困惑和困难。 二、JVM 执行过程中的“礼让”原则 JVM 在...

    Java类继承初始化顺序

    在Java编程语言中,类继承是面向对象设计的一个核心特性,它允许我们创建一个新类(子类)作为现有类(父类)的扩展。当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、...

    java中类的初始化顺序

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

    Java中创建初始化对象.pdf

    3. **对象初始化**:Java语言倾向于创建具有明确状态的对象。如果类的成员没有显式初始化,它们会被赋予默认值,如整型变量默认为0,布尔变量为false,引用类型为`null`。初始化可以通过构造方法完成,构造方法可以...

    java程序初始化顺序

    在Java编程语言中,程序初始化的顺序是一个关键概念,它涉及到类加载、对象创建以及执行流程的安排。了解这些顺序对于编写高效、无错误的代码至关重要。以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**...

    Java对象初始化的多维度分析 (2).pdf

    在 Java 中,对象初始化是一个复杂的过程。我们可以通过一个例子来看一下对象初始化的过程: ```java class P { int x = 11; int y; int z; } class S extends P { int m = 100; public static void main...

    java 初始化与方法

    Java初始化与方法是Java编程语言中的核心概念,它们在程序执行过程中起着至关重要的作用。本文将深入探讨Java中的初始化过程、方法的定义与调用,以及与之相关的源码和工具应用。 首先,让我们从类的初始化开始。在...

    03.Java对象初始化1

    Java 对象初始化过程详解 Java 对象的初始化过程是通过 new 指令开始的,首先会根据指令参数在常量池中定位到一个类的符号引用。如果没有定位到这个符号引用,那么这个类就没有被加载,就需要 JVM 进行类的加载。...

    java对象的初始化顺序[参考].pdf

    Java对象的初始化顺序是一个关键的编程概念,它涉及到类加载、静态初始化、实例初始化等多个步骤。下面我们将详细探讨这些步骤。 首先,当程序运行并创建一个新的对象时,JVM(Java虚拟机)会按照特定的顺序来初始...

    java类变量初始化顺序

    详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。

    Java变量初始化

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

    Java中StringBuffer对象的初始化.pdf

    在Java编程语言中,`StringBuffer`类是一个非常重要的工具,尤其在处理字符串连接操作时。与`String`类不同,`StringBuffer`是可变的(mutable...理解如何正确初始化和使用`StringBuffer`是Java程序员必备的技能之一。

    java中对象创建、初始化、引用文.pdf

    6. **对象初始化**:在Java中,对象的初始化通常在`new`关键字后跟的构造方法中进行。构造方法用于设置对象的初始状态,可以是默认构造方法(无参),也可以是带有参数的构造方法。初始化还可以通过成员变量的初始化...

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

    Java 初始化块,也称为构造代码块,是Java编程语言中的一种特性,用于在对象创建时执行特定的初始化操作。初始化块在类的定义中以 `{}` 包裹的一段代码,没有返回值,也不需要任何参数。根据是否带有 `static` ...

Global site tag (gtag.js) - Google Analytics