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

java初始化块和构造方法的执行顺序

 
阅读更多

       初始化块是java语言中的第四种成员(其他的为属性、方法和构造器),一个类中可以有多个初始化块,相同修饰符的初始化块的执行顺序为:前面定义的初始化块先执行,后面的后执行。那初始化块和构造方法的执行顺序是怎么样的呢?答案是当创建java对象的时候,系统总是先调用该类里定义的初始化块,然后再调用构造方法。看下面这个简单的例子:

 

public class Person {
	{
		System.err.println("person first init block");
	}
	
	public Person(){
		System.err.println("person Constructor methed");
	}
	{
		System.err.println("person second init block");
	}
	
}

 在主方法中定义 一个Person类,程序输出结果为:

person first init block
person second init blok
person Constructor methed

 

         另一个问题,初始化块是可以有修饰符的,但是修饰符只能是static关键字,那如果初始化块加上static后,会有什么不同呢?如果按照我们定义静态变量的思维来想的话,是不是系统在加载该类的时候就执行静态初始化块呢?没错,就是这个样子的。把上面的程序改一下。

public class Person {
	{
		System.err.println("person first init block");
	}
	
	public Person(){
		System.err.println("person Constructor methed");
	}
	{
		System.err.println("person second init blok");
	}
	
	static{
		System.out.println("person static init block");
	}
	
	
}

 执行结果:

person static init block
person first init block
person second init blok
person Constructor methed

 很明显,系统在初始化类之前可定要先加载类,所以,static最先执行,然后是依次执行非静态块,最后执行构造方法。

       还有一种情况,那就是有继承的情况。如果父类和子类都有静态初始化块和非静态初始化块,初始化一个子类的实例,应该是如何执行呢?顺序为:子类的静态初始化块、父类的静态初始化块、父类的非静态初始化块、父类的构造方法、子类的非静态初始化块、子类的构造方法。

 

  • 大小: 826.1 KB
分享到:
评论

相关推荐

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

    静态初始化块和对象初始化块的执行顺序不同。静态初始化块在类加载时执行,而对象初始化块在创建新对象时执行。它们可以相互配合,以实现更复杂的初始化逻辑。例如,静态初始化块可以用来设置全局配置,而对象初始化...

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

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

    Java常见笔试、面试题目深度剖析,方法重写详解、静态代码块与构造方法执行顺序问题

    本文将深度剖析几个常见的Java面试题目,包括方法重写、静态代码块和构造方法的执行顺序。 首先,我们来讨论**方法重写(Override)**。在面向对象编程中,子类可以继承父类的属性和方法,有时需要根据自己的需求对...

    java代码的初始化顺序demo

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

    java程序初始化顺序

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

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

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

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

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

    java中类的初始化顺序

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

    Java初始化块及执行过程解析

    "Java初始化块及执行过程解析" Java 初始化块是 Java 语言中的一种特殊语法结构,用于对 Java 对象进行初始化操作。初始化块可以分为两种:静态初始化块和普通初始化块。静态初始化块用于对类进行初始化,而普通...

    Java类继承初始化顺序

    总之,Java类继承初始化顺序涉及到静态和非静态初始化块、构造器的调用以及方法的覆盖。理解这些概念对于编写健壮的、易于维护的Java代码至关重要。在实际编程中,应合理利用继承特性,同时注意避免不必要的复杂性和...

    Java中的静态块初始化块及main方法.doc

    Java编程语言中,静态块(static block)和初始化块(instance initialization block)是两种特殊的代码块,它们在程序运行的不同阶段被执行,对于类和对象的初始化有着重要作用。同时,`main`方法是Java程序的入口...

    java面试题静态加载顺序构造方法

    java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。 package extend; public class X { Y y=new Y(); static{ System.out.println("tttt"); } X(){ System....

    简单了解java中静态初始化块的执行顺序

    在Java中,静态初始化块的执行顺序非常重要,因为它会影响类的静态变量和静态方法的初始化。在实际开发中,了解静态初始化块的执行顺序非常重要,否则可能会导致类的静态变量和静态方法不能正确地初始化。 下面是一...

    java 构造方法的资源

    总结,Java中的构造方法是创建和初始化对象的关键组成部分,它们使得我们可以根据不同的场景灵活地初始化对象,并通过构造方法重载来提供多种初始化方式。理解和掌握构造方法的使用对于编写高质量的Java代码至关重要...

    java构造方法

    构造方法是Java中一种特殊的方法,主要用于初始化新创建的对象。每个类至少有一个构造方法。如果程序员没有显式地定义构造方法,Java编译器会自动为类添加一个无参的默认构造方法。构造方法的名字必须与类名完全相同...

    java中静态代码块与构造方法的执行顺序判断

    在Java编程语言中,了解静态代码块和构造方法的执行顺序是至关重要的,尤其是在处理类的初始化和对象的创建时。下面将详细解释这些概念及其执行逻辑。 首先,静态代码块(也称为静态初始化器)是由`static`关键字...

    java 静态块实例块构造器调用

    Java编程语言中,类的初始化过程涉及到静态块(static block)、实例块(instance block)以及构造器(constructor)。这些块的执行顺序对于理解和编写复杂的Java程序至关重要,特别是在涉及继承关系时。下面我们将...

    Java初始化顺序1

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

Global site tag (gtag.js) - Google Analytics