A. 關於java繼承中初始化的執行順序
成員變數是在對象實例化之前執行,
針對c類的話,c()是無參數的構造方法,作用來實例化c類的對象,但是b是他的成員變數,只不過類型是B類.
對象的初始化的過程順序,在執行無參構造方法之前先要初始化成員變數
B. Java類的實例化順序是什麼樣的Java線程同步的方式有哪些
引言:java是在1990年初 ,被詹姆斯•高斯林等人開發的一門面向對象的編程語言。起初,java被稱為0ak,來經過發展0ak改名為java,與1995年的五月份正式向大家發布。
java的實例化順序在繼承沒有的情況
單獨一個類的場景下,初始化順序為依次為靜態數據,繼承的基類的構造函數,成員變數,被調用的構造函數。
其中靜態數據只會初始化一次。(靜態數據包括靜態代碼塊和靜態變數,每個類的靜態數據只會初始化一次)
在繼承的情況下
添加兩個基類,讓繼承父親,父親繼承祖父。
繼承的情況就比較復雜了。由繼承了基類,還將往上回溯,遞歸地調用基類的無參構造方法。
在我們的例子中,在初始化靜態數據後,會先往上追溯,調用父的默認構造方法,此時再往上追溯到爺爺的默認構造方法。
無論是java還是什麼別的東西他都體現了現代社會與信息技術的不斷發展,人們在進行進行技術開發時也有了越來越多的方法。程序類的工作也有了更為快捷的方法,這為信息技術的發展也提供了更好的發展方法
C. Java 構造方法初始化順序
初始化子類,調用子類有參的時候默認情況下也是先去調用父類的無參構造,除非你在子類的構造方法中使用super來指明調用父類中的哪個構造方法。
D. java類的初始化順序問題,求高手解答。
你好:
1、類只有在使用New調用創建的時候才會被JAVA類裝載器裝入
2、JAVA類首次裝入時,會對靜態成員變數或方法進行一次初始化
3、創建類實例時,首先按照父子繼承關系進行初始化
4、類實例創建時候,首先初始化塊部分先執行,然後是構造方法;然後從本類繼承的子類的初始化塊執行,最後是子類的構造方法
所以這道題的運行結果是:
子類變數初始化
父類Test3構造
子類print變數:0
子類變數初始化
子類test4構造
父類print變數:25
E. 關於JAVA初始化及初始化順序的問題,謝謝~~
問題1:
在Java中,類裝載器把一個類裝入Java虛擬機中,要經過三個步驟來完成:裝載、鏈接和初始化,其中鏈接又可以分成校驗、准備和解析三步,除了解析外,其它步驟是嚴格按照順序完成的,各個步驟的主要工作如下:
裝載:查找和導入類或介面的二進制數據;
鏈接:執行下面的校驗、准備和解析步驟,其中解析步驟是可以選擇的;
校驗:檢查導入類或介面的二進制數據的正確性;
//下面這句話很重要
准備:給類的靜態變數分配並初始化存儲空間;
解析:將符號引用轉成直接引用;
初始化:激活類的靜態變數的初始化Java代碼和靜態Java代碼塊。
初始化類中屬性是靜態代碼塊的常用用途,但只能使用一次。
在你補充的例子中,該類沒有被實例化,也就是未被運行,只是被分配了內存空間
問題2:在實例化Insect()時,列印j,此時系統找不到變數j,因為j不是全局變數,而是局部變數,而且定義在後面。
如果改為
Insect(){
int j=39;
System.out.println("i = "+i+", j = "+j);
}
就可以了
變數放在方法外面為該類的全部變數,在所有方法中可用
在方法內定義的變數只能在該方法中使用,而且必須先定義後使用。
F. java 中的繼承的初始化順序 是什麼意思
//初始化是在堆內存中為Java對象分配內存;比如Object object;和Object object= new Object();前一個僅僅是聲明了一個對象,在棧內存有個區域存object,沒有指向任何一塊堆內存的內容,這種出現異常就是空指針,第二個就在棧內存和堆內存都有內容
super();//調用父類的構造方法,目的是為了在子類初始化的開始階段獲取到父類的屬性和方法
//這里子類只能調用父類的無參構造,從super();這里就能看出來,括弧里沒參數,所以設計類的時候,如果打算讓別的類繼承就提供一個無參構造讓繼承它的子類調用
G. Java的靜態塊和初始化塊分別何時執行有什麼區別
靜態初始化塊:當類第一次載入時執行。
非靜態初始化塊:非靜態初始化塊會在構造函數執行時,且在構造函數主體代碼執行之前被執行。
區別如下:
1、執行次數不同
靜態塊只執行一次,初始化塊可以執行多次。
2、作用不同
靜態初始化塊僅能初始化類變數,即static修飾的數據成員。
非靜態初始化塊可以初始化類的實例變數。
(7)java類初始化順序擴展閱讀:
使用Java靜態代碼塊注意事項:
1、它是隨著類的載入而執行,只執行一次,並優先於主函數。具體說,靜態代碼塊是由類調用的。類調用時,先執行靜態代碼塊,然後才執行主函數的。
2、靜態代碼塊其實就是給類初始化的,而構造代碼塊是給對象初始化的。
3、靜態代碼塊中的變數是局部變數,與普通函數中的局部變數性質沒有區別。
4、一個類中可以有多個靜態代碼塊。
5、對於靜態變數、靜態初始化塊、變數、初始化塊、構造器,它們的初始化順序依次是(靜態變數、靜態初始化塊)>(變數、初始化塊)>構造器。
H. java中面向對象中的類的初始化調用順序是什麼
對象的初始化順序:
(1)載入父類(以下序號相同,表明初始化是按代碼從上到下的順序來的)
1.為父類的靜態屬性分配空間並賦於初值
1.執行父類靜態初始化塊;
(2)載入子類
2.為子類的靜態屬性分配空間並賦於初值
2.執行子類的靜態的內容;
(3)載入父類構造器
3.初始化父類的非靜態屬性並賦於初值
3.執行父類的非靜態代碼塊;
4.執行父類的構造方法;
(4)載入子類構造器
5.初始化子類的非靜態屬性並賦於初值
5.執行子類的非靜態代碼塊;
6.執行子類的構造方法.
總之一句話,靜態代碼塊內容先執行(父先後子),接著執行父類非靜態代碼塊和構造方法,然後執行子類非靜態代碼塊和構造方法。
I. Java:類成員的初始化順序 類載入 疑問(如圖)
一段程序的完整執行過程是先編譯,然後載入到jvm,然後初始化,然後你才能使用(當然中間還有需要細節)。初始化是執行類構造器方法的過程,類構造器方法是由編譯器自動收集類中的所有類變數的賦值動作和靜態語句塊中的語句合並產生的(不是類的構造方法)。所以,簡而言之,一個類在初始化的時候,會先執行它的靜態代碼塊,當然,如果這個類有父類的話,同樣的道理,如果發現該父類沒有初始化,則需要先對其父類進行初始化,再對該類進行初始化。
至於一個類在什麼時候初始化,簡單的說,當程序第一次用到這個類時候就會對其進行初始化(前提是其沒有進行過初始化)。
J. 大大們可以描述下,java的對象和變數初始化時的執行順序嗎
public class TestDG {
public static void main(String[] args){
new B();
System.out.println("========================再來一次==========");
new B();
}
}
class A{
static{
System.out.println("我是老爸靜態初始化塊,我第1");
}
{
System.out.println("我是初始化塊,我第3");
}
A(){
System.out.println("我是老爸構造器,我第4");
}
}
class B extends A{
static{
System.out.println("我是兒子靜態初始化塊,我第2");
}
{
System.out.println("我是兒子初始化塊,我第5");
}
B(){
System.out.println("我是兒子構造器,我第6");
}
}