先于对象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有所信息上的积累.
又想起来鲁迅的那句话:"人类的...前行的历史,正如煤的形成,当时用大量的木材,结果却只是一小块,但...是不在其中的,更何况是徒手...".
呵呵....
分享到:
相关推荐
在C或C++中调用JAVA方法是一种常见的跨语言交互技术,主要依赖于Java Native Interface (JNI)。JNI是Java平台的一部分,它允许Java代码和其他语言编写的代码进行交互,从而实现混合编程。JNI提供了丰富的API,使得...
对于父类方法,你需要先获取父类的`jclass`,然后按照同样的方式寻找并调用方法。例如,如果`YourJavaClass`继承自`ParentClass`,可以这样调用父类的`someMethod`: ```c++ jclass parentClass = env->FindClass(...
在`Child`类的`display`方法中,我们先执行子类特有的行为,然后通过`super().display()`调用了父类的`display`方法,这使得子类可以保持父类的显示逻辑。 此外,除了`super()`,还可以直接通过类名来调用父类的...
1. 初始化编辑器:`tinyMCE.init()` 是启动tinyMCE编辑器的关键步骤,需要传入一个配置对象,该对象包含了编辑器的各种设置,如宽度、高度、语言、工具栏选项等。例如: ```javascript tinyMCE.init({ selector: ...
类方法通过`@classmethod`装饰器进行定义,使得它们可以直接通过类调用,而不需要先创建类的实例。 首先,类方法的主要用途之一是处理类级别的数据,如上面例子中的`Person`类。类变量`count`被用来记录创建的`...
而在Applet中,可以使用`getScriptEngine()`方法获取JavaScript引擎,从而调用JS函数。 让我们深入到例子中,假设我们有一个名为"AppletExample.jar"的Applet,它包含一个名为`MyApplet`的类,这个Applet需要与页面...
`__init__`方法用于初始化新创建的对象,`speak`方法则定义了动物如何发出声音。 2. **类的实例化**: 创建类的实例(对象)使用类名后跟括号,如`cat=Animal('cat','喵喵')`。这会调用`__init__`方法,并将参数...
在使用zeromq进行任何操作之前,比如创建socket、绑定或连接地址等,都必须先调用`zmq_init`。这个函数的主要功能是为zeromq库创建一个上下文对象,该对象管理着zeromq的所有资源,包括线程池、内存分配和I/O多路...
当一个类实例化时,其构造函数(在Java中是`构造器`,在Python中是`__init__`方法)会被调用。在涉及继承的情况下,这个过程遵循一定的规则。 1. **初始化父类**: - 在子类创建实例时,首先会执行父类的构造函数...
对于动态加载COM组件,你可以先使用`LoadLibrary`加载库,然后通过`GetProcAddress`获取`DllGetClassObject`函数地址,再调用该函数创建对象。这种方式适用于运行时决定要使用的COM组件。 ```cpp HINSTANCE hLib = ...
5. **构造函数调用**:最后执行对象的构造函数`<init>`,完成对象的初始化。 #### 三、对象的内存布局 对象在内存中的布局可以分为三个主要部分: 1. **对象头(Header)**:包含对象的运行时数据,如哈希码、GC分代...
这些题目主要涉及Python编程语言中的面向对象编程概念,包括类的定义、对象的创建、属性与方法的使用、初始化方法`__init__`、析构方法`__del__`、继承以及方法的调用。下面将对每个题目进行详细解释。 1. 题目要求...
通过观察运行输出,我们可以看到全局对象的构造函数确实先于`main()`函数被调用,而析构函数则在`main()`函数结束后调用。此外,`func_before_main`和`func_after_main`也按照预期在`main()`函数前后被调用,证明了...
当创建派生类的对象时,会先调用基类的`__init__`,然后执行派生类的`__init__`。这通常通过在派生类的`__init__`中调用`super().__init__(...)`来实现,以确保基类的初始化。 3. **方法覆盖(Method Overriding)*...
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别...
init 函数是在类的其他方法被调用之前必先调用的函数,相当于 C++的构造函数。free 函数是在驱动最后销毁对象之前调用的函数,相当于 C++的析构函数。probe 函数是在匹配期间调用的函数,驱动程序此时会检查硬件设备...
通过`init`方法将资源库元数据应用到资源库对象上。 ```java repository.init(kettleDatabaseMeta); ``` ##### 5. 连接资源库 完成上述步骤后,可以使用`connect`方法连接到资源库。 ```java repository.connect...
在编写 Pygame 应用时,通常先调用 `pygame.init()` 初始化所有模块,然后创建窗口,处理事件,绘制图形,最后在主循环中调用 `pygame.display.flip()` 或 `pygame.display.update()` 更新屏幕。当程序结束时,调用 ...
此外lazy="true"说明地返回整个Tfile对象时,并不返回fileContent这个字段的数据,只有在显式调用tfile.getFileContent()方法时才真正从数据库中获取fileContent的数据。这是Hibernate3引入的新特性,对于包含重量...
这个类的设计遵循了面向对象编程的原则,其中包含了构造函数`__init__`以及一个类方法`del_date`。接下来,我们将详细探讨这些概念以及它们在实际应用中的作用。 1. **类的定义**: 类是面向对象编程的基础,它...