java中一个对象的初始化过程

// 对象初始化的过程

class Fu {

    int num=55;//  1, num=0;对象中的成员变量默认初始化。5, 显示初始化 num=55
    {
        System.out.println("FU类构造代码块");// 6, 构造代码块初始化
    }

    Fu() {  // 3 FU类构造函函数初始化

        super(); // 4 object构造函函数初始化
        // 5 显示初始化,初始化成员变量
        // 6 构造代码块初始化类
        System.out.println("FU构造函数"+num);// 7 ,num=55;

        show();// 8,被覆盖运行子类
    }

    void show() {

        System.out.println("FU SHOW ");
    }
    static {    // -1,静态代码块随类的加载而加载,且只执行一次    先加载FU
        System.out.println("static FU");
    }

}
class Zi extends Fu {

    int num=5;  // 1, num=0;对象中的成员变量默认初始化. 10, 显示初始化 num=5
    // 构造代码块
    {
        System.out.println("zi构造代码块  " +num); // 11 构造代码块初始化 num=5
    }
    // 构造函数
    Zi() {   //  2, 构造函数初始化

        super(); //3 ,
        // 10, 显示初始化,初始化成员变量
        // 11 构造代码块初始化类

         System.out.println("zi构造函数"+num); // 12,num=5;
     }

    void show() {  //  8

        System.out.println("ZI SHOW "+num); // 9,num=0;
    }
    static {        // 0, 再加载ZI
        System.out.println("static ZI");
    }
}

class TestDemo {

    public static void main(String[] args) {
        // 对象初始化的过程
        new Zi();
    }
}

// // 结果为:  static FU
//       static ZI
//       FU类构造代码块
//       FU构造函数55
//       ZI SHOW 0
//       zi构造代码块5
//       zi构造函数5

// 总结:静态代码块=>非静态代码块=>构造方法

// 父子关系:父类静态代码块=>子类静态代码块=>父类非静态代码块=>父类构造函数=>子类非静态代码块=>子类构造函数

时间: 2024-11-04 19:11:22

java中一个对象的初始化过程的相关文章

java中对象的初始化过程

class Parent{ int num = 8;// ->3 Parent(){ //super(); // ->2 //显示初始化 // ->3 //构造代码段 // ->4 show(); // ->5 } {// ->4 System.out.println("Parent constructor code run->"); } public void show(){//被覆盖 System.out.println("num

java中的静态初始化块

Java 中可以通过初始化块进行数据赋值.如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块.如果使用 static 修饰初始化块,就称为静态初始化块. 需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量. 我们来看一段代码: 运行结果: 通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法.由于静态初始化块只在类加载时执行一次,所以当再次创建对

Java中数组的初始化方式

Java中数组的初始化方式    初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组元素分配初始值

java中的显示初始化和特定初始化

public class Test{ public static void main(String[] args){ Child child = new Child(); } } class Parent{ public Parent(){ super(); show();//this.show(); 因为是Child类对象调用了super()来构造其父类的部分;所以父类中的this(随着其构造方法入栈的)是指向Child类对象的!所以调用的就是Child类对象的show方法! return ;

再次认识Java中构造器的初始化与继承

class Insect { private int i = 9; protected static int j; Insect() { Print.print("i = " + i + ",j = " + j); j = 39; } private static int x1 = printInit("static Insect.x1 初始化"); static int printInit(String s) { Print.print(s);

Java类加载及变量初始化过程

Java虚拟机如何把编译好的.class文件加载到虚拟机里面?加载之后如何初始化类?静态类变量和实例类变量的初始化过程是否相同,分别是如何初始化的呢?这篇文章就是解决上面3个问题的. 本文前面理论部分比较枯燥,但是如果耐心读完,结合后面的实例,我相信你以后绝对不会再遇到java类初始化这样的疑惑.若有不正之处,请多多谅解并欢迎各位能够给予批评指正,提前谢谢各位. 1. Java虚拟机加载.class过程 虚拟机把Class文件加载到内存,然后进行校验,解析和初始化,最终形成java类型,这就是虚

java中对象的初始化问题

最近又把java编程思想看了看.又有些收获.此书确实不错 java中的初始化相信很多人都知道.但是具体的初始化步骤,初始化几次确不一定.上代码 public class A{ public static A a = new A(); public static int i; public static int j= 2; public A(){ i++; j++; } public static void main(String[] args){ A a1= new A(); System.ou

Java 中 byte 类型初始化问题

很早的时候由于工作需要,接触过一点 Java,于是有了这个坑,今天回头看到自己在 Stackoverflow 上提的问题发现了它,于是再记录下. 在使用中,需要将 byte 类型的的每一位都置 1.我万万没有想到这么一个简单的操作,在 Java 中有各种约束. 首先看看代码: // 方式 1 byte allBitsOne = 0xFF; // 方式2 byte allBitsOne = (byte)0xFF; // 方式3 byte allBitsOne = 0xFFFFFFFF; 上面的哪个

Java中的复杂初始化

虽然无聊,还是列出来. 6.1备忘录模式(5.6)中,Memento1的代码 例程 7-2 不变类 package intent.memento; public final class Memento1{ private final VirtualState state;//要记忆的状态, public Memento1(State state){ this.state =new VirtualState(state) ; } State getState(){ State state = ne