类的初始化顺序注意问题

1.未继承的情况:

(静态变量先有值)

静态初始化块

实例初始化块

构造方法

小结:

1.静态成员变量,静态代码块(与顺序有关)

2.实例成员变量,代码块(有顺序有关)

3.构造方法

2.继承的情况:

1.父类静态变量,父类静态初始化块

2.子类静态变量,子类静态初始化块

3.父类变量,父类初始化块,父类构造方法

4.子类变量,子类初始化块,子类构造方法

时间: 2024-10-15 00:12:01

类的初始化顺序注意问题的相关文章

java类的初始化顺序

java类的初始化顺序 (2008-10-21 13:30:15) 转载▼ 标签: java 初始化 继承初始化 it 分类: Java 对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点: public class InitialOrderTest { // 静态变量 public static String staticField = "静态变量";

C++ Primer Plus学习笔记之继承类的初始化顺序

C++ Primer Plus学习笔记之继承类的初始化顺序 基类的构造函数,析构函数和操作符函数operator=是不能被派生类继承的: 那么,当创建一个派生类对象时,怎样调用基类的构造函数对基类的数据进行初始化呢??? 答案是:构造函数执行时遵行先兄长(基类),再客人(对象成员),后自己(派生类)的顺序: 另一方面,执行析构函数时,先执行派生类的析构函数,再执行基类的析构函数.原因是,对基类的破坏隐含了对派生类的破坏,所以派生类的析构函数必须先执行: #include<iostream> u

java类内容初始化顺序

在java类中一般有:成员变量.静态变量.成员方法.静态方法.构造方法.那么这几个的初始化顺序是什么呢? 初始化的先后顺序是:静态变量(类load进内存就初始化)------静态代码块(类load进内存就初始化)--------成员变量(对象初始化时)------------初始化块------------构造函数 测试程序如下: package com.evan; /* * 初始化顺序测试 */ public class InitialOrderTest { public static Str

类的初始化顺序

原文地址:http://www.cjsdn.net/post/view?bid=1&id=194795&sty=3 我们大家都知道,对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序以此是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点: Java代码 public class InitialOrderTest { // 静态变量 public static String staticField = "

Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)(转)

大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台的代码,然后让我们判断输出的结果.这实际上是在考查我们对于继承情况下类的初始化顺序的了解. 我们大家都知道,对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序以此是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点: Java代码 p

Java编程思想笔记-类的初始化顺序

1.如果有父类,先初始化父类,然后初始化子类 2.先初始化静态成员变量.静态代码块(static { }包围的代码),然后初始化非静态成员变量.非静态代码块(大括号包围的代码).静态成员变量间.非静态成员变量间按定义顺序初始化. 3.调用构造函数 class Bowl { Bowl(int marker) { System.out.println("Bowl(" + marker + ")"); } void f(int marker) { System.out.p

C#类的初始化顺序

类在初始化时的执行顺序,依次如下: 1: 子类静态变量 2: 子类静态构造函数 3: 子类非静态变量 4: 父类静态变量 5: 父类静态构造函数 6: 父类非静态变量 7: 父类构造函数 8: 子类构造函数 对于静态变量与静态构造函数而言, 无论对一个类创建多少个实例,它的静态成员都只有一个副本. 也就是说,静态变量与静态构造函数只初始化一次(在类第一次实例化时) 原文地址:https://www.cnblogs.com/LagoOrLY/p/10767283.html

Java继承类的初始化顺序

class Parent { // 静态变量 public static String p_StaticField = "父类--静态变量"; // 变量 public String p_Field = "父类--变量"; protected int i = 9; protected int j = 0; // 静态初始化块 static { System.out.println(p_StaticField); System.out.println("父类

Java类成员初始化顺序

类中包含7中成员:1.静态变量 static2.final静态常量 final static3.静态代码块 static{}  //多个代码块顺序执行 4.普通变量5.普通代码块 {}  //多个代码块顺序执行 6.构造方法 7.普通方法 类中成员初始化方式(排出7): 非继承类中:    首先执行1/2/3,执行顺序为顺序执行(谁在前先执行谁).    之后执行4/5,执行顺序为顺序执行(谁在前先执行谁).    然后执行6(默认执行无参构造方法).    继承类中:    首先执行父类1/2

类装载机制的类的初始化顺序

1.通过子类来调用父类的静态字段,只会触发父类的初始化,但是这是要看不同的虚拟机的不同实现. 2.每个开发人员对Java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载. 3.对JVM采用的双亲委派类加载机制 4.Java的连接模型允许用户运行时扩展引用程序 你的程序可以装载在编译时并不知道或者尚未存在的类或者接口,并动态连接它们并进行有选择的解析. 运行时动态扩展java应用程序有如下两个途径: 5. 3.1 调用java