您的位置:首页 > 编程语言 > Java开发

Java 条件编译 Conditio…

2013-06-27 16:28 330 查看
根据Java编译器的优化的机制,Java也能够提供条件编译。对于条件设为false的语句,编译器将不对条件覆盖的代码段生成字节码。

不仅可以用简单的boolean常量值来做条件编译,还可以用字符串常量及任何其他类型的常量.

例如:

简单的boolean常量.

1
2
3
4
5
6
final
boolean
isDebug
=
true
;

if
(isDebug)

{

    
//
debug模式状态

    
System.out.println(
"现在是debug模式!"
);

}


字符串常量.

这里要注意的是不能用equals方法,必须用简单的判断符号(==, != ....)

1
2
3
4
5
6
7
final
String debug
=
"true"
;

final
String
currentMode = debug;

if
(currentMode ==
debug)

{

    
//
debug模式状态

    
System.out.println(
"现在是debug模式!"
);

}


其他常量就不设置了

当然我们可以写个CompilationConfig类,里面仅设置所有要用条件编译的选项.

这里我写了个示例,呵呵,记录下以后不要忘记了,也希望能够帮助需要这方向东东的人


ConmpilationCofig.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package
cn.lite3.javaConditionalCompilationTest;

 

public
class
CompilationConfig

{

    
//
配置是否是debug模式, 关键字 final是启用条件编译的关键

    
static

public
final
boolean
isDebug
=
true
;

    
 
    
//
用条件编译来判别不同的平台

    
static

public
final
String
platform1 =
"platfor1"
;

    
static

public
final
String
platform2 =
"platform2"
;

    
 
    
//
当前所用的平台

    
static

public
final
String
currentPlatform = platform1;

}


javaConditionalCompilationTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package
cn.lite3.javaConditionalCompilationTest;

 
//import
cn.lite3.javaConditionalCompilationTest.otherPackage.OtherPackageTest;

 
public
class
ConditionalCompilationTest

{

    
public

ConditionalCompilationTest()

    
{

        
//
用条件编译来去除多余代码

        
//
这里仅仅是输出语句,也可以是其他逻辑代码

final
String debug
=
"true"
;

final
String
currentMode = debug;

if
(currentMode ==
debug)

{

    
//
debug模式状态

    
System.out.println(
"现在是debug模式!"
);

}

        
 
        
//
用条件编译来判别不同的平台

        
//
平台1

        
if
(CompilationConfig.currentPlatform
== CompilationConfig.platform1)

        
{

            
System.out.println(
"这里是平台1的输出!"
);

        
}

        
//
平台2

        
if
(CompilationConfig.currentPlatform
== CompilationConfig.platform2)

        
{

            
System.out.println(
"这里是平台2的输出!"
);

        
}

    
}

 
    
static

public
void
main(String[]
args)

    
{

        
//
实例化两个应用了条件编译,在不同包的类

        
new

ConditionalCompilationTest();

        
//new
OtherPackageTest();

    
}

}


编译后,javaConditionalCompilationTest.class 反编译后为:

看看是不是去掉了平台2的代码呢


如果不知道怎么反编译,请使用Java
反编译工具反编译就行了.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package
cn.lite3.javaConditionalCompilationTest;

 
import
java.io.PrintStream;

 
public
class
ConditionalCompilationTest

{

  
public

ConditionalCompilationTest()

  
{

    
String
debug =
"true"
;

    
String
currentMode =
"true"
;

 
    
System.out.println(
"现在是debug模式!"
);

 
    
System.out.println(
"这里是平台1的输出!"
);

  
}

 
  
public

static
void
main(String[]
args)

  
{

    
new

ConditionalCompilationTest();

  
}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: