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

Java的初始化与构造器

 
阅读更多
当Java创建一个对象时,系统先为该对象的所有实例属性分配内存(前提是该类已经被加载过了),接着程序开始对这些实例属性执行初始化,其初始化顺序是:先执行初始化块或声明属性时制定的初始值,再执行构造器里制定的初始值。

从某种程度上来看,初始化是一段固定执行的代码,它不能接受任何参数。因此初始化块对同一个类所有对象所进行的初始化处理完全相同。基于这个原因,不难发现初始化块的基本用法,如果有一段初始化处理代码对所有对象完全相同,且无须接受任何参数,就可以把这段初始化处理代码提取到初始化块中。

与构造器类似的,创建一个Java对象时,不仅会执行该类的普通初始化块和构造器,系统会一直上溯到java.lang.object类,依次向下执行其父类的初始化块。

当JVM第一个主动使用某个类时,系统会再类准备阶段为该类的所有静态属性分配内存;在初始化阶段则负责初始化这些静态属性,初始化静态属性的就是执行类初始化代码或者声明类属性时指定的初始值,他们的执行顺序与源代码中的排列顺序相同。

class Root
{
   Static
   {
     System.out.printIn("Root的静态初始化块");
   }
   {
     System.out.printIn("Root的普通初始化块");
   }
   public Root
   {
     System.out.printIn("Root的无参数构造器");
   }
}
class Mid extends Root
{
   static
   {
     System.out.printIn("Mid 的静态初始化块");
   }
   {
     System.out.printIn("Mid 的普通初始化块");
   }
   public Mid()
   {
     System.out.printIn("Mid 的无参数的构造器");
   }
   public Mid(String msg)
   {
     //通过this调用同一类中重载的构造器
     this();
     System.out.printIn("Mid 的带参数的构造器,其参数值:"+msg);
   }
}

class Leaf extends Mid
{
   static
   {
     System.out.printIn("Leaf 的静态初始化块")
   }
   {
     System.out.printIn("Leaf 的普通初始化块");
   }
   public Leaf()
   {
     //通过super调用父类中有一个字符串参数的构造器
     super("权威指南")
     System.out.printIn("执行Leaf的构造器");
   }
}

public class Test
{
   public static void main(String[] args)
   {
    new Leaf();
    new Leaf();
   }
}

执行结果:

Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块

Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:权威指南
Leaf的普通初始化块
执行Leaf的构造器

Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:权威指南
Leaf的普通初始化块
执行Leaf的构造器

创建了两次Leaf对象。第一次创建一个Leaf对象时,因为系统还不存在Leaf类,因此需要先加载并初始化Leaf类,一旦Leaf类初始化成功后,Leaf类在该虚拟机里巷一直存在,因此当第二次创建Leaf实例时无须再次对Leaf类进行初始化。


分享到:
评论

