![](/img/trans.png)
[英]Is the constructor for an object invoked after object creation on heap (Java)?
[英]Does object in java created on heap before Constructor is invoked?
當從基類的構造函數調用重寫方法時,也根據運行時多態性概念調用子類中定義的方法。 我想知道如何在JVM中處理這個問題,當控件在基類構造函數中時,子類的構造函數尚未被調用,因此Object尚未完全構造。
我理解從基類構造函數調用override方法的不良影響,但只是希望了解如何使其成為可能。
我覺得堆中的對象是在調用構造函數之前創建的,並且在調用構造函數時會初始化屬性。 請為上述內容提供寶貴的意見。
以下是演示相同的代碼。
Base.java
public class Base {
public Base() {
System.out.println("Base constructor is executing...");
someMethod();
}
public void someMethod() {
System.out.println("someMethod defined in Base class executing...");
}
}
Sub.java
public class Sub extends Base{
public Sub() {
System.out.println("Sub constructor is executing...");
}
@Override
public void someMethod() {
System.out.println("someMethod defined in Sub class executing...");
}
}
Client.java
public class Client {
public static void main(String[] args) {
Sub obj = new Sub();
}
}
控制台上的輸出是
基礎構造函數正在執行...
someMethod在Sub類中執行...
子構造函數正在執行...
是否在調用Constructor之前創建了java中的對象?
是的,否則您將無法初始化對象。
在字節代碼級別,首先創建對象,然后調用構造函數,傳入對象以進行初始化。 構造函數的內部名稱是<init>
,它的返回類型總是為void
這意味着它不返回對象,只是初始化它。
注意: Unsafe.allocateInstance
將在不調用構造函數的情況下創建對象,並且對反序列化很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.