Java 基类和导出类的初始化顺序
来源:互联网 发布:windows10推荐必备软件 编辑:程序博客网 时间:2024/06/02 05:20
摘录 Java编程思想
1) 调用基类的构造器
2) 按照声明顺序调用成员的初始化方法
3) 调用到处类构造体的主体
==================================
顺序 : 层层递归到基类
按照编译,
Java中Static 相当于 一个全局变量,所以应该首先被初始化,防止引起编译错误。而且需要全部被初始化,从基类到最终的导出类。
然后 因为导出类 从基类导出,所以首先应该初始化 基类。
基类的初始化顺序 因为成员变量 只会 造成子类即导出类。 构造函数可能会使用到类中的变量,所以在调用构造器之前一定要使得成员变量即域初始化。
首先初始化 成员变量,然后初始化相应的构造器,初始化完成,接着层层初始化 后续的导出类。
=================================
2015.1.13 补充
上述的内容还不是十分完整。
首先我们先看地下的程序,介绍下 构造器内部的多态方法的行为。
package chapter8_6;class Glyph {void draw(){System.out.println("Glyph Draw()");}Glyph(){System.out.println("Glyph() before draw()");draw();System.out.println("Glyph() after draw()");}}class MyObject{@Overridepublic String toString() {// TODO Auto-generated method stubreturn "MyObject";}}class RoundGlyph extends Glyph {private MyObject radius = new MyObject();@Overridevoid draw(){System.out.println("RoundGlyph Draw(), radius = "+radius);}public RoundGlyph(MyObject r){radius = r;System.out.println("RoundGlyph().draw(),radius = "+radius);}}public class PolyConstructors extends Glyph {public static void main(String[] args) {new RoundGlyph(new MyObject());}}
===============================
// Output:
Glyph() before draw()
RoundGlyph Draw(), radius = null
Glyph() after draw()
RoundGlyph().draw(),radius = MyObject
===============================
基类构造函数中含有某个被到处类覆盖的函数,如 Draw() 在初始化 基类时候,因为到处类还没有进行初始化,但是动态绑定方法的时候绑定到了子类的方法,所以分配给对象的存储空间的初始化为二进制的零。 对于int类型 初始化为 0 对于 Object对象 初始化 为 null
初始化的实际过程是:
1) 在其他任何事物发生之前,将分配给对象的存储空间初始化成二进制的零。
2) 如前所述的那样调用基类构造器。
3) 按照声明的顺序调用成员的初始化方法。
4) 调用导出类的构造器主体。
- Java 基类和导出类的初始化顺序
- java类的成员初始化顺序和初始化块顺序
- Java类和对象的初始化顺序
- java的初始化和类装载顺序
- Java类和对象的初始化顺序
- java类的成员初始化顺序和初始化块知识
- java类的成员初始化顺序和初始化块知识
- java类的成员初始化顺序和初始化块知识
- Java 类和对象的初始化过程及初始化顺序
- java类的成员初始化顺序和初始化块知识
- Java 类和对象的初始化过程及初始化顺序
- java类的成员初始化顺序和初始化块知识
- java类的成员初始化顺序和初始化块知识
- java类的初始化顺序
- Java类的初始化顺序
- Java类的初始化顺序
- Java类的初始化顺序
- Java类的初始化顺序
- java基本类库
- Android smack+ejabberd+spack 实现即时通讯(二)客户端连接
- 非常详细的/etc/passwd解释
- 进程间通信 - 命名管道实现
- java软件技术的优势
- Java 基类和导出类的初始化顺序
- msyql启动错误Another MySQL daemon already running with the same unix socket.
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- Volley框架源码修改,添加头部验证Hreaders问题
- scala入门-06抽象类(abstract)的使用
- 进程间通信 - 动态链接库实现
- Lex与Yacc学习(三)之符号表
- unity3d canvas button 代码添加鼠标单击/触摸单击触发事件
- PSO算法学习心得