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

类的初始化过程

阅读更多

类的实例化有两种方法:

1. Dog d = new Dog() 自动调用无参构造函数
2.通过反射
Class.forName("com.vo.Dog").newInstance();
此种方法只能调用无参构造函数,假如函数只有带参构造函数,就要使用以下的方式:
Constructor<?> c = class.forName("com.vo.Dog").getConstructor(int.class);
Object newInstance = c.newInstance(2);


实例化的行为:
如果是第一次实例化该类,jvm会首先会执行“类加载”:检查该类的父类是否“注册”,否则进行“类加载”生成
父类的Class对象并执行静态代码(包括静态变量初始化以及静态块)。然后对该类“执行注册”。注册完毕后
进行实例化过程,jvm在堆中开辟一个合适大小的空间,生成实例。最后执行初始化过程,同样按照先父类再
子类的顺序执行构造函数。
示例:
public class Dog extends Animal{
      static{
            System.out.println("Dog-i'm static blog");
      }
      public Dog(){
            System.out.println("Dog-initialize");
      }
}
public class Animal {
      static{
            System.out.println("Animal-i'm static blog");
      }
      public Animal(){
            System.out.println("Animal-initialize");
      }
}
 
TEST: 执行 Dog = new Dog()
output:
Animal-i'm static blog
Dog-i'm static blog
Animal-initialize
Dog-initialize


 

分享到:
评论

相关推荐

    类初始化顺序示例讲解

    ### 类初始化顺序详解 本文将基于给定的Java示例代码深入探讨类初始化的顺序问题。这不仅是Java语言的关键特性之一,在其他面向对象语言(如C++、.NET)中也有相似的概念。理解这一概念有助于程序员更好地掌握面向...

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

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

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

    这个顺序表明,无论类之间的继承关系如何,初始化顺序始终是:静态变量和静态初始化块先于非静态成员。在创建对象时,父类的初始化先于子类。这是Java语言规范所规定的,确保在子类访问父类的静态或非静态成员时,...

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

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

    Java类继承初始化顺序

    首先,了解类初始化的顺序至关重要。当创建一个子类实例时,初始化过程遵循以下步骤: 1. **静态初始化**:首先,执行父类的静态初始化块,然后执行子类的静态初始化块。静态初始化块用于初始化类级别的静态变量,...

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

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

    java中类的初始化顺序

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

    java程序初始化顺序

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

    Java类初始化顺序

    在实际编程中,理解类初始化顺序至关重要,因为它可以帮助避免潜在的错误和异常。例如,确保在访问成员变量前它们已被正确初始化,或者在适当的地方初始化静态变量以避免并发问题。遵循良好的编码规范,如将初始化...

    java类变量初始化顺序

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

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

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

    java代码的初始化顺序demo

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

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

    Java语言中的类初始化顺序是面试中常见的问题,尤其对于Java程序员和工程师来说,理解这一概念至关重要。本篇文章将深入解析类初始化的顺序以及在继承情况下的表现。 首先,我们需要明确类初始化顺序的基本规则: ...

    C++全局变量初始化的一点总结

    动态初始化则涉及运行时的动作,比如需要函数调用或类构造函数的初始化。这些变量的初始化在main函数执行之前进行,但晚于静态初始化。这意味着如果一个全局变量依赖于其他全局变量的初始化结果,必须确保这些依赖的...

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

    类的静态变量初始化是有序的,遵循类文件中的顺序,从上到下依次初始化。这一点在面试中可能会被问及,例如在给定的代码片段中: ```java public class Test { public static int a = 0; public static int b ; ...

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

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

    JAVA类的初始化顺序文.pdf

    总之,类的初始化顺序是:静态成员 -&gt; 静态初始化块 -&gt; 非静态成员 -&gt; 非静态初始化块 -&gt; 构造器。这个顺序同样适用于继承关系,只是会先初始化父类的部分,再初始化子类的部分。掌握这一知识能帮助程序员更好地设计...

    c++能不能给类的成员变量在声明的时候初始化? - life_limbo - 博客园1

    2. **初始化列表初始化**:接着执行构造函数的初始化列表,其中的初始化顺序与成员变量声明的顺序一致,而不受初始化列表中实际顺序的影响。例如`A(int a_):a(a_){};` 3. **构造函数体内的初始化**:最后执行构造...

Global site tag (gtag.js) - Google Analytics