^_^基础知识,要是不很明白的就看看吧。^_^
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、按照声明的顺序调用成员的初始化代码。在类的内部,初始化的顺序是先“静态”,(如果它们尚未因前面的对象创建过程而被初始化),后“非静态”。而非静态变量定义的顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。
不知道你看完后,感觉如何,如果不是这几天恶补基础知识,我......
分享到:
相关推荐
总结一下,Java中类变量和成员变量的初始化顺序是这样的: 1. 类变量按照定义顺序进行静态初始化。 2. 创建对象时,先执行实例初始化块,然后调用构造函数,构造函数中的初始化会覆盖实例初始化块中已初始化的值。 ...
这是因为子类继承了父类,需要确保父类的状态正确初始化。执行顺序如下: - 进入`A`类,执行构造函数`A()`。 - 进入`B`类,执行构造函数`B()`。 - 执行`B`类的`Fun()`方法。 3. **场景三:父类虚方法,子类使用`...
通过研究和实践,笔者终于弄明白了 C99 标准中新的结构体变量初始化方式,并且总结出经验笔记,以便于他人借鉴。 C99 标准的结构体变量初始化方式是一种非常灵活和方便的方式,它可以提高代码的可读性和灵活性。...
压缩包中共有两个文件,一个是顺序表的执行代码cpp文件,一个是顺序表的word文件,顺序表的word文件中写有代码所拥有的功能以及各功能的代码的执行结果图片,代码实现了顺序表的初始化,顺序表用后插法插入元素,求...
初始化eXosip库-启动事件监听线程-向SIP Proxy注册-向某SIP终端(电话号码)发起呼叫-建立连接-结束连接 初始化代码: int ret = 0; ret = eXosip_init (); eXosip_set_user_agent("##...
o 5.4 我有个函数,它应该接受并初始化一个指针 void f(int *ip) { static int dummy = 5; ip = &dummy;} 但是当我如下调用时: int *ip; f(ip); 调用者的指针却没有任何变化。 o 5.5 我能否用 void** 指针作为参数,...
- **核心思想**:使用静态构造函数来初始化类的静态成员,确保类被使用前完成所有必要的初始化。 - **应用场景**: - 初始化需要在类使用前完成的任务。 **原则14:使用构造函数链** - **核心思想**:通过构造函数...
⑵系统自带输入法管理功能只能设置 Ctrl + Alt + 1 之类有限的热键,且有时无法恢复初始设置,删除输入法时无法自动将其热键一并删除。IMETool 大大突破了热键设置局限性,可以实现 1092 种不同的热键组合。这是 ...
如果你在使用USART1时未开启AFIO时钟但仍能正常工作,这可能是由于某些初始化函数或RCC配置中已预先开启了AFIO时钟。 - 2. AFIO时钟一般在需要使用某个特定外设时开启,例如,如果你想使用GPIOC,那么就需要开启...
文件描述中提到:“能让你很快明白你以前没太明白的村C语言难题,确实不错的资料!”暗示了这份资料的实用性和对C语言学习者的重要性。而标签“c语言 问题”则直接指出了文档内容的主题方向。 接下来,我们将根据...
- **保证初始化顺序**:在系统初始化期间,关闭中断可以确保初始化序列按照预期顺序执行,不会被外部事件打断。 - **资源锁定**:关闭中断有助于锁定某些资源,防止它们在初始化过程中被意外修改或使用。 ##### 2.4...
3. **控制模块导入**:`__init__.py` 可以用于初始化包的行为,例如在其中定义包级别的变量、函数或类。当导入包时,`__init__.py` 的代码会被执行。通过这种方式,你可以控制哪些模块在导入包时自动加载。 4. **...
10.在logindlg.cpp 的loginDlg 类构造函数里,添上初始化语句,使密码显示 为小黑点。 loginDlg::loginDlg(QWidget *parent) : QDialog(parent), m_ui(new Ui::loginDlg) { m_ui->setupUi(this); m_ui->pwdLineEdit-...
该项目测试了运行静态块和Spring bean初始化的顺序 实验:静态块可以访问自动装配的对象吗? 先要明白Static块是什么时候运行的 静态块是在类第一次被加载的时候运行 spring的对象初始化是在什么时候运行的 假设bean...
1. **数组定义与初始化** 在PHP中,数组是一种存储多个值的数据结构。数组可以通过`array()`函数创建,例如: ```php $arr = array('a' => "你", 'b' => "我", "他"); ``` 或者使用简短语法: ```php $arr =...
理解这个执行顺序有助于我们在设计类和对象时避免潜在的问题,例如确保初始化逻辑正确执行。在实际开发中,合理利用代码块可以提高代码的可读性和效率。希望这个实例和解释能帮助你更好地理解和应用Java的代码块执行...
// 初始化顺序循环队列 if(queueEmpty(L))// 判断空队列 cout当前队列空! "; else cout当前队列非空! "; cout请输入入队元素的最大元素x="; cin>>x; if(x) { while(x!=0) { enQueue(&L, x);//循环入队...
6. **数组的创建与初始化**:了解不同方式创建和初始化数组,如动态初始化和静态初始化,以及数组长度的设定。 7. **变量命名规则**:Java中,合法的变量名应遵循一定的命名规范,例如不能以数字开头,可以包含字母...
4. **应用框架(Application Framework)**:MFC提供了CWinApp类,作为应用程序的入口点,负责初始化、消息循环和退出清理工作。 5. **控件库(Control Library)**:包括ActiveX控件和用户自定义控件的实现,如...
- **数据类型与变量**:掌握C++中的基本数据类型(如int、float、char等),理解变量声明和初始化的概念,学会使用常量提高代码的可读性和维护性。 - **运算符与表达式**:熟悉算术、关系、逻辑等运算符的使用,...