`
wyz191
  • 浏览: 96522 次
  • 性别: 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、调用导出类的构造器主体。

 

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

分享到:
评论

相关推荐

    Java类变量和成员变量初始化过程的应用介绍

    总结一下,Java中类变量和成员变量的初始化顺序是这样的: 1. 类变量按照定义顺序进行静态初始化。 2. 创建对象时,先执行实例初始化块,然后调用构造函数,构造函数中的初始化会覆盖实例初始化块中已初始化的值。 ...

    c#切换执行程序顺序,有些中级开发小伙伴还是搞不太明白在继承父类以及不同场景实例化的情况下,父类和子类的各种方法的执行顺序到底是

    这是因为子类继承了父类,需要确保父类的状态正确初始化。执行顺序如下: - 进入`A`类,执行构造函数`A()`。 - 进入`B`类,执行构造函数`B()`。 - 执行`B`类的`Fun()`方法。 3. **场景三:父类虚方法,子类使用`...

    又一次被C99给坑了之结构体变量初始化问题

    通过研究和实践,笔者终于弄明白了 C99 标准中新的结构体变量初始化方式,并且总结出经验笔记,以便于他人借鉴。 C99 标准的结构体变量初始化方式是一种非常灵活和方便的方式,它可以提高代码的可读性和灵活性。...

    数据结构-顺序表.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** 指针作为参数,...

    Effective_C#中文版_改善C#程序的50种方法.pdf

    - **核心思想**:使用静态构造函数来初始化类的静态成员,确保类被使用前完成所有必要的初始化。 - **应用场景**: - 初始化需要在类使用前完成的任务。 **原则14:使用构造函数链** - **核心思想**:通过构造函数...

    输入法设置工具 IME TOOL 2.6.5

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

    STM32系列常见问答集锦.docx

    如果你在使用USART1时未开启AFIO时钟但仍能正常工作,这可能是由于某些初始化函数或RCC配置中已预先开启了AFIO时钟。 - 2. AFIO时钟一般在需要使用某个特定外设时开启,例如,如果你想使用GPIOC,那么就需要开启...

    你必须知道的495个C语言问题.pdf

    文件描述中提到:“能让你很快明白你以前没太明白的村C语言难题,确实不错的资料!”暗示了这份资料的实用性和对C语言学习者的重要性。而标签“c语言 问题”则直接指出了文档内容的主题方向。 接下来,我们将根据...

    Uboot中start.S源码的指令级的详尽解析

    - **保证初始化顺序**:在系统初始化期间,关闭中断可以确保初始化序列按照预期顺序执行,不会被外部事件打断。 - **资源锁定**:关闭中断有助于锁定某些资源,防止它们在初始化过程中被意外修改或使用。 ##### 2.4...

    【python开发】1. __init__.py与导包(csdn)————程序.pdf

    3. **控制模块导入**:`__init__.py` 可以用于初始化包的行为,例如在其中定义包级别的变量、函数或类。当导入包时,`__init__.py` 的代码会被执行。通过这种方式,你可以控制哪些模块在导入包时自动加载。 4. **...

    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...

    《PHP编程最快明白》第三讲:php数组_.docx

    1. **数组定义与初始化** 在PHP中,数组是一种存储多个值的数据结构。数组可以通过`array()`函数创建,例如: ```php $arr = array('a' => "你", 'b' => "我", "他"); ``` 或者使用简短语法: ```php $arr =...

    Java 普通代码块静态代码块执行顺序(实例讲解)

    理解这个执行顺序有助于我们在设计类和对象时避免潜在的问题,例如确保初始化逻辑正确执行。在实际开发中,合理利用代码块可以提高代码的可读性和效率。希望这个实例和解释能帮助你更好地理解和应用Java的代码块执行...

    循环队列实验报告.pdf

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

    指导学习课3课件-课程总复习V1.0 1.ppt

    6. **数组的创建与初始化**:了解不同方式创建和初始化数组,如动态初始化和静态初始化,以及数组长度的设定。 7. **变量命名规则**:Java中,合法的变量名应遵循一定的命名规范,例如不能以数字开头,可以包含字母...

    明明白白看MFC框架

    4. **应用框架(Application Framework)**:MFC提供了CWinApp类,作为应用程序的入口点,负责初始化、消息循环和退出清理工作。 5. **控件库(Control Library)**:包括ActiveX控件和用户自定义控件的实现,如...

    c++实验-初学者使用

    - **数据类型与变量**:掌握C++中的基本数据类型(如int、float、char等),理解变量声明和初始化的概念,学会使用常量提高代码的可读性和维护性。 - **运算符与表达式**:熟悉算术、关系、逻辑等运算符的使用,...

Global site tag (gtag.js) - Google Analytics