背景
在編寫代碼的時(shí)候,我們常常需要加入一些代碼來輸出日志,從而達(dá)到調(diào)試的目的。但是,當(dāng)程序基本編寫完成的時(shí)候,我們就會(huì)糾結(jié)于究竟要不要去掉那些用于輸出日志的無用代碼。
- 去掉的話,又擔(dān)心當(dāng)程序出問題的時(shí)候,又要重新加入那些代碼來調(diào)試,而且刪除輸出日志的代碼也不是一件輕松的事情。
- 不去掉的話,那些輸出日志的代碼在程序沒出問題的情況下又會(huì)顯得有點(diǎn)多余。
控制日志輸出
我們可以通過使用控制語句來控制日志輸出,下面的代碼分別使用布爾型常量和布爾型變量來控制日志輸出:

Main.java
那么使用布爾型常量和布爾型變量控制日志輸出有什么區(qū)別呢?
于是,我就去查看Main.java編譯生成的字節(jié)碼(進(jìn)行反編譯處理之后的字節(jié)碼),如下圖:

Main.class
將編譯生成的字節(jié)碼和源碼進(jìn)行對(duì)比,你會(huì)發(fā)現(xiàn)由于DEBUG常量的值為true,也就是說第11行else語句塊永遠(yuǎn)都不會(huì)執(zhí)行,因此Java編譯器就將它忽略掉,最終第9-13行的java代碼編譯生成第16行的字節(jié)碼。
總結(jié)
從上面的分析,我們可以得出以下結(jié)論:
- Java編譯器在將java代碼編譯成java字節(jié)碼的時(shí)候,會(huì)忽略掉那些永遠(yuǎn)都不可能執(zhí)行的代碼。
- 盡量使用靜態(tài)布爾型常量來控制日志輸出。