相关推荐

    java 构造器的调用

    7. **构造器与工厂方法**: - 除了构造器,还可以使用工厂方法创建对象。工厂方法是类中的静态方法,返回类的新实例。这种方法可以提供更灵活的实例化逻辑,比如延迟初始化或返回子类实例。 总结,Java中的构造器...

    深入理解java构造器机理

    在 Java 编程语言中,构造器是一种特殊的方法,用于初始化对象的创建。它是 Java 类中最重要的一个概念。下面将深入讨论构造器的机理、执行顺序、作用及与其他概念的区别。 一、构造器的机理 构造器是一种特殊的...

    java程序初始化顺序

    - 构造器主体:最后,执行当前类的构造器主体,完成对象的具体初始化。 4. **多线程下的初始化**: - 当多个线程同时尝试初始化同一个类时,Java保证只会执行一次类的初始化过程。这是由JVM的同步机制保证的,...

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

    总结起来,Java初始化块是Java中用于对象和类初始化的重要工具,它们在不同场景下提供了一种灵活的方式来控制对象和类的状态。理解初始化块的工作原理对于编写高效且无错误的Java代码至关重要。在编写代码时,应谨慎...

    Java入门理解构造器

    在Java中,构造器(Constructor)是一种特殊的方法,主要用于初始化对象。构造器的名字必须与类名相同,并且没有返回类型,甚至连`void`也不可以有。构造器的主要任务是在创建对象时为对象分配内存并初始化成员变量...

    java代码的初始化顺序demo

    `init`文件可能包含了各种构造函数的实现,展示它们如何被调用以及与初始化块交互的方式。 5. **成员变量初始化**: Java允许我们在变量声明时进行初始化。这种初始化发生在构造函数之前,因此在实例初始化块之前...

    详解Java的初始化与清理

    本文将深入探讨Java中的初始化过程,包括对象的构造器初始化以及类成员的初始化顺序,同时也会涉及Java的垃圾回收机制,即内存的自动清理。 首先,让我们详细了解一下Java中的构造器初始化。构造器是Java中用于初始...

    Java类继承初始化顺序

    当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、super关键字以及方法的覆盖。 首先,了解类初始化的顺序至关重要。当创建一个子类实例时,初始化过程遵循以下步骤: 1. ...

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

    如果在构造器或初始化块中依赖其他静态或非静态成员,必须确保这些成员在需要之前已经被正确初始化。否则,可能会导致程序运行时错误或者逻辑错误。 此外,静态初始化块只在类加载时执行一次,而初始化块(也称为...

    Java变量初始化

    这也很容易理解,因为类变量是类加载的时候执行的初始化,且只执行一次,而调用构造器是对象实例化执行的,每实例化一次对象,执行一次。 总结 Java 变量初始化是 Java 语言的基础知识点之一。变量的初始化过程...

    java初级视频教程系列之-java初始化

    "Java初级视频教程系列之-java初始化"是一套专为初学者设计的教育内容,由经验丰富的IT专家精心录制,旨在帮助学习者掌握Java编程的基础,特别是关于对象初始化的重要概念。 在Java中,初始化是一个关键的步骤,它...

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

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

    Java初始化顺序1

    即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。 类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而...

    java初始化和清理

    Java初始化和清理是Java语言中非常重要的两个过程,它们确保了Java程序的正确运行和资源的有效管理。Java的初始化包括类的加载、连接和初始化三个过程,而清理则主要指垃圾回收机制。 首先,Java初始化的主要特性...

    Java编程思想第05章初始化与清理.ppt

    《Java编程思想》第五章主要讨论的是对象的初始化与清理,包括构造器的使用、方法重载以及默认构造器的概念。下面将详细阐述这些知识点。 ### 一、构造器确保初始化 1. **为什么要引入构造器**:在Java中,构造器...

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

    4. 实例初始化块:在构造器执行之前,按块的顺序执行。 例如: ```java public class MyClass { static int a = 1; // 静态字段初始化 static { a = 2; // 静态初始化块 } final int b = 3; // 常量字段 int ...

    Java编程思想初始化与清理PPT教案学习.pptx

    总结来说,Java编程思想中的初始化与清理主要涉及构造器的使用,方法的重载,以及`this` 关键字的应用。这些概念对于理解和编写有效的Java代码至关重要,因为它们直接影响到对象的创建、状态设置以及代码的可读性...

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

    - **初始化对象**:通过构造器初始化新创建的对象,设置其初始状态。 - **赋值**:最后,将创建好的对象的引用赋给之前声明的引用变量。 例如,下面的代码展示了如何创建一个`A`类的对象: ```java A a1 = new A()...

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

    首先,需要了解Java类初始化的基本规则,即在类的静态变量、静态初始化块、变量、初始化块、构造器这五个部分中,它们的初始化顺序依次是:静态变量、静态初始化块、变量、初始化块、构造器。这个顺序在单个类中是...

Global site tag (gtag.js) - Google Analytics