首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java构造函数调用顺序问题

参考链接: Java构造函数 今天对Java构造函数调用顺序进行研究,使用是与C++类似的方法,即不对源码进行研究,而是直接通过打印代码对构造函数调用顺序进行研究。 ...代码如下,使用Java核心技术中代码,对其进行了改造,在构造函数中加入了输出信息  public class ConstructorTest {    public static void main...再来看第二条规则:按照声明中出现次序,依次执行所有域初始化语句和初始化块。  程序运行结果显示先执行静态初始化块后执行域初始化块,可以通过调换上述两个初始化块次序对这一规则进行验证。 ...这里书中讲解并不是很清楚,静态初始化块优先级要高于域初始化块,因此静态初始化块执行要早于域初始化块,只有在同级别的情况下,才按照声明顺序调用,这一点我通过将static去掉进行了验证。 ...最后一点:如果构造器第一行调用了第二个构造器,则执行第二个构造主体。  最后还有一点非常重要内容,构造器调用一定要是第一句,否则编译出错。

1.1K40
您找到你想要的搜索结果了吗?
是的
没有找到

Java-构造方法调用顺序

System.out.println("创建ChildClass"); } } 执行结果: 开始创建一个ChildClass对象… 创建FatherClass 创建ChildClass 要点: ①关于构造方法结合继承概念调用...,有如下顺序,函数入口总是main,先执行System.out.println(“开始创建一个ChildClass对象…”)语句;然后我们调用了ChildClass这个构造方法,然后由于虽然在public...ChildClass{}这个构造方法内并只写了System.out.println(“创建ChildClass”);但是其第一步必定执行super();于是去执行其父FatherClass构造方法...,同理,FatherClass构造方法执行时候又得先得执行默认Object构造方法,不过其没有相应语句输出。...②总结执行顺序构造方法第一句总是:super(…)来调用“此类”对应构造方法。所以,流程就是:先向上追溯到Object,然后再依次向下执行初始化块和构造方法,直到当前子类为止。

88410

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

Java代码行执行顺序: 1.静态块:用static声明,JVM加载时执行,仅执行一次 2.构造块:中直接用{}定义,每次创建对象时执行 3.执行顺序优先级:静态块>main()>构造块>构造方法...出现继承时: 1.初始化父静态变量、静态代码块,初始化顺序按照出现顺序。 2.初始化子类静态变量,静态代码块。 3.初始化父成员变量。 4.执行父构造函数。...如果做如下调整: 结果(二):【将main()函数new Son()注释掉运行结果】 **父**构造块**调用;n=10 m=10 父$$构造函数$$; n=100 m=20 父...$; n=100 m=210** 结果(三):【将Father两个引用p、p1注释掉运行结果,结果二中new Son();也注释掉】 父%%静态块%%调用; m=10 父**构造块...**调用;n=10 m=20 父$$构造函数$$; n=100 m=30 结果(四):【将Father两个引用p、p1注释掉运行结果,结果二中new Son();不注释掉】 父

1.7K30

Java构造函数调用顺序问题

