`
wyz191
  • 浏览: 94069 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

类的初始化顺序---你真的明白吗???^_^

 
阅读更多


^_^基础知识,要是不很明白的就看看吧。^_^

public abstract class Glyph {

 abstract void draw();

 Glyph(){  

  System.out.println("Glyph() before draw()");

  draw();

  System.out.println("Glyph() after draw()");

 }

}

public class RoundGlyph extends Glyph {

 private int radius = 1;

 RoundGlyph(int r){ 

//  radius = r;

  System.out.println(radius);

  System.out.println("RoundGlyph.RoundGlyph(),radius = "+radius);

 }

 void draw() {

  System.out.println("RoundGlyph.draw(),radius = "+radius);

 } 

 public static void main(String[] args) {

  RoundGlyph test = new RoundGlyph(10);

 }

}

输出:

Glyph() before draw()

RoundGlyph.draw(),radius = 0

Glyph() after draw()

1

RoundGlyph.RoundGlyph(),radius = 1

由此得出,初始化的实际过程是:

1、在其他任何事物发生之前,将分配给对象的存储空间初始化成二进制零。

2、调用基类构造器。这个步骤会不断的反复递归下去,首先是构造这种层次结构的根,然后是下一层导出类,等等。直到最低层的导出类。此时,调用被重载的draw()方法(是的,是在调用RoundGlyph构造器之前调用的),由于步骤(1)的缘故,我们此时会发现radius的值为0。

3、按照声明的顺序调用成员的初始化代码。在类的内部,初始化的顺序是先“静态”,(如果它们尚未因前面的对象创建过程而被初始化),后“非静态”。而非静态变量定义的顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。

4、调用导出类的构造器主体。

 

不知道你看完后,感觉如何,如果不是这几天恶补基础知识,我......

分享到:
评论

相关推荐

    数据结构-顺序表.zip

    压缩包中共有两个文件,一个是顺序表的执行代码cpp文件,一个是顺序表的word文件,顺序表的word文件中写有代码所拥有的功能以及各功能的代码的执行结果图片,代码实现了顺序表的初始化,顺序表用后插法插入元素,求...

    基于SIP开发软件电话的一些资源(转自YOUTOO)

    初始化eXosip库-启动事件监听线程-向SIP Proxy注册-向某SIP终端(电话号码)发起呼叫-建立连接-结束连接 初始化代码: int ret = 0; ret = eXosip_init (); eXosip_set_user_agent("##...

    C语言FAQ 常见问题列表

    o 5.4 我有个函数,它应该接受并初始化一个指针 void f(int *ip) { static int dummy = 5; ip = &dummy;} 但是当我如下调用时: int *ip; f(ip); 调用者的指针却没有任何变化。 o 5.5 我能否用 void** 指针作为参数,...

    输入法设置工具 IME TOOL 2.6.5

    ⑵系统自带输入法管理功能只能设置 Ctrl + Alt + 1 之类有限的热键,且有时无法恢复初始设置,删除输入法时无法自动将其热键一并删除。IMETool 大大突破了热键设置局限性,可以实现 1092 种不同的热键组合。这是 ...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    10.在logindlg.cpp 的loginDlg 类构造函数里,添上初始化语句,使密码显示 为小黑点。 loginDlg::loginDlg(QWidget *parent) : QDialog(parent), m_ui(new Ui::loginDlg) { m_ui->setupUi(this); m_ui->pwdLineEdit-...

    spring-experiement

    该项目测试了运行静态块和Spring bean初始化的顺序 实验:静态块可以访问自动装配的对象吗? 先要明白Static块是什么时候运行的 静态块是在类第一次被加载的时候运行 spring的对象初始化是在什么时候运行的 假设bean...

    循环队列实验报告.pdf

    // 初始化顺序循环队列 if(queueEmpty(L))// 判断空队列 cout当前队列空! "; else cout当前队列非空! "; cout请输入入队元素的最大元素x="; cin>>x; if(x) { while(x!=0) { enQueue(&L, x);//循环入队...

    你必须知道的495个C语言问题(PDF)

    1 声明和初始化1 1.1 我如何决定使用那种整数类型? . . . . . . . . . . . . . . . . . . . 1 1.2 64 位机上的64 位类型是什么样的? . . . . . . . . . . . . . . . . 1 1.3 怎样定义和声明全局变量和函数最好? ....

    EDA/PLD中的关于构造函数的调用顺序

     构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰,这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。构造函数不能被直接调用,必须通过new运算符在创建...

    关于构造函数的调用顺序

     构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰,这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。构造函数不能被直接调用,必须通过new运算符在创建...

    AIC的Java课程1-6章

     弄清构造函数和终结方法在继承层次结构中的调用顺序,强调子类必须调用超类的构造函数分配空间和初始化超类数据。  掌握方法重写(override)的基本要求。  理解和使用关键字final。  理解包的...

    PID算法的运用

    可知在对定时器0初始化后就一直在执行PID_Output()函数。在PID_Output()函数中先用iTemp变量来得到PID运算的结果,来决定是启动加热丝加热还是不启动加热丝。下面的if语句结合定时器来决定PID算法多久执行一次。...

    数据结构C语言回文判断运用栈以及队列.doc

    InitStack函数用于初始化一个空栈,push函数用于将数据写入栈中,pop函数用于将栈中的数据输出。栈的操作是先进后出,因此出栈的数据是原先输入数据的逆序。 二、队列的基本操作 队列是一种先进先出的数据结构,它...

    c#学习笔记.txt

    在类中,必须初始化实例对象. 使用 new 运算符创建结构对象时,将创建该结构对象,并且调用适当的构造函数。与类不同的是,结构的实例化可以不使用 new 运算符。如果不使用 new,那么在初始化所有字段之前,字段将...

    springmybatis

    sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 <typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/> 这个别名非常重要,你在 具体的类的映射中,比如User...

    数据结构C语言回文判断(运用栈以及队列完成).doc

    (1)void InitStack(SeqStack *s):栈初始化模块,即初始化一个空栈,随后对该空栈进行数据的写入操作。 (2)int push(SeqStack *s,char ch):入栈操作,即给空栈中写入数据。 (3)int pop(SeqStack *s,char *x...

    Reversing:逆向工程揭密

    3.4.5 进程初始化顺序 87 3.5 应用程序编程接口 88 3.5.1 Win32 API 88 3.5.2 本地API 90 3.5.3 系统调用机制 91 3.6 可执行文件格式 93 3.6.1 基本概念 93 3.6.2 映像区段(Image Sections) 95 3.6.3 区段对齐...

    chitter-rails

    数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) 部署说明 ... 直起 作为制造者,这样我就可以让人们知道我在做什么我想发布一条消息(窥视) 作为一个制造者,这样我就能明白别人在说...

Global site tag (gtag.js) - Google Analytics