自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從思路開始 Java如何實(shí)現(xiàn)條件編譯

開發(fā) 后端
條件編譯絕對(duì)是一個(gè)好東西。如在C或CPP中,可以通過預(yù)處理語句來實(shí)現(xiàn)條件編譯。但是在JAVA中卻沒有預(yù)處理,宏定義這些東西,而有時(shí)在一些項(xiàng)目中,我們又需要條件編譯。那么,在JAVA中,該如何實(shí)現(xiàn)條件編譯呢?

條件編譯絕對(duì)是一個(gè)好東西。如在C或CPP中,可以通過預(yù)處理語句來實(shí)現(xiàn)條件編譯。代碼如下:

  1. #IFDEF DEBUG 
  2. #UNDEF DEBUG 
  3. #ENDIF 
  4. #define DEBUG 
  5. #IFDEF DEBUUG 
  6.   /* 
  7.    code block 1 
  8.    */ 
  9. #ELSE 
  10.   /* 
  11.    code block 2 
  12.   */ 
  13. #ENDIF 

但是在JAVA中卻沒有預(yù)處理,宏定義這些東西,而有時(shí)在一些項(xiàng)目中,我們又需要條件編譯。那么,在JAVA中,該如何實(shí)現(xiàn)條件編譯呢?

我們來看一個(gè)例子。

編寫一個(gè)helloworld程序。代碼如下:

  1. public class Hello { 
  2.     public static void main(String[] args) { 
  3.         System.out.println("Hello, world!"); 
  4.     } 

保存為Hello.java并編譯,得到一個(gè)class文件,并且觀察到文件大小是417字節(jié)。然后我們對(duì)這個(gè)文件進(jìn)行反編譯,用jd-gui。得到代碼如下:

  1. import java.io.PrintStream; 
  2. public class Hello 
  3.   public static void main(String[] paramArrayOfString) 
  4.   { 
  5.     System.out.println("Hello, world!"); 
  6.   } 

得到這個(gè)有什么用呢?

現(xiàn)在我們?cè)賮韺?duì)源代碼進(jìn)行修改,修改后的代碼如下。

  1. public class Hello { 
  2.     public static void main(String[] args) { 
  3.         if(false) { 
  4.             System.out.println("Hello, world!"); 
  5.         } 
  6.     } 

進(jìn)行編譯,這時(shí)我們?cè)倏此拇笮?,只?55字節(jié)。怎樣?想到什么了吧?沒錯(cuò),編譯器會(huì)對(duì)代碼進(jìn)行優(yōu)化,對(duì)于條件永遠(yuǎn)為false的語句,JAVA編譯器將不會(huì)對(duì)其生成字節(jié)碼。下面我們?cè)賮韺?duì)該class文件進(jìn)行反編譯,果然代碼如下:

  1. public class Hello 
  2.   public static void main(String[] paramArrayOfString) 
  3.   { 
  4.   } 

利用JAVA編譯的這一優(yōu)化機(jī)制,我們就可以實(shí)現(xiàn)JAVA的條件編譯了。

  1. public class Hello { 
  2.     public static void main(String[] args) { 
  3.         if(false) { 
  4.             System.out.println("Hello, world!"); 
  5.         } 
  6.     } 

定義一個(gè)final的變量,然后再在if語句中使用。代碼如下:

  1. public class Hello { 
  2.     public static void main(String[] args) { 
  3.         final boolean DEBUG = true
  4.         if(DEBUG) { 
  5.             System.out.println("Hello, world!"); 
  6.         } 
  7.     } 

當(dāng)條件編譯使用得多時(shí),上面將極不利于代碼的修改及維護(hù),這時(shí)就可以用一種更為靈活的方法。定義一個(gè)靜態(tài)類,里面專門定義用來控制條件編譯的變量。然后再在具體的代碼中導(dǎo)入該類,使用這些final變量。代碼如下:

  1. public class DebugConfig { 
  2.     public static final boolean BLUETOOTH_DEBUG = false
  3.     public static final boolean WIRELESS_DEBUG = false
  1. if ( DebugConfig.BLUETOOTH_DEBUG) { 
  2.     // TODO 

原文鏈接:http://msdxblog.sinaapp.com/?p=57

【編輯推薦】

  1. Java七步創(chuàng)建以JDBC連接數(shù)據(jù)庫的程序
  2. 面試Java前必須了解的10個(gè)概念
  3. Java應(yīng)用服務(wù)器 Eclipse Virgo 3.0.2發(fā)布
  4. Java中關(guān)于OOM的場(chǎng)景及解決方法
  5. Java NIO之選擇就緒模式
責(zé)任編輯:林師授 來源: Geek_Soledad的博客
相關(guān)推薦

2012-11-27 10:14:01

.net條件編譯

2023-03-29 08:52:58

視覺Vue組件庫

2020-09-21 07:00:42

Java內(nèi)部類接口

2022-08-31 14:24:03

數(shù)字化轉(zhuǎn)型小程序平臺(tái)

2024-06-07 09:13:23

2022-06-02 09:14:14

GNOME源碼編譯Linux 發(fā)行版

2009-07-08 18:28:57

惠普刀片刀片服務(wù)器

2021-06-30 13:45:49

SQL數(shù)據(jù)庫LSM

2021-06-28 16:05:19

數(shù)據(jù)庫代碼技術(shù)

2019-02-22 21:26:05

2013-05-23 10:10:53

PHP5.5PHP編譯php

2019-01-29 14:29:03

微服務(wù)路由

2015-09-14 09:05:49

Linux 終端Eclipse Jav

2016-08-05 14:48:00

javascripthtml前端

2023-05-23 08:01:10

Netty網(wǎng)絡(luò)通信

2011-12-03 11:04:21

SSL VPN移動(dòng)設(shè)備

2019-07-02 16:57:20

混合云技術(shù)Linux

2009-06-03 15:14:04

SOA應(yīng)用耦合

2009-08-14 00:30:09

C#條件編譯指令

2021-10-09 09:13:08

物聯(lián)網(wǎng)生態(tài)系統(tǒng)物聯(lián)網(wǎng)IoT
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)