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

Java初始化总结

    博客分类:
  • java
阅读更多
Java初始化总结
1 概述
Java中,每个类在使用前都需要进行初始化,所以理解初始化是理解java的开端。

在Java中有两个隐藏了的方法:和。这两个方法是属于Java虚拟机的,也就是说在程序中我们是不可以调用的。具体可见:

http://dev2dev.bea.com.cn/bbsdoc/20060704286.html

"clint":对类进行初始化。即在类被装载时,JVM会调用内置的方法对类成员和静态初始化块进行初始化调用(也就是static部分)。

"init":对对象进行初始化。即在创建对象时,JVM会调用方法对实例变量和初始化块进行初始化(然后才是构造方法)。

2 举例说明
2.1 普通类初始化
/*  
* Normal.java  
*  
* Created on 2007-5-27, 16:40:14  
*  
* 普通类的初始化,先是初始化块,然后是构造方法  
*/  
  
package javabase.init;   
  
/**  
*  
* @author Penny Huang  
*/  
public class Normal   
{   
    {   
        System.out.println("Normal ");   
    }   
    public Normal ()   
    {   
        System.out.println("Normal construct");   
    }       
}   

输出:

Normal

Normal construct

结论:对象初始化时,先是初始化块,然后才是构造方法。  

2.2 普通类静态初始化
/*  
* NormalStatic.java  
*  
* Created on 2007-5-27, 16:58:48  
*  
* 有静态初始化的类,首先是初始化静态块,然后是一般的初始化块,最后是构造方法  
*/  
  
package javabase.init;   
  
/**  
*  
* @author Penny Huang  
*/  
public class NormalStatic   
{   
    static  
    {   
        System.out.println("NormalStatic ");   
    }   
       
    {   
        System.out.println("NormalStatic ");   
    }   
       
    public NormalStatic ()   
    {   
        System.out.println("NormalStatic construct");   
    }       
}   

输出:

NormalStatic

NormalStatic

NormalStatic construct

结论:先是初始化静态部分,然后才初始化其他部分(类是先加载,然后才创建对象,而静态部分是在类加载时初始化的)。



2.3 继承于普通类的初始化
/*  
* Special.java  
*   
* Created on 2007-5-27, 17:01:34  
*   
* 继承于普通类,首先是父类初始化块,然后是父类构造方法,之后是子类的初始化块,最后是子类构造方法  
*/  
  
package javabase.init;   
  
/**  
*  
* @author Penny Huang  
*/  
public class Special extends Normal   
{   
  
    {   
        System.out.println("Special ");   
    }   
  
    public Special()    
    {   
        System.out.println("Special construct");   
    }   
  
}   

输出:

Special

Special construct

Normal

Normal construct

结论:先初始化父类(默认调用父类的无参构造方法),然后才初始化子类。



2.4 继承于有静态初始化的类的初始化
/*  
* SpecailStatic.java  
*   
* Created on 2007-5-27, 17:12:13  
*   
* 继承于有静态初始化的类,首先是父类静态初始化,然后是子类静态初始化,之后是父类初始化,最后子类初始化  
*/  
  
package javabase.init;   
  
/**  
*  
* @author Penny Huang  
*/  
public class SpecailStatic extends NormalStatic{   
    static  
    {   
        System.out.println("SpecialStatic ");   
    }   
       
    {   
        System.out.println("SpecialStatic ");   
    }   
       
    public SpecailStatic ()    
    {   
        System.out.println("SpecialStatic construct");   
    }   
  
}   

输出:

SpecialStatic

NormalStatic

SpecialStatic

SpecialStatic construct

NormalStatic

NormalStatic construct

结论:先静后动,先父后子。

  

3 总结 
Java初始化的顺序如下:

父类静态初始化---->子类静态初始化---->父类初始化块---->父类构造方法---->子类初始化块---->子类构造方法。

分享到:
评论

相关推荐

    java 初始化与方法

    总结来说,Java初始化与方法是编程基础,深入理解这两个概念对于任何Java开发者都至关重要。通过阅读源码、运用开发工具和不断实践,我们可以不断提高自己的编程水平,从而在实际工作中游刃有余。

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

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

    Java变量初始化

    Java 变量初始化详解 Java 变量初始化是 Java 语言的基础知识点之一,但也往往被学习者所忽略。 Java 变量初始化的时机是指在 Java 语言中变量的初始化过程,包括变量的声明、初始化和赋值的步骤。 Java 变量声明 ...

    Java初始化顺序1

    Java 初始化顺序的知识点总结: * 类变量(静态变量)和实例变量(对象变量)的区别 * 初始化顺序按照定义的顺序进行 * 静态变量的初始化顺序按照定义的顺序,并且只在第一次访问时初始化 * static 关键字不能应用...

    java中类的初始化顺序

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

    深入Java初始化.pdf

    `<clinit>`和`<init>`方法的存在揭示了Java初始化的底层机制,它们确保了类和对象的正确初始化,同时也提供了异常处理的能力,使得在初始化过程中出现的问题能够被准确捕获和定位。 总结: Java初始化涉及类的静态...

    Java多线程之延迟初始化1

    总结来说,Java多线程环境下的延迟初始化需要考虑线程安全和性能优化。双重检查锁定通过引入`volatile`和同步机制,既保证了线程安全,又降低了不必要的同步开销,是实现延迟初始化的一种推荐实践。不过,理解其工作...

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

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

    详解Java的初始化与清理

    总结起来,Java的初始化与清理机制是其安全性、可靠性和易用性的重要体现。通过构造器初始化对象,确保了每个实例都能正确地开始其生命周期。同时,垃圾回收机制则使得程序员可以专注于代码逻辑,而不必担心内存管理...

    java初始化开发环境

    总结起来,Java初始化开发环境涉及到创建合理的目录结构,设置项目分层,初始化Node.js服务框架Koa2,以及连接NoSQL数据库MongoDB并使用Mongoose进行数据操作。这些步骤确保了项目从一开始就具备良好的可扩展性和可...

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

    我们可以在业务层自己控制 A 和 B 的初始化顺序,在 A 中设置一个“是否初始化的”标记,B 初始化前检测 A 是否得以初始化,如果没有则调用 A 的初始化方法,所谓的 check-and-act。 这种方法的优点是可以做到 lazy...

    java数组初始化详解修正版.doc

    根据不同的初始化方式,Java 提供了三种主要的数组初始化方法:动态初始化、静态初始化以及隐式初始化。 #### 二、动态初始化 动态初始化是在创建数组时由系统自动为数组中的元素赋以默认值。默认值取决于元素的...

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

    "Java初始化块详解及实例代码" Java中初始化块是Java语言中的一种特殊的代码块,它可以在类加载或对象创建时执行某些操作。本文将详细介绍Java中初始化块的概念、种类、特点和应用场景。 什么是初始化块 初始化块...

    Java中初始化List的5种方法示例

    "Java中初始化List的5种方法示例" Java中初始化List有多种方法,本文将介绍五种常见的初始化方式。了解这些方法可以帮助开发者更好地使用Java中的List数据结构。 第一种方法:构造List后使用add方法初始化,这是最...

    深入java虚拟机加载初始化

    ### 深入Java虚拟机加载初始化 #### Classloader的作用及意义 在深入了解Java虚拟机(JVM)的加载初始化之前,我们先明确一下`Classloader`的角色。简单地说,`Classloader`的主要职责是将编译后的`.class`文件...

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

    在面向对象语言中(如Java、C#等),当创建一个继承自某个基类的子类对象时,会有一个特定的初始化顺序。这个顺序通常遵循以下步骤: 1. **基类静态成员初始化**:如果基类中有任何静态成员,则会在程序启动时按照...

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

    总结来说,对于Java面试中常出现的关于类初始化顺序的问题,开发者应当掌握以下几点: 1. 单个类内成员的初始化顺序:静态变量、静态初始化块、变量、初始化块、构造器。 2. 在继承关系中,子类的静态成员会在父类...

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

    ### Java静态数据初始化详解 #### 一、Java静态初始化概述 在Java中,静态初始化主要用于在类被加载时初始化类的静态成员。这种初始化只会在类首次被加载时发生一次,之后创建该类的新实例时不会再次触发。静态...

    java知识体系总结

    Java知识体系总结 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年推出。它以其“一次编写,到处运行”的特性闻名,适用于开发跨平台的应用程序,包括桌面应用、企业...

Global site tag (gtag.js) - Google Analytics