`

先于对象init之前调用其方法.

阅读更多

先于对象init之前调用其方法.

前些天写代码时发现这样一个现象:就是在子类对象construct完成之前就可以调用其方法了.

我当时写的代码大致是这样的:

public  abstract  class Parent{
    protected String name;

    public Parent(){     // -------------------- 1
        name = initName();
    }
    protected abstract String initName();
}

public class Child extends Parent{
    public Child(){   // -------------------- 2
        super();
    }

    protected String initName(){   // -------------------- 3
        this.name = "rmn190";
    }
}

现在先不说这样的代码设计上有什么问题(后来发现设计上是很畸形的),当用Eclipse的debug跟踪"Parent someone = new Child();"的执行步骤时,发现3在2还没执行完就执行了.

......................

写到这里觉得自己发现这个现象很可笑的,本来就是嘛,谁也没有说3不能在someone初始化完成之前不能被调用呀.

不过,把这个问题记下来,写在这里权当是对以后的类似问题的一个借鉴吧,也希望能对以后的深入研究Java有所信息上的积累.

又想起来鲁迅的那句话:"人类的...前行的历史,正如煤的形成,当时用大量的木材,结果却只是一小块,但...是不在其中的,更何况是徒手...".

呵呵....

3
1
分享到:
评论

相关推荐

    在C或C++中调用JAVA方法

    在C或C++中调用JAVA方法是一种常见的跨语言交互技术,主要依赖于Java Native Interface (JNI)。JNI是Java平台的一部分,它允许Java代码和其他语言编写的代码进行交互,从而实现混合编程。JNI提供了丰富的API,使得...

    NDK开发之C语言调用Java构造方法、父类方法、返回中文字符串乱码问题案例

    对于父类方法,你需要先获取父类的`jclass`,然后按照同样的方式寻找并调用方法。例如,如果`YourJavaClass`继承自`ParentClass`,可以这样调用父类的`someMethod`: ```c++ jclass parentClass = env->FindClass(...

    tinyMCE方法调用

    1. 初始化编辑器:`tinyMCE.init()` 是启动tinyMCE编辑器的关键步骤,需要传入一个配置对象,该对象包含了编辑器的各种设置,如宽度、高度、语言、工具栏选项等。例如: ```javascript tinyMCE.init({ selector: ...

    python课程设计-25-子类调用父类同名方法和属性之思路分析.ev4.rar

    在`Child`类的`display`方法中,我们先执行子类特有的行为,然后通过`super().display()`调用了父类的`display`方法,这使得子类可以保持父类的显示逻辑。 此外,除了`super()`,还可以直接通过类名来调用父类的...

    python-创建类方法.docx

    类方法通过`@classmethod`装饰器进行定义,使得它们可以直接通过类调用,而不需要先创建类的实例。 首先,类方法的主要用途之一是处理类级别的数据,如上面例子中的`Person`类。类变量`count`被用来记录创建的`...

    关于 js 和 applet 相互调用的例子

    而在Applet中,可以使用`getScriptEngine()`方法获取JavaScript引擎,从而调用JS函数。 让我们深入到例子中,假设我们有一个名为"AppletExample.jar"的Applet,它包含一个名为`MyApplet`的类,这个Applet需要与页面...

    第11章 python类与对象-python基础,快速入门.pptx

    `__init__`方法用于初始化新创建的对象,`speak`方法则定义了动物如何发出声音。 2. **类的实例化**: 创建类的实例(对象)使用类名后跟括号,如`cat=Animal('cat','喵喵')`。这会调用`__init__`方法,并将参数...

    zeromq, zmq_init, 源码

    在使用zeromq进行任何操作之前,比如创建socket、绑定或连接地址等,都必须先调用`zmq_init`。这个函数的主要功能是为zeromq库创建一个上下文对象,该对象管理着zeromq的所有资源,包括线程池、内存分配和I/O多路...

    再次详细说明在继承中的程序执行顺序,子类与父类到底哪个先执行

    当一个类实例化时,其构造函数(在Java中是`构造器`,在Python中是`__init__`方法)会被调用。在涉及继承的情况下,这个过程遵循一定的规则。 1. **初始化父类**: - 在子类创建实例时,首先会执行父类的构造函数...

    原创VC编写COM实例 5种方法简单调用COM实例

    对于动态加载COM组件,你可以先使用`LoadLibrary`加载库,然后通过`GetProcAddress`获取`DllGetClassObject`函数地址,再调用该函数创建对象。这种方式适用于运行时决定要使用的COM组件。 ```cpp HINSTANCE hLib = ...

    探讨Java的对象是怎么在内存中产生的?

    5. **构造函数调用**:最后执行对象的构造函数`<init>`,完成对象的初始化。 #### 三、对象的内存布局 对象在内存中的布局可以分为三个主要部分: 1. **对象头(Header)**:包含对象的运行时数据,如哈希码、GC分代...

    316+齐志远1

    这些题目主要涉及Python编程语言中的面向对象编程概念,包括类的定义、对象的创建、属性与方法的使用、初始化方法`__init__`、析构方法`__del__`、继承以及方法的调用。下面将对每个题目进行详细解释。 1. 题目要求...

    全局对象构造与析构机制剖析

    通过观察运行输出,我们可以看到全局对象的构造函数确实先于`main()`函数被调用,而析构函数则在`main()`函数结束后调用。此外,`func_before_main`和`func_after_main`也按照预期在`main()`函数前后被调用,证明了...

    派生类实例,自己学习总结的例子

    当创建派生类的对象时,会先调用基类的`__init__`,然后执行派生类的`__init__`。这通常通过在派生类的`__init__`中调用`super().__init__(...)`来实现,以确保基类的初始化。 3. **方法覆盖(Method Overriding)*...

    超级有影响力霸气的Java面试题大全文档

     Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别...

    [feiq]FeiQ.exe

    init 函数是在类的其他方法被调用之前必先调用的函数,相当于 C++的构造函数。free 函数是在驱动最后销毁对象之前调用的函数,相当于 C++的析构函数。probe 函数是在匹配期间调用的函数,驱动程序此时会检查硬件设备...

    用java调用kettle设计包含源代码

    通过`init`方法将资源库元数据应用到资源库对象上。 ```java repository.init(kettleDatabaseMeta); ``` ##### 5. 连接资源库 完成上述步骤后,可以使用`connect`方法连接到资源库。 ```java repository.connect...

    pygame中文文档.docx

    在编写 Pygame 应用时,通常先调用 `pygame.init()` 初始化所有模块,然后创建窗口,处理事件,绘制图形,最后在主循环中调用 `pygame.display.flip()` 或 `pygame.display.update()` 更新屏幕。当程序结束时,调用 ...

    ssh(structs,spring,hibernate)框架中的上传下载

     此外lazy="true"说明地返回整个Tfile对象时,并不返回fileContent这个字段的数据,只有在显式调用tfile.getFileContent()方法时才真正从数据库中获取fileContent的数据。这是Hibernate3引入的新特性,对于包含重量...

    Python语言基础项目案例:日期编写.pptx

    这个类的设计遵循了面向对象编程的原则,其中包含了构造函数`__init__`以及一个类方法`del_date`。接下来,我们将详细探讨这些概念以及它们在实际应用中的作用。 1. **类的定义**: 类是面向对象编程的基础,它...

Global site tag (gtag.js) - Google Analytics