[英]What exactly happens during object creation? (Java)
我一直在學習Head First Java ,目前正在學習構造函數章節。 他們已經解釋過,通過在new
關鍵字之后調用構造函數來創建對象。
我的問題:創建新對象時運行的到底是什么?
讓我們將以下內容作為示例代碼:
public class Const {
// instance variables
int number;
String name;
// Constructors
public Const() {
//implicit super
System.out.println("no-arg constructor");
}
public Const(int i, String s) {
//implicit super()
number = i;
name = s;
System.out.println("two-arg constructor");
}
// test method
public void doSomething() {
System.out.println("I'm a test");
}
// Main
public static void main(String[] args) {
Const c1 = new Const();
Const c2 = new Const(5, "Jerry");
}
}
現在這是我認為在創建c1
時正在發生的事情:
public Const()
被調用super()
被調用Object
部分。public Const()
回到棧頂。在對象創建過程中到底發生了什么? (爪哇)
所以這里唯一的區別是:
Const c1 = new Const();
這里 number 將被初始化為 int 默認值0和 name 將被初始化為null ,這是 String 的默認值
Const c2 = new Const(5, "Jerry");
相反,這里將分別是 5 和 Jerry
使用new Const() ,將調用構造函數並將類加載到主內存中。
public Const() {
//implicit super
super()
}
java中的super關鍵字是一個引用變量,用於引用父類對象,默認為Object類。 關鍵字“super”帶着繼承的概念出現了。
所以現在它可以訪問 Object 類的所有成員,即 toString, equals :
你可以訪問
c1.toString() or c1.equals(obj)
對象的實例變量和方法是何時以及如何創建的(添加了哪些隱式代碼)?
我想現在你明白了實例變量是如何創建的,默認值是根據類型分配給它們的。
如果仍然不清楚,請嘗試了解內部拱門,這可能會有所幫助:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.