关于继承中静态代码块,构造代码块,构造函数执行顺序

 1 class HelloA {
 2
 3     public HelloA() {
 4         System.out.println("HelloA");
 5     }
 6
 7     { System.out.println("I‘m A class"); }
 8
 9     static { System.out.println("static A"); }
10
11 }
12
13 public class HelloB extends HelloA {
14     public HelloB() {
15         System.out.println("HelloB");
16     }
17
18     { System.out.println("I‘m B class"); }
19
20     static { System.out.println("static B"); }
21
22     public static void main(String[] args) {
23
24         System.out.println("-------main start-------");
25         new HelloB();
26         new HelloB();
27         System.out.println("-------main end-------");
28     }
29 }

Microsoft Windows [版本 6.2.9200]
(c) 2012 Microsoft Corporation。保留所有权利。

C:\Users\xw>javac HelloB.java

C:\Users\xw>java HelloB
static A
static B
-------main start-------
I‘m A class
HelloA
I‘m B class
HelloB
I‘m A class
HelloA
I‘m B class
HelloB
-------main end-------

时间: 2024-10-12 19:54:04

关于继承中静态代码块,构造代码块,构造函数执行顺序的相关文章

Java 代码块,普通代码块,构造代码块,静态代码块

学习Java中… 刚刚学到了Java的代码块,虽然很简单 还是记下吧! 左音 2016-03-16 ----------------- // 执行优先级:静态代码块 > mian方法 > 构造代码块 > 构造方法 // 静态代码块不论是否实例化都会执行一次,不会重复执行 // 构造代码块实例化时执行 1.普通代码块 // 普通代码块在方法或语句中 1 public class CodeBlock { 2 3 public static void main (String[] args)

java中成员变量、代码块、构造函数执行顺序

1.java虚拟机运行程序,首先需要装载类,安装现装载父类,初始化父类的静态代码块和静态成员变量 再load子类.初始化子类静态代码块和成员变量 2.load完毕父类与子类后,从main函数入口执行程序,先输出,接着new实例化Beetle类,则先实例化父类Insect,实例化父类时,先初始化非静态成员变量和非静态代码块,接着执行父类构造方法 再实例化子类,实例化子类时,先初始化非静态成员变量和非静态代码块,接着执行子类构造方法. package it.xiangnan.test; public

Java子类继承父类,当实例化子类对象时的执行顺序

子类继承父类,当实例化子类对象时,执行顺序如下:     父类层级静态块      自身静态块     父类块      父类构造器     自身块      自身构造器 由于继承,肯定应该先加载父类再加载子类,加载类自然会调用静态块,然后是调用父类的构造函数和子类的构造函数,不过构造函数调用前肯定要先调用域或块,这样才能正确创建对象. ················································赋值顺序如下:     父类的静态变量赋值     自身的静态变

实例构造函数与静态构造函数执行顺序

一.结论: 1.实例构造函数与静态构造函数执行顺序 一.初始化顺序(依次是静态变量.静态构造函数.实例变量.实例构造函数) 二.初始化次数(静态的都只会初始化一次) 三.初始化时机(使用类引用任何静态成员之前对或者首次实例化类时会调用静态构造函数,通过静态构造函数初始化类级别的项,即静态字段.非静态的则要在创建对象的时候才初始化): 2.创建子类实例时,其所有构造函数和变量的调用顺序为: 子类静态变量初始化>子类静态构造函数>父类静态变量初始化 > 父类静态构造函数 > 父类实例变

子父类中码静态代块 构造代码块. 代码块 构造函数 成员变量 实例变量 执行顺序

刚开始接触时,很不容易分清楚 创建子类或者多态的情况: /* 创建子类的情况: 1.父类静态代码块 2.子类静态代码块 3.父类构造块 /实例变量(new 创建的变量成员)//谁在前执行谁,执行完再执行构造函数 4.父类构造函数//父类构造函数有方法,如果方法子类有就执行子类的方法,没有才再执行父类方法.//如果子类有父类没有会报错!//父类私有该方法就执行父类的方法 5.子类构造块/实例变量//谁在前执行谁,执行完再执行构造函数 6.子类构造函数 7.子类普通方法//调用成员变量,看子类的值,

【code block】局部代码块+构造代码块+静态代码块

1.局部代码块 位置:位于类的方法中 表示方法:{} 作用:控制变量的生命周期,减少内存消耗 demo: public class LocalCode { public static void main(String [] args){ int y = 10; { int x = 20; System.out.println(x); } System.out.println(y);//运行到此时x变量已被垃圾收集 } } 2.构造代码块 位置:位于类中 表示方法:{} 作用:用于给每个对象进行初

java中静态代码块,非静态代码块,构造函数执行顺序

关于静态代码块 静态代码块的写法: static { System.out.println("我是静态代码块"); } 静态代码块的特点: 1.执行优先级高于非静态的初始化块,它会在类初始化的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员. 2.随着类的加载而执行,而且只执行一次 先说一下类加载,一个程序要想运行,首先要把代码加载到内存中,然后才能去和CPU交流,这是冯诺依曼计算机规定的.Java也是一样,Java的.class字节码文件要想执行,首先也

静态代码块-普通代码块-构造代码块(好多图系列)

执行main函数之后,结果如下: 静态代码块main函数执行构造代码块2222无参构造函数1111111普通代码块 注意点:构造代码块和普通代码块的区别? ====>构造代码块是放在类上的,普通代码块是放在方法上的 执行顺序: 静态代码块>main>构造代码块>构造函数>111111>普通代码块 这里指的注意是红色的部分.我们可以利用他去做一些执行完构造函数之后的操作,而且是在编写代码的时候传进去的! 原文地址:https://www.cnblogs.com/vingL

java普通代码块、静态代码块、默认构造方法的执行顺序

1 package test; 2 3 class Parent{ 4 { 5 System.out.println("父类普通代码块"); 6 } 7 static{ 8 System.out.println("父类静态代码块"); 9 } 10 public Parent(){ 11 System.out.println("父类默认构造代码方法"); 12 } 13 } 14 class Child extends Parent{ 15 {

静态变量、代码块、和静态方法的执行顺序

我们来看一段代码,下面的代码一目了然 class A{ static int i=0; static { System.out.println("静态代码块A"); } public A(){ System.out.println("构造方法A"); } { System.out.println("代码块A"); } static { i++; System.out.println("在类A中静态变量i="+i); } } p