父类,子类,静态属性,静态代码块,构造代码块,构造函数,执行顺序

 1 package demo;
 2 //父类
 3 public class FatherClass {
 4
 5     private static String  strFather="父类静态属性----1";
 6
 7     static{
 8         System.out.println("父类静态代码块----1");
 9     }
10
11     {
12         System.out.println("父类构造代码块----3");
13     }
14
15     public FatherClass(){
16         System.out.println("父类构造器----4");
17     }
18 }
 1 package demo;
 2 //子类
 3 public class ChildClass extends FatherClass{
 4
 5     private static String  childFather="子类静态属性----2";
 6
 7     static{
 8         System.out.println("子类静态代码块----2");
 9     }
10
11     {
12         System.out.println("子类构造代码块----5");
13     }
14
15     public ChildClass(){
16         System.out.println("子类构造器----6");
17     }
18 }
 1 package demo;
 2
 3 public class ShunXu {
 4 /**
 5  * 父类,静态属性,静态代码块,构造代码块,构造函数,
 6  * 子类,静态属性,静态代码块,构造代码块,构造函数
 7  * 的执行顺序
 8  */
 9     public static void main(String[] args) {
10         ChildClass child = new ChildClass();
11     }
12 /**
13  * 父类静态代码块----1
14  * 子类静态代码块----2
15  * 父类构造代码块----3
16  * 父类构造器----4
17  * 子类构造代码块----5
18  * 子类构造器----6
19  */
20 }

分析结果可以得到如下加载执行顺序结论:

  1.加载父类的静态属性和静态代码块。

  2.加载子类的静态属性和静态代码块。

  3.加载父类的非静态属性和非静态代码块。

  4.加载父类的构造方法。

  5.加载子类的非静态属性和非静态代码块。

  6.加载子类的构造方法。

  注:

  1.静态属性和静态代码块是在类加载的时候就加载执行,执行顺序与代码顺序相同。

  2.非静态属性和非静态代码块是在类创建实例的时候执行,优先于构造方法,执行顺序与代码顺序相同。

时间: 2024-10-12 17:01:56

父类,子类,静态属性,静态代码块,构造代码块,构造函数,执行顺序的相关文章

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

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

java 父类子类成员变量,静态变量,构造器创建先后顺序

关于java中父类子类,成员变量,静态变量,构造器创建的先后顺序,在面试中经常会问到该类型的问题 所以用以下代码进行测试: public class Test { public static void main(String args[]) { Father f = new Son(); } } class Father { public Father() { System.out.println("Father Construct"); } static int fatherStat

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

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

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

一.结论: 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.构造代码块 位置:位于类中 表示方法:{} 作用:用于给每个对象进行初

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

执行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

Java静态代码块、代码块及构造函数执行顺序

根据以下程序进行分析 定义一个父类 package sas.LearnJava; public class ExcuteOrderTest { { System.out.println("我是在父类开始的普通代码块!"); } public ExcuteOrderTest() { System.out.println("我是父类的无参构造函数!"); } public void showSomething() { System.out.println("我