回覆列表
-
1 # 此生唯一
-
2 # 紅綠燈變
就看字面都不應該去比較它們有什麼區別,而應該看它們發生什麼動作、什麼時候發生、發生的次序是什麼。就好比一個class編譯後,在new的時候才開始建立物件,而同時類載入,這個時候有了類的初始化、物件的初始化,而這個過程就是一個物件例項化的過程。不對請指正。
-
3 # 果羽寶寶6
例項化:通常我們說的new一個物件,例如Student stu = new Student(),這就是例項化。初始化:在例項化基礎上,對物件中的值初始化,也就是賦初始值。簡單點來講說就是預設值,防止空資料造成異常。
-
4 # IT全棧工程師
一個Java物件的建立過程往往包括 類初始化 和 類例項化 兩個階段。
在Java中,物件被呼叫之前,必須要先進行初始化。java虛擬機器,即JVM會檢查記憶體中是否已經載入並初始化。如果沒有初始化,jvm會立即載入並呼叫類構造器完成該類的初始化操作。初始化完成時,再進行初始化,也就是說,初始化時建立例項的前提。
除此之外,我們還可以使用反射機制(Class類的newInstance方法、使用Constructor類的newInstance方法)、使用Clone方法、使用反序列化等方式建立物件。
我們最常用的就是透過new關鍵字建立物件,即透過建構函式建立物件。
例如:
Cat cat = new Cat();
當使用了建構函式,並且new 建構函式(),那麼就後臺執行了new Object();
將建構函式的作用域給新物件,(即new Object()創建出的物件),而函式體內的this 就代表new Object()出來的物件。
執行建構函式內的程式碼;
返回新物件(後臺直接返回)。
這個問題,JAVA老鳥應該都知道!
編譯:JAVA是一個編譯加解釋的語言,在你寫完原始碼的時候檔案型別為.java,然後編譯器開始進行編譯,將你原始碼中的類(修飾詞,類名等),方法(修飾詞,方法名,含有變數等),在加入魔數(JAVA位元組碼檔案標誌),jdk版本資訊等之後一塊編譯為位元組碼檔案(.class)檔案!
執行:
如果類有被引用,類載入器(可以自定義)會把class中的類和其中的方法,變數等載入到記憶體中,經過驗證(class檔案驗證),準備,解析(轉變引用型別,靜態變數分配預設值等)
等到new的時候,反射類,初始化子類等的時候開始初始化(為變數等賦上預設值)!作為J例項化物件,等待使用!
在這個過程中物件的引用,物件本身,靜態變數,會分別放在棧(虛擬棧,本地方法棧等),堆,方法區等!
所以建立物件就是說,把一個類變為一個執行期可以使用的一個物件,同時分配記憶體等過程,而初始化則是為建立物件的時候的方法,變數賦值的過程,兩者截然不同!
深入理解jvm這本書寫的不錯,推薦看下!可以說這些東西是面試必問點了!
如果你在學習,使用JAVA過程中有任何問題,可以隨時私聊我,我們一塊交流,我知無不答!