所謂條件編譯,就是程序中的某部分是否被編譯,取決于某個(gè)條件成立與否。一種常見(jiàn)的方法是排除調(diào)試輸出語(yǔ)句。一旦程序正常運(yùn)行,開(kāi)發(fā)人員就會(huì)刪除這些語(yǔ)句,以使程序更為簡(jiǎn)潔或運(yùn)行效率更高。雖然java缺乏顯示的條件編譯,但它有一種隱式的條件編譯。
所有的java編譯器都必須進(jìn)行流程分析,考試大提示: 以確保:變量必須先賦值,才能被引用;所有帶返回值的函數(shù)必須提供返回值等。如果編譯器發(fā)現(xiàn)了某個(gè)值為false的語(yǔ)句,編譯器將不對(duì)條件覆蓋的代碼段生成字節(jié)碼。因此,根據(jù)java編譯器的優(yōu)化和布爾常量(final boolean)的機(jī)制,java也能夠提供條件編譯。
在C里面,有一個(gè)關(guān)鍵字_inline,它告訴編譯器,不需要調(diào)用這個(gè)函數(shù)(或方法)。當(dāng)C編譯器生成機(jī)器代碼時(shí),調(diào)用_inline函數(shù)將直接被實(shí)際的方法體現(xiàn)代替,而不必進(jìn)行將參數(shù)壓入堆棧、獲取控制、得到參數(shù)以及返回值等一系列調(diào)用函數(shù)的過(guò)程,在java中,final方法就相當(dāng)于C的內(nèi)聯(lián)函數(shù),這也是編譯器優(yōu)化的一個(gè)策略。
所有的java編譯器都必須進(jìn)行流程分析,考試大提示: 以確保:變量必須先賦值,才能被引用;所有帶返回值的函數(shù)必須提供返回值等。如果編譯器發(fā)現(xiàn)了某個(gè)值為false的語(yǔ)句,編譯器將不對(duì)條件覆蓋的代碼段生成字節(jié)碼。因此,根據(jù)java編譯器的優(yōu)化和布爾常量(final boolean)的機(jī)制,java也能夠提供條件編譯。
在C里面,有一個(gè)關(guān)鍵字_inline,它告訴編譯器,不需要調(diào)用這個(gè)函數(shù)(或方法)。當(dāng)C編譯器生成機(jī)器代碼時(shí),調(diào)用_inline函數(shù)將直接被實(shí)際的方法體現(xiàn)代替,而不必進(jìn)行將參數(shù)壓入堆棧、獲取控制、得到參數(shù)以及返回值等一系列調(diào)用函數(shù)的過(guò)程,在java中,final方法就相當(dāng)于C的內(nèi)聯(lián)函數(shù),這也是編譯器優(yōu)化的一個(gè)策略。