`

继承 静态 代码块 变量 构造函数等执行顺序

    博客分类:
  • java
阅读更多

1.静态变量和静态代码块和类绑定,类初始化时执行

 

父类的静态代码块和静态变量

子类的静态代码块和静态变量

 

父类的代码块和普通变量

父类的构造函数

 

子类的代码块和普通变量

子类的构造函数

 

 

public class TestExecutorOrder {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Father object = new Son();

	}

}

class P{
	public static String  print(String str){
		System.out.println(str);
		return str;
	}
}

class Father{
	static{
		System.out.println("Father Static");
	}
	
	{
		System.out.println("Father {}");

	}
	
	String i = P.print("Father Common V");
	static String s = P.print("Father Static V");
	
	public Father(){
		this.printMessage();
		i = "Father";
	}
	
	public void printMessage(){
		System.out.println(this.i);
	}
	
	
}

class Son extends Father{
	static{
		System.out.println("Son Static");
	}
	
	{
		System.out.println("Son {}");

	}
	
	String i = P.print("Son Common V");
	static String s = P.print("Son Static V");
	
	public Son(){
		this.printMessage();
		i = "Son";
	}
	
	public void printMessage(){
		System.out.println(this.i);
	}
	
	
}

 

 

执行结果

 

Father Static
Father Static V
Son Static
Son Static V
Father {}
Father Common V
null
Son {}
Son Common V
Son Common V

 

 

有一处需要注意

 

在调用

public Father(){

this.printMessage();

i = "Father";

 

}

此处的this.printMessage()调用的是子类

 

 

---------------------------

 

稍作修改

 

 

 

class Father{
	static{
		System.out.println("Father Static");
	}
	
	{
		System.out.println("Father {}");

	}
	
	String i = P.print("Father Common V");
	static String s = P.print("Father Static V");
	
	public Father(){
		this.printMessage();
		System.out.println(this.i);
		i = "Father";
	}
	
	public void printMessage(){
		System.out.println("Father Message");
	}
	
	
}

class Son extends Father{
	static{
		System.out.println("Son Static");
	}
	
	{
		System.out.println("Son {}");

	}
	
	String i = P.print("Son Common V");
	static String s = P.print("Son Static V");
	
	public Son(){
		this.printMessage();
		i = "Son";
	}
	
	public void printMessage(){
		System.out.println("Son Message");
	}
	
	
}

 结果

 

Father Static
Father Static V
Son Static
Son Static V
Father {}
Father Common V
Son Message
Father Common V
Son {}
Son Common V
Son Message

 

 

 

 

 

 

分享到:
评论

相关推荐

    构造函数与静态块的执行顺序

    在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...

    Java:静态代码块和构造函数执行顺序

     1 静态变量,静态代码块(类加载时执行,类不加载不执行)  2 实例变量,实例代码块(创建对象时才执行,不创建对象不执行)  3 构造函数,(创建对象时执行完2后再执行构造函数,不管构造函数是public还是private...

    Java的静态代码块、非静态代码块、构造函数

    Java编程语言中,静态代码块、非静态代码块和构造函数是面向对象设计的重要组成部分,它们在类的初始化和对象创建过程中起到关键作用。本文将深入探讨这些概念,以及它们在实际开发中的应用。 首先,我们来理解静态...

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

    在多级继承关系中,静态代码块按照类的加载顺序执行,先加载的类先执行其静态代码块。 例如,在给定的代码中: ```java public class A { static { System.out.print(1); } public A() { System.out.print(2)...

    静态代码块

    - 子类继承父类时,父类的静态代码块会在子类的静态代码块之前执行。 - 每个类的静态代码块只执行一次,不论创建多少个该类的实例。 - 类的实例代码块会在构造函数调用之前执行,对于每个新创建的对象都会执行。 - ...

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

    特别是当涉及到静态域(静态变量)、非静态域(实例变量)、静态块、非静态块以及构造函数时,明确它们的初始化顺序有助于避免潜在的编程错误。 根据题目提供的内容,我们将重点讨论这些概念以及它们之间的相互关系...

    java 代码块与静态代码块加载顺序

    Java 代码块是指在类中使用大括号 `{}` 包围的代码块,这些代码块可以出现在类的任何位置,包括构造函数、静态代码块、实例代码块等。Java 代码块的执行顺序取决于其所在的位置和上下文环境。 在上面的实例代码中,...

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

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

    java中的static变量,方法,代码块

    2. 对象创建时,先执行类中的非静态代码块,再调用构造函数。 通过上述分析,我们可以清楚地看到`static`关键字在Java中是如何被运用的,及其在变量、方法和代码块管理上的独特优势。理解这些概念,对于编写高效、...

    课堂笔记08(静态代码块-继承-对象构造-方法重写-关键字

    【标题】中的“静态代码块-继承-对象构造-方法重写-关键字”涉及的是Java编程语言中的核心概念。下面将分别对这些知识点进行详细解释。 1. 静态代码块:在Java中,静态代码块是一段用花括号{}包围的代码,前面有...

    Java构造代码块,静态代码块原理与用法实例分析

    在上面的例子中,静态代码块将gender变量初始化为“男”,然后执行构造函数。 四、初始化块的运行顺序 静态代码块 -> 构造代码块 -> 构造方法 在Java中,静态代码块的执行顺序是在构造代码块之前,然后执行构造...

    深入浅析Java中普通代码块、构造代码块与静态代码块

    这意味着,如果在构造代码块中有初始化操作,这些操作会在构造函数执行之前完成。如果类中有多条构造代码块,它们也会按照在类中定义的顺序执行。 执行顺序总结如下: - **静态代码块**:类首次加载时执行,只执行...

    Java类的完整构造执行顺序

    而类初始化则是指在类首次被使用时,JVM执行的一系列初始化操作,包括静态变量赋值、静态代码块执行等。 根据题目提供的内容,我们可以总结出Java类构造执行的详细步骤,这些步骤确保了类的正确初始化以及对象的...

    java static块和构造函数的实例详解

    在 Java 中,static 块是指在类加载时执行的代码块。它们通常用于初始化静态变量、静态方法和静态块本身。Static 块的执行顺序是按照它们在类中的出现顺序执行的。需要注意的是,static 块在类加载时只执行一次,...

    java代码-日常练习33,代码块### 静态代码块 static{代码内容;} 随着类的加载就执行一次 构造器代码块 {代码内容;} 每创建对象就执行一次 局部代码块 {代码内容;} 方法执行一次执行一次

    静态代码块由`static`关键字标识,它是在类被加载到Java虚拟机(JVM)时执行的,且只会执行一次。静态代码块通常用来初始化类级别的变量,因为它在任何对象实例化之前就已经运行。这样的设计使得程序员可以在不创建...

    举例说明Java中代码块的执行顺序

    下面我们将详细探讨Java中代码块的执行顺序,包括静态属性、非静态属性、静态代码块、非静态代码块以及构造函数。 首先,让我们回顾一下结论: 1. 当创建一个类的实例时,首先会执行类中的静态属性和静态代码块,...

    JAVA程序:静态块代码

    它的执行顺序早于类的非静态初始化块和构造函数。当类第一次被加载时,静态块按照它们在代码中的顺序依次执行。 下面是一个简单的静态块示例,展示了如何使用静态块初始化静态变量: ```java public class ...

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

    从结果可以看出,静态初始化块的执行顺序是按照类的继承关系来执行的,先执行父类的静态初始化块,然后执行子类的静态初始化块。这种执行顺序是为了保证类的静态变量和静态方法能够正确地初始化。 Java中静态初始化...

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

    3. **基类非静态成员初始化**:当创建一个子类对象时,会首先调用基类的构造函数来初始化基类的非静态成员变量。 4. **子类非静态成员初始化**:接着是子类的非静态成员变量初始化。 5. **基类构造函数调用**:通过`...

Global site tag (gtag.js) - Google Analytics