大家好,又见面了,我是你们朋友全栈君。 今天对Java构造函数调用顺序进行研究,使用是与C++类似的方法,即不对源码进行研究,而是直接通过打印代码对构造函数调用顺序进行研究。...代码如下,使用Java核心技术中代码,对其进行了改造,在构造函数中加入了输出信息 public class ConstructorTest { public static void main...再来看第二条规则:按照声明中出现次序,依次执行所有域初始化语句和初始化块。 程序运行结果显示先执行静态初始化块后执行域初始化块,可以通过调换上述两个初始化块次序对这一规则进行验证。...这里书中讲解并不是很清楚,静态初始化块优先级要高于域初始化块,因此静态初始化块执行要早于域初始化块,只有在同级别的情况下,才按照声明顺序调用,这一点我通过将static去掉进行了验证。...最后一点:如果构造器第一行调用了第二个构造器,则执行第二个构造主体。 最后还有一点非常重要内容,构造器调用一定要是第一句,否则编译出错。

70320

Java加载顺序

前言 那一年,呼延十又回想起被加载顺序支配恐惧,笔试题上,好几个,几个方法,几个输出语句,让你按照顺序写出输出.我真的是有一句…. 但是呢,我们还是有了解一下必要,在编码过程中有许多应用....正文 经常用来比较顺序,无非就是静态代码块,普通代码块,静态方法和普通方法. 这里直接说一下结论: 先静态后普通最后构造方法,先父后子类....: 首先在main方法中,调用了B构造方法....加载A构造方法,输出A----- constructor. 加载B普通变量,调用了方法,输出B----- default. 加载B构造方法,输出了B----- constructor....在这期间,发现一些小知识点,也记录一下. 静态变量,静态代码块加载顺序只和代码编写顺序有关. 普通变量及构造方法,顺序一定是先普通变量,再构造方法.

1.3K20

实例化顺序:静态数据、构造函数和字段执行顺序详解

实例化顺序概述 在理解实例化顺序之前,让我们先概括一下这个过程步骤: 父静态数据初始化:首先,父静态数据(静态字段和静态块)会被初始化。...这包括在构造函数中赋予它们初始值或使用构造函数参数进行初始化。 代码示例 为了更好地理解实例化顺序,让我们通过一个简单Python示例来演示这个过程。...实例化顺序总结 通过上述示例和步骤分析,我们可以总结实例化顺序如下: 父静态数据初始化。 父构造函数,包括父字段初始化。 子类静态数据初始化。...子类构造函数,包括子类字段初始化。 在实际应用中,了解这些顺序对于正确地构建和初始化实例非常重要。在多层次继承结构中,确保每个步骤都按照正确顺序执行,可以避免潜在错误和不一致性。...结语 实例化顺序涉及到静态数据初始化、构造函数和字段初始化等多个步骤,了解这些步骤执行顺序对于编写正确面向对象程序至关重要。本文通过示例和详细解释,希望能够帮助读者更好地理解实例化过程。

47420

Java加载顺序实验

先准备3个逐层继承User1,User2,User3 User2继承User1,User3继承User2 分别在中准备构造函数,普通初始化块,静态代码块 public class User1 {...普通初始化块 User2构造函数调用 User3普通初始化块 User3构造函数调用 静态代码块------------->普通初始化块--------------->构造函数 构造函数先执行父...,再执行子类原理: Java默认在无参构造函数中会执行super(),则会递归执行构造函数,因而先执行父再执行子类 有参构造情况: 先扩展代码: public class User1 {...User3有参构造函数调用 image.png 显然执行只有创建User3执行了有参构造,User2和User1执行都是无参构造,他们并没有自动调用父有参构造。...= aname; System.out.println("User3有参构造函数调用"); } image.png 无参构造函数虽然是隐试调用,但是如果子类继承你,而你没有无参构造函数

91640

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

具体说,静态代码块是由调用。...调用时,先执行静态代码块,然后才执行主函数,总的来说,静态代码块是和一起,优先级最高,加载同时,静态代码块同时也执行,但只执行一次,所以作用一般是用来加载一些配置代码,或者加载某些文件配置。...构造函数 构造函数作用是用于给对象进行初始化,对象一建立,就会调用与之相应构造函数,也就是说,不建立对象,构造函数时不会运行构造代码块 构造代码块作用同样是给对象进行初始化。...对象一建立就运行构造代码块了,而且优先于构造函数执行。这里要强调一下,有对象建立,才会运行构造代码块,不能调用构造代码块,而且构造代码块与构造函数执行顺序是前者先于后者执行。...构造函数和构造代码块区别: 构造代码块与构造函数区别是:构造代码块是给所有对象进行统一初始化,而构造函数是给对应对象初始化,因为构造函数是可以多个,运行哪个构造函数就会建立什么样对象,但无论建立哪个对象

76410

JAVA & .NET创建对象构造函数调用顺序

JAVA 定义Person package models; ​ public class Person { public Person() { System.out.println...2 person init block person constructor chinese init block chinese init block2 chinese constructor 执行顺序为...: 基静态初始化块——当前静态初始化块——基初始化块——基构造函数——当前初始化块——当前构造函数 ⚠️ JAVA中加载时会调用静态代码块 try { Class.forName...: 当前静态构造函数——基静态构造函数——基构造函数——当前构造函数 小结 JAVA与.NET创建对象时都是先执行静态代码块后执行非静态代码块; JAVA先执行基静态及非静态代码块; .NET...先执行基静态代码块,先执行当前实例构造函数;

1.1K20

Point(构造) Java

题目描述 下面是一个平面上定义,请在外实现它所有方法,并生成点测试它。...输入 测试数据组数 t 第一组测试数据点p1x坐标 第一组测试数据点p1y坐标 第一组测试数据点p2x坐标 第一组测试数据点p2y坐标 .............this和C++不同,Java没有指针这个玩意,C++里面访问本对象数据是this加上->方式,而Java则是this加上下标点.方式,这里要注意一下。...还有就是Java除了普通数据类型,创建对象都需要使用new来创建,不然无法访问对象方式属性。 调用sqrt()函数需要Math包,Java调用函数都十分讲究,一定把包名名路径讲清楚。...AC代码 import java.util.Scanner; import java.lang.Math; class Point{ double x,y; public Point()

19210

Java中String构造方法

参考链接: java-string-endswith String构造方法  String代表字符串,字符串是由多个字符组成一串数据,字符串可以看成字符数组, 1.字符串字面值“abc”也可以看成一个字符串对象...2.字符串是常量,一旦被创建,就不能改变 3.字符串可以看做是一个长度固定有序字符序列,每个组成字符编有索引从0开始  常见构造方法 public String():空构造 public String...  因为字符串值是在方法区常量池中划分空间分配地址值  a:如何理解这句话 String s = “hello” ; s = “world” + “java”; 问s结果是多少? ...因为,String重写了equals()方法,它比较是引用类型 值是否相等,所以输出true。...将指定字符进行互换 public String replace(String old,String new) 将指定字符串进行互换 public String trim() 去除两端空格 String按字典顺序比较两个字符串及案例演示

64730

【答疑解惑】Java加载顺序

语音版: Java初始化顺序这个问题经常出现在面试题中,这个面试题设计知识有、对象、static关键字、初始化函数、加载顺序,咱们一个一个来说。...对象: 对象是具有状态、行为和标识是上面一个实例。...每一个对象都有内部数据(它描述该对象状态)和方法(它产生行为),并且每一个对象都可以与其他对象区分开来,就是一个对象在内存中都有一个唯一地址。在Java中对象都必须通过new来产生。...初始化函数: 也就是构造器,构造器名称必须与名完全相同,没有返回值。没有参数构造器叫做默认构造器,你在不重载情况下都是调用默认构造器。...加载顺序: static块和对象:无论写在前面还是后面都会先执行,多个静态块或者对象执行顺序与写顺序一致,写在前面的先执行; 非静态块和对象:按照在中写先后顺序执行; 初始化函数;

772120

java静态属性,静态块,构造函数执行顺序

今天为了搞清楚实例化一个对象时其属性等实例化顺序,写了下面的例子来探究: 实例化一个C对象,其中,A为其静态属性,B为其普通属性;D为C,E为D静态属性,F为D普通属性;C中还包含了静态代码块和普通代码块.../** * 静态代码块先于构造器执行 普通块先于构造块 只执行一次 * 凡是静态与对象无关,先于对象存在; 凡是静态都是共享 */ B b = new B(); static...C"); } } 运行结果: -------第1次实例化------- 父静态属性E 构造静态属性A 静态代码块 父普通属性F 构造D 构造普通属性B 普通代码块 构造函数...C -------第2次实例化------- 父普通属性F 构造D 构造普通属性B 普通代码块 构造函数C 结论(实例化顺序): 父静态属性 父静态代码块 子类静态属性 子类静态代码块...父普通属性 父普通代码块 父构造函数 子类普通属性 子类普通代码块 子类构造函数 静态东西只在第一次实例化时候执行 原则:先静态后非静态、先父后子类

1.1K60

C++中中同时存在继承以及组合时候,构造函数构造顺序

C++一大特点就是面向对象,面向对象主要就是一些相关特性(封装、继承、多态)。 那么在继承以及成员属性包含其他实例对象时候,构造函数构造顺序到底是怎么样子呢?...相信大家都知道,实例化对象首先需要是调用自身构造函数进行分配内存空间之后进行实例化对象,这就是构造函数整个过程(两步)。...那么当一个对象既包含了继承关系同时也在自身成员属性中包含了其他对象实例化时候,那么这时候实例化该类对象时候,构造函数顺序会是怎么样子呢?下面来看看这一段代码吧。...<< "C 构造函数" << endl; } private: B b; // C中组合有B对象成员 int i_c; }; int main() { C...A 构造函数 B 构造函数 C 构造函数 构造顺序是首先构造继承,其次构造组合中实例对象,最后才是构造自己本身。

1.1K20

构造方法、初始化块以及字段初始化顺序

: 如果类提供了一个自定义构造方法,将导致系统不再提供默认构造方法。...多构造函数 初始化块 ​ 如果一个中既有初始化块,又有构造方法,同时还设定了字段初始值,谁说了算?...this.field = value; } public InitializeBlockClass() { } } 这是一个生造出来展示Java...} 规律(字段初始化顺序) 执行成员定义时指定默认值或初始化块,到底执行哪一个要看哪一个“排在前面”。 执行构造函数。...初始化块不接收任何参数,而且只要一创建对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行代码”。

51220
领券