1.假设A类继承B类,B类承继C类,则当我们创建A类的对象时,其初始化顺序如下
(1)C类的静态变量和静态代码块(按书写顺序初始化)
(2)B类的静态变量和静态代码块(按书写顺序初始化)
(3)A类的静态变量和静态代码块(按书写顺序初始化)
(4)C类的实例变量
(5)C类的构造方法
(6)B类的实例变量
(7)B类的构造方法
(8)A类的实例变量
(4)A类的构造方法
对于静态变量和静态代码块,只会初始化一次
Init.java
package com.wqh.java2;
public class Init {
public Init(String s)
{
System.out.println("初始化:"+s);
}
}
Animal.java
package com.wqh.java2;
public class Animal {
private Init i1 = new Init("Animal中的i1变量[实例]");
private static Init i2 = new Init("Animal中的i2变量[静态]");
static
{
Init i3= new Init("Animal中静态代码块被初始化了");
}
private static Init i4 = new Init("Animal中的i4变量[静态]");
private Init i5 = new Init("Animal中的i6变量[实例]");
public Animal()
{
Init i6 = new Init("Animal构造方法");
}
}
Dog.java
package com.wqh.java2;
public class Dog extends Animal{
private Init i1 = new Init("dog中的i1变量[实例]");
private static Init i2 = new Init("dog中的i2变量[静态]");
static
{
Init i3= new Init("dog中静态代码块被初始化了");
}
private static Init i4 = new Init("dog中的i4变量[静态]");
private Init i5 = new Init("dog中的i6变量[实例]");
public Dog()
{
Init i6 = new Init("Dog构造方法");
}
}
LitterDog.java
package com.wqh.java2;
public class LitterDog extends Dog{
private Init i1 = new Init("LitterDog中的i1变量[实例]");
private static Init i2 = new Init("LitterDog中的i2变量[静态]");
static
{
Init i3= new Init("LitterDog中静态代码块被初始化了");
}
private static Init i4 = new Init("LitterDog中的i4变量[静态]");
private Init i5 = new Init("LitterDog中的i6变量[实例]");
public LitterDog()
{
Init i6 = new Init("LitterDog构造方法");
}
}
AnimalClient.java
package com.wqh.java2;
public class AnimalClient {
public static void main(String[] args) {
LitterDog litterDog = new LitterDog();
LitterDog litterDog1 = new LitterDog();
}
}
根据上面分析,结果如下
- 大小: 79 KB
分享到:
相关推荐
类继承的初始化顺序类继承的初始化顺序类继承的初始化顺序类继承的初始化顺序
类的初始化顺序,适用于任何一种面向对象的语言。真正了解面向对象的程序的流程。配有实例
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。
本篇文章主要介绍了Spring 中如何控制2个bean中的初始化顺序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
对java类初始化以及顺序,详解,由于转载仅供大家参考!
java面试题-类的初始化顺序.doc 大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,...
具体内容见博客
springboot初始化过程涉及类和接口
所有代码块是从上往下顺序执行的,所以代码块里面使用到的变量如果在块下面初始化会有问题 执行构造方法中内容。 所以看见的空构造方法,只能说第三部没有需要执行的内容。 下面举例子 public class TestClass { ...
C++类成员和数据成员初始化总结 C++为类中提供类成员的初始化列表 类对象的构造顺序是这样的: 1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员 2.进入构造函数后在构造函数中执行一般计算 1.类...
类加载及初始化详解2.1 源码到字节码2.1.1 类结构简介2.1.2 字节码反汇编工具2.2 类加载机制2.2.1 加载2.2.2 链接2.2.3 初始化2.3 类初始化过程【重点】2.3.1 方法详解2.3.2 静态变量和静态代码块初始化顺序2.3.3 ...
1.1 类的初始化过程 要创建一个类的实例,必须加载和初始化该类。 main()方法所在的类,会被优先加载并初始化 子类初始化前,会先加载并初始化它的父类 初始化一个类,其实质上就是执行了()方法 ()方法包含了,静态...
java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...
这里直接给出C#类成员一般初始化顺序: 子类静态字段 子类静态构造 子类实例字段 父类静态字段 父类静态构造 父类实例字段 父类实例构造 子类实例构造 为什么说是“一般”初始化顺序呢?因为根据类结构的...
通过一个实际问题引入,将源代码转换成JVM字节码后,对JVM执行过程的关键点进行全面解析,并在文中穿插入了相关JVM规范和JVM的部分内部理论知识,以理论与实际结合的方式介绍对象初始化和类初始化之间的协作以及可能...
对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器
实例初始化过程:实例初始化就是执行()方法:()方法可能重载有多个,有几个构造器就有几个方法()方法由非静态实例
JAVA面试题解惑系列(一)——类的初始化顺序-JAVA程序员JAVA工程师面试必看
NULL 博文链接:https://crazybackkom.iteye.com/blog/968174