类和对象的初始化顺序

父类

package com.day06;

public class StaticDemo {

    //静态代码块
    int num=3;
    static{
        System.out.println("父类静态代码块 --A");
    }

    //构造代码块
    {
        System.out.println("父类构造代码块 ---A  "+this.num);

    }

    public StaticDemo(){
        System.out.println("父类构造方法---A");
    }
    public void show(){
        System.out.println("父类普通方法--- A");
    }

}

子类:

package com.day06;

public class StaticDemoB extends StaticDemo {
    //静态代码块
        int num=3;
        static{
            System.out.println("子类静态代码块 B");
        }

        //构造代码块
        {
            System.out.println("子类构造代码块 B  "+this.num);

        }

        public StaticDemoB(){
            System.out.println("子类构造方法 B" );
        }
        public void show(){
            System.out.println("子类普通方法 B");
        }
}

示例一:实例化父类

package com.day06;

public class StaticDemoTest {

    public static void main(String[] args) {
        //new StaticDemo().show();
        StaticDemo sd=new StaticDemo();
        sd.show();

    }

}

结果:

父类静态代码块 --A
父类构造代码块 ---A  3
父类构造方法---A
父类普通方法--- A

示例二、实例化子类

package com.day06;

public class StaticDemoTest {

    public static void main(String[] args) {
        //new StaticDemoB().show();
        StaticDemoB sdb=new StaticDemoB();
        sdb.show();

    }

}

结果:

父类静态代码块 --A
子类静态代码块 B
父类构造代码块 ---A  3
父类构造方法---A
子类构造代码块 B  3
子类构造方法 B
子类普通方法 B
时间: 2025-01-18 12:41:34

类和对象的初始化顺序的相关文章

Java基础——类和对象的初始化过程

本节把类和对象的初始化所涉及到的所有代码块阐述一边. 示例代码: 1 public class Demo { 2 private static String name; 3 private String age; 4 5 // 主函数 6 public static void main(String[] args) { 7 Demo demo = new Demo(); 8 9 } 10 11 // 构造函数 12 public Demo() { 13 System.out.println("我

[百度空间] [转] 在 Visual C++ 中控制全局对象的初始化顺序

from: http://blog.csdn.net/classfactory/archive/2004/08/07/68202.aspx 在 C++ 中,同一个翻译单位(.cpp文件)里的全局对象的初始化顺序是先定义的对象先初始化(同时也后析构),但 C++ 标准并没有规定不同翻译单位间全局对象的初始化顺序.按照这个分析,以下的代码可能工作,也可能不工作(cout 是 C++ 用于输出的全局对象,和我们自己的对象位于不同的翻译单位): class A {    A() {        cou

java中对象的初始化顺序

class HelloA { public HelloA() { System.out.println("HelloA"); } { System.out.println("I'm A class"); } static { System.out.println("static A"); }}public class HelloB extends HelloA { public HelloB() { System.out.println(&quo

C++ 类对象的初始化顺序 ZZ

C++构造函数调用顺序 1.     创建派生类的对象,基类的构造函数优先被调用(也优先于派生类里的成员类): 2.    如果类里面有成员类,成员类的构造函数优先被调用:(也优先于该类本身的构造函数) 3.     基类构造函数如果有多个基类,则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺序: 4.     成员类对象构造函数如果有多个成员类对象,则构造函数的调用顺序是对象在类中被声明的顺序而不是它们出现在成员初始化表中的顺序: 5.     派生类构造函数,作

Java类、实例的初始化顺序

题目: public class InitTest{ public static int k = 0; public static InitTest t1 = new InitTest("t1"); public static InitTest t2 = new InitTest("t2"); public static int i = print("i"); public static int n = 99; public int j = pr

不存在继承关系各类中、不存在对象引用的对象创建初始化顺序

实例3 class One   {        One(String str)      {        System.out.println(str);       }    } class Two   {       One one_1 = new One("one-1");       One one_2 = new One("one-2");       One one_3 = new One("one-3");      Two(S

Java 类与对象的初始化

面试的时候,经常会遇到这样的笔试题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和静态块,它们只包含一些简单的输出字符串到控制台的代码,然后让我们写出正确的输出结果.这实际上是在考察我们对于类的初始化知识的了解. 首先,我们先看看下面的代码,这就是很经典的考察方式. public class InitField { public static void main(String[] args) { SuperInitField p = new SuperInitField();

解析Java类和对象的初始化过程

类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来分析的文章更是鲜有所见. 本文主要对类和对象初始化全过程进行分析,通过一个实际问题引入,将源代码转换成 JVM 字节码后,对 JVM 执行过程的关键点进行全面解析,并在文中穿插入了相关 JVM 规范和 JVM 的部分内部理论知识,以理论与实际结合的方式介绍对象初始化和类初始化之间的协作以及可能存在的

转:不同编译单元内定义的non-local static 对象的初始化顺序

<Effective C++>条款4中提到了”留意不同编译单元内的non-static变量的初始化顺序“ 下文的描述得很详细,转载过来了. http://blog.csdn.net/chgaowei/article/details/6001433 static对象包括global对象,定义于namespace作用域的对象,在class内的对象,在函数内,以及file作用域内被声明为static的对象. local-static 对象指的是定义在函数内部的对象.其他的被称为non-local-s