自己测试了一下自己对父子类初始化的理解,发现了还是不是很准确的。以下是测试的结果。
父类
package com.java.parentandchild;
public class Parent {
public static void sysOut() {
System.out.println("我是父类的静态函数。");
}
public Parent(){
System.out.println("我是父类的构造函数。");
}
static {
System.out.println("我是父类的静态代码块。");
}
}
子类
package com.java.parentandchild;
public class Child extends Parent {
public static void sysOut() {
System.out.println("我是子类的静态函数。");
}
public Child() {
System.out.println("我是子类的构造函数。");
}
static {
System.out.println("我是子类的静态代码块。");
}
}
客户端(直接初始化子类)时(第一种情况)
package com.java.parentandchild;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// Parent parent = new Parent();
System.out.println("============");
Child child = new Child();
}
}
输出结果
============
我是父类的静态代码块。
我是子类的静态代码块。
我是父类的构造函数。
我是子类的构造函数。
而当客户端是先父类后子类时(第二种情况)
package com.java.parentandchild;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
Parent parent = new Parent();
System.out.println("============");
Child child = new Child();
}
}
输出是:
我是父类的静态代码块。
我是父类的构造函数。
============
我是子类的静态代码块。
我是父类的构造函数。
我是子类的构造函数。
以下是我对这个结果的理解。
第一种情况下:按照初始化顺序是先父类后子类,所以肯定是先执行父类的静态代码块,然后是父类的构造函数,子类的静态代码块,子类的构造函数。
第二种情况下:因为是先new一个父类的对象,所以肯定是先执行父类的静态代码块和构造函数。在new子类的对象时,因为前面已经对父类进行了new,所以直接对进行子类的静态代码块的初始化,然后是父类的构造函数,最后是子类的构造函数。
分享到:
相关推荐
先附一张官网上的vue实例的生命周期图,每个Vue实例在被创建的时候都需要经过一系列的初始化过程,例如需要设置数据监听,编译模板,将实例挂载到DOM并在数据变化时更新DOM等。同时在这个过程中也会运行一些叫做生命...
2.1.3 类变量的初始化时机 2.2 父类构造器 2.2.1 隐式调用和显式调用 2.2.2 访问子类对象的实例变量 2.2.3 调用被子类重写的方法 2.3 父子实例的内存控制 2.3.1 继承成员变量和继承方法的区别 2.3.2 内存...
但仅仅用建立对象的最远派生类的构造函数调用虚基类的构造函数,而该派生类的所有基类中列出的对虚基类的构造函数的调用在执行中被忽略,从而保证对虚基类子对象只初始化一次。 (7) 在一个成员初始化列表中同时出现...
今天就结合Bootstrap table的父子表和行列调序的用法再来介绍下它稍微高级点的用法。 bootstrap table系列: JS表格组件神器bootstrap table详解(基础版) JS组件系列之Bootstrap table表格组件神器【终结篇】 JS...
... ... 补充知识:关于Vue子组件data选项某个属性引用子组件props定义的属性的几点思考 ... 我们也都知道在Vue父子组件可以通过...在项目开发中,我们会遇到这种需求,页面初始化时,父组件通过接口拿到需要数据,然后拿到
--全局初始化参数--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> 4.在Servlet中使用WebApplicationContextUtils获取容器...
我们前面已经指出Oracle的Lob字段和一般类型的字段在操作上有一个明显的区别--那就是你必须首先通过Oracle的empty_blob()/empty_clob()初始化Lob字段,然后获取该字段的引用,通过这个引用更改其值。所以要完成对...
B) 编译出错,数组ar[]必须初始化 C) 编译出错,Mine应声明为abstract D) 出现IndexOutOfBounds的异常。 题目17:c 下面关于抽象类描述错误的是:(选择1项) A) 抽象类的关键字是abstract,在抽象类中可以定义变量...
必须是父子(有层叠嵌套的关系)结构 大部分的css效果是可以 2.优先级 1.浏览器默认样式 2.内部样式和外部样式(就近原则) 3.内联样式 4.!important; 绝对优先使用() 格式 p{ color:red !important; ...
1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ........................