`
寻梦者
  • 浏览: 637338 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java类的初始化过程

阅读更多

  在《java编程思想》(第四版)146页,说到: 初始化之处就是static初始化发生之处,所有的static对象和static代码段都会在加载时依照程序中的循序初始化

 

 

package com.woyo.init;
/** 
 *@author Antty_ge
 *@date 2010-12-25
 */
class InitParent{
    
    public static int parentId= getParentId(44, true);
    public int id = getParentId(1, false);
    
    static{
        System.out.println("==this is the parent static block===");
    }
    
    public InitParent(){
        System.out.println("===parent构造器");
    }
    
    public static void getParentName(){
        System.out.println("==parent name is antty");
    }
    
    public static int getParentId(int id){
        System.out.println("==parent id is " + id);
        return id;
    }
    public static int getParentId(int id, boolean staticSign) {
        if(staticSign){
            System.out.println("==初始化静态属性parent id is " + id);
        }else{
            System.out.println("===初始化非静态属性 id is" + id);
        }
        return id;
    }
}

class InitChild extends InitParent{
    
    public static int childId =  getChildId(22, true);
    public int id = getChildId(1, false);

    static{
        System.out.println("==this is the child static block===");
    }
    
    public InitChild(){
        System.out.println("===child构造器");
    }
    
    public static void getChildName(){
        System.out.println("==child name is bob");
    }
    
    public static int getChildId(int id, boolean staticSign) {
        if(staticSign){
            System.out.println("==初始化静态属性child id is " + id);
        }else{
            System.out.println("===初始化非静态属性 id is" + id);
        }
        return id;
    }
}

public class Initialization extends InitChild{
   
    public static void main(String[] args) {
       Initialization init = new Initialization();  //测试初始化
    }
}

 运行结果:

 

==初始化静态属性parent id is 44
==this is the parent static block===
==初始化静态属性child id is 22
==this is the child static block===
===初始化非静态属性 id is1
===parent构造器
===初始化非静态属性 id is1
===child构造器

 

 

把代码的59行注释掉,执行main函数,运行结果变为:

 

==初始化静态属性parent id is 44
==this is the parent static block===
==初始化静态属性child id is 22
==this is the child static block===

 

 

最后总结类的初始化过程:

 

(1)如果是继承关系,则先从基类依次进行初始化

(2)static的属性跟代码段 -------如果是加载类

(3)static的属性跟代码段,非静态属性,构造器  ---如果是初始化对象

(4)stastic的方法,不会再加载类,或者初始化对象的时候初始化

 

分享到:
评论

相关推荐

    java面试题-类的初始化顺序.doc

    类--初始化块"); 39. } 40. // 构造器 41. public SubClass() { 42. System.out.println("子类--构造器"); 43. } 44. 45. public static void main(String[]...因此,掌握类的初始化顺序是每个Java开发者必备的知识点。

    java程序初始化顺序

    - 当多个线程同时尝试初始化同一个类时,Java保证只会执行一次类的初始化过程。这是由JVM的同步机制保证的,避免了数据竞争的问题。 5. **接口初始化**: - 接口没有实例变量,所以不存在实例初始化阶段。接口的...

    Java类继承初始化顺序

    当创建一个子类实例时,初始化过程遵循以下步骤: 1. **静态初始化**:首先,执行父类的静态初始化块,然后执行子类的静态初始化块。静态初始化块用于初始化类级别的静态变量,它们只在类加载时执行一次。 2. **...

    java类变量初始化顺序

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

    Java类初始化顺序

    当一个Java类被实例化或者其静态成员被访问时,类的初始化过程就开始了。以下详细解释了Java类的初始化顺序: 1. **初始化父类**: 在子类的构造方法执行之前,首先会调用父类的构造方法。如果子类没有明确指定...

    java代码的初始化顺序demo

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

    java中类的初始化顺序

    本文将详细探讨Java中类的初始化过程及其顺序,并通过具体的代码示例来帮助理解这一过程。 #### 二、基础知识 1. **静态成员变量(Static Fields)**:在类加载时初始化。 2. **实例成员变量(Instance Fields)**...

    类继承的初始化顺序类,继承的初始化顺序

    本篇文章将围绕“类继承的初始化顺序”这一主题展开,详细解析初始化过程中涉及的关键概念和技术细节。 ### 类继承的初始化顺序概述 在面向对象语言中(如Java、C#等),当创建一个继承自某个基类的子类对象时,会...

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

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

    Java变量初始化

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

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

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

    详解Spring 中如何控制2个bean中的初始化顺序

    Spring 中控制 2 个 bean 的初始化顺序 在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 ...

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

    ### Java 类中静态域、块,非静态域、块,构造函数的初始化顺序 #### 一、概述 在 Java 编程语言中,类的初始化顺序对于理解程序的行为至关重要。特别是当涉及到静态域(静态变量)、非静态域(实例变量)、静态块...

    深入java虚拟机(三)——类的生命周期(下)类的初始化1

    【深入Java虚拟机(三)——类的生命周期(下)类的初始化1】 类的生命周期在Java中是一个关键的概念,它涵盖了从加载到卸载的整个过程。在类的生命周期中,初始化阶段是非常重要的,因为它涉及到类的静态变量的赋值...

    java 初始化与方法

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

    探究java的ClassLoader及类变量初始化顺序

    理解ClassLoader的工作机制以及类变量初始化的顺序对于深入理解Java运行时环境至关重要。这篇博文将探讨这两个主题。 首先,让我们深入了解Java的ClassLoader。ClassLoader是一个抽象类,它是Java中的一个关键组件...

    Java初始化顺序1

    Java 初始化顺序详解 在 Java 中,变量可以分为两类:类变量(静态变量)和实例变量(对象变量)。类变量是使用 static 关键字修饰的变量,它们属于类,而不是对象。实例变量则是没有使用 static 关键字修饰的变量...

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

    特别要注意的是,在子类的初始化过程中,子类的静态变量和静态初始化块会在父类的变量、初始化块、构造器之前就被初始化。也就是说,在父类完全初始化完毕之前,子类的静态成员已经完成初始化了。 这个顺序很重要,...

Global site tag (gtag.js) - Google Analytics