static变量,构造函数以及父类、子类构造和static执行顺序:
/**
1 每个类初始化时,会先初始化它的static再执行构造方法,
当static已经执行过后,该类的新的实例不会再执行static
2 该类如果继承了某个类则父类的static会先初始化。
3 某个类即便有static main方法,并且该类作为执行类,
在执行main方法的过程中,只要不涉及到该类,则static都不会执行---->修正:执行main方法的第一行代码前,会执行该类中定义的static代码块和初始化其中的static变量,按照定义顺序来执行初始化.
*
* 因此,可以得到如下顺序:
* 1 父类static 变量/代码块 初始化(即使父类static是private的也会初始化,只会初始化一次)
* 2 子类static 变量/代码块 初始化
* 3 父类构造方法
* 4 子类构造方法
* static变量和static代码块的初始化顺序按照书写的先后顺序初始化
*
* 子类可以覆盖父类的方法,覆盖的时候可以扩大控制符的范围,而不能缩小范围【如protected-->public可以,protected-->friendly不可】
*
*
*
* 关于子类和父类构造方法参数等不一致时问题
* 1 父类构造函数无参数,子类构造也无参数,且子类该构造函数中未调用或者显式采用super()方式调用时,
* 父类无参构造函数和子类无参构造函数都会执行
* 2 如果子类无参构造函数中,显式调用父类有参构造函数,则父类无参构造函数不会被执行
*
* 由此可以知道:
* 子类初始化时,执行子类构造函数(不管是有参还是无参的子构造函数)之前,默认会首先执行父类无参数构造函数
* 但是如果在子类构造函数(不管是有参还是无参的子构造函数)中,显式调用父类有参构造函数,
则会执行父类被显式调用的有参构造函数而不会执行父类无参构造函数。
* /
分享到:
相关推荐
java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...
这段输出明确展示了静态块和构造函数的执行顺序:首先执行的是父类`Person`的静态块,接着是子类`Student`的静态块;之后是`Person`类的构造函数,最后是`Student`类的构造函数。这个顺序体现了Java中继承机制下的...
为了确保子类能够正确地初始化其父类部分,需要特别注意构造函数的调用顺序与机制。 #### 构造函数的调用规则 根据题目中的描述,我们可以总结出关于构造函数调用的一些关键规则: 1. **默认构造函数的自动调用**...
2. **构造函数调用顺序**:在子类构造函数中,必须先调用父类的构造函数(使用`super`),然后再执行子类构造函数中的其他代码。 3. **构造函数的可访问性**:子类只能访问具有相同或更宽松访问级别的父类构造函数。...
如果子类没有显式定义构造函数,它将自动获得一个默认构造函数,调用父类的无参构造函数。若子类需要调用父类的有参构造函数,必须通过`super()`关键字来实现。 6. **构造函数与final字段**:对于声明为`final`的...
在本例中,子类Child的构造函数调用了this("dd"),这会先执行父类Father的带参数构造函数,再执行子类的构造函数。因此,输出将是“父类有参构造函数”和“子类无参构造函数”。 这些题目涉及了Java的基础语法、...
问题:子类继承父类,构造函数及公共属性的执行顺序是怎样的? 示例代码 <SPAN xss=removed>public class A extends C { B b = new B(); static H h = new H(); static { ...
2. **继承关系中的构造函数执行顺序**:在创建子类对象时,会先执行父类的构造函数,然后再执行子类自己的构造函数。如果父类构造函数中有初始化其他类对象的操作,则会先执行这些对象的构造函数。 3. **构造函数与...
6. **子类构造函数调用**:最后执行子类自身的构造函数。 ### 初始化过程详解 #### 基类构造函数的调用 在创建子类实例时,必须先调用基类的构造函数来完成基类部分的初始化。这通常通过在子类构造函数中使用`...
在多级继承关系中,静态代码块按照类的加载顺序执行,先加载的类先执行其静态代码块。 例如,在给定的代码中: ```java public class A { static { System.out.print(1); } public A() { System.out.print(2)...
继承时,子类不能继承父类的`private`成员,也不能直接继承父类的构造函数,但可以通过构造器链来调用父类的构造函数。如果子类和父类不在同一个包下,那么对于使用默认权限的成员,子类无权直接继承。 初始化顺序...
由于构造函数的执行顺序是从基类到子类,所以在子类的构造函数运行前,父类的构造函数已经完成了调用draw(),这时子类的成员变量radius尚未初始化,所以输出显示radius为0。当子类构造函数运行后,radius才被赋值,...
当创建子类对象时,首先会执行父类的构造函数,然后是子类的构造函数。这确保了父类的状态在子类对象创建之前已经正确设置。 4. **静态与非静态成员** 静态成员属于类,而非静态成员属于类的实例。静态成员可以...
总结,Java的构造函数在类的设计中扮演着至关重要的角色,它们负责对象的初始化,可以通过重载提供多种构造方式,而在继承体系中,子类构造函数会自动或显式调用父类的构造函数,确保父类的状态正确初始化。...
* 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * (如果是重写即子类将父类的实例方法重写类,则调用子类的,如果是隐藏即方法则父类中声明为静态方法,则调用父类本身的...
静态初始化块的执行顺序是从上到下依次执行的,先执行父类的静态初始化块,然后执行子类的静态初始化块。 在Java中,静态初始化块的执行顺序是由Java虚拟机(JVM)来控制的。JVM在加载类时,会对静态初始化块进行...
7. **构造函数的调用**:最后,构造函数被调用来完成对象的初始化。 #### 四、具体示例分析 1. **单个类的初始化顺序** ```java public class InitialOrderTest { // 静态成员变量 public static String ...
当类第一次被加载时,JVM会按照它们在源代码中的顺序执行静态初始化块。 2. **类加载机制**:Java类的加载是懒加载的,即只有在类被首次使用时,JVM才会加载并执行对应的静态初始化块。 3. **静态初始化块与构造...
**概念:** 当子类创建对象时,会首先执行父类的构造函数,然后再执行子类的构造函数。这是为了确保父类的初始化逻辑能够先于子类执行。 **选择题示例:** 第13题中,正确答案是A选项:“FatherChild”。这是因为当...