Java中并没有C语言里的“条件编译”特性。这种特性在C语言里是用来解决代码的跨平台问题的,可以通过让代码的不同部分根据其运行的具体平台进行编译。由于Java本身就设计为一种跨平台的语言,因此这种特性就没有存在的必要了。

但是条件编译对于代码的调试来说还是很有用处的。就像我们在C语言中学到的一样,可以通过一些条件编译的开关来使得一些调试代码只在开发过程中使用,而在发布的版本中则不会编译进去。

我们可以利用Java的package来模仿条件编译的概念,从而可以用于java代码的调试开发。

代码如下所示:

代码

package com.vista.debug

public class Assert
{
    private static void printErr(String msg)
    {
        System.err.println(msg);
    }
    public final static void isTrue(boolean exp)
    {
        if (!exp) printErr("Assertion failed");
    }
    public final static void isFalse(boolean exp)
    {
        if (exp) printErr("Assertion failed");
    }
    public final static void isTrue(boolean exp,String msg)
    {
        if (!exp) printErr("Assertion failed" + msg);
    }
    public final static void isFalse(boolean exp,String msg)
    {
        if (!exp) printErr("Assertion failed" + msg);
    }
}

如果想在我们的代码中使用这个断言类进行调试,只需要引入下述package:

import com.vista.debug.*;

当我们准备编译发行版本时就需要清除掉原来引入的断言机制,为此我们只需要在了一个不同的package中创建一个同样名为Assert的类,代码如下:

代码

package com.vista.release

public class Assert
{
    private static void printErr(String msg){}
    public final static void isTrue(boolean exp){}
    public final static void isFalse(boolean exp){}
    public final static void isTrue(boolean exp,String msg){}
    public final static void isFalse(boolean exp,String msg){}
}

再将前面的import语句修改如下:

import com.vista.release.*;

这样断言机制就从我们的代码中去除掉了。

Java中利用package机制实现条件编译相关推荐

  1. Java中 利用继承的思想实现动物的分类,将动物分为水生动物和陆生动物,有其动物的属性和特征,又有其属性和特征,编程模拟。

    Java中 利用继承的思想实现动物的分类,将动物分为水生动物和陆生动物,有其动物的属性和特征,又有其属性和特征,编程模拟. 前言 动物在拥有自己本身所具有的特征的同时,还应该具有所在大类所具有的动物特 ...

  2. c#获取对象的唯一标识_在 Java 中利用 redis 实现分布式全局唯一标识服务

    作者: 杨高超 juejin.im/post/5a4984265188252b145b643e 获取全局唯一标识的方法介绍 在一个IT系统中,获取一个对象的唯一标识符是一个普遍的需求.在以前的单体应用 ...

  3. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

  4. Java中利用socket实现简单的服务端与客户端的通信(中级)——实现任意双向通信

    本文计划采用socket实现客户端和服务端的任意双向通信,即客户端可以随时给服务端发消息,服务端也可以随时给客户端发消息,最终结果就是一个类似与QQ的聊天软件的功能. 以下代码可以直接拷贝到Eclip ...

  5. Java中利用socket实现简单的服务端与客户端的通信(基础级)

    在上一篇文章中,简单的介绍了java中入门级的socket编程,简单的实现了客户端像服务器端发送数据,服务器端将数据接收并显示在控制台,没有涉及多线程.上一篇文章的链接:Java中利用socket实现 ...

  6. java classpath import package 机制 @Java的ClassPath, Package和Jar

    java classpath import package 机制 從一個簡單的例子談談package與import機制 基本原則:為什麼需要將Java文件和類文件切實安置到其所歸屬之Package所對 ...

  7. JAVA中利用DOM解析XML文档

    JAVA中利用DOM解析XML文档 package org.sws.utils; import java.io.File;import java.io.IOException; import java ...

  8. java代码安全检测机制_全面解析:java中的反射机制,内含代码验证解析

    什么是反射? 在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功 ...

  9. 简述java异常机制处理,简述Java中异常处理的机制

    Q1:JAVA中的异常处理机制的原理 Java中的异常处理机制的简单原理和应用 : java中Throwable这个类可以被作为异常抛出的类,继承它的分为异常Exception和错误Error. Ex ...

最新文章

  1. kubernetes,什么鬼?
  2. Linux中look命令,如何在Linux上使用look命令 | MOS86
  3. Python中使用httpx模块详解
  4. linux 串口工具_Zynq下linux系统搭建
  5. python2.7 + numpy-1.6.1 + matplotlib-1.1.0
  6. Go 导入当前项目下的包
  7. jQuery获取HTML标签自定义属性值或data值
  8. Re:从零开始的Spring Session(二)
  9. 爱国者首款手机正式上市 零售价不超2000元
  10. Linux系统运行Windows程序(Linux执行windows程序)
  11. 提升 JavaScript 技能的5个小技巧,新手小白值得学习!
  12. 量子计算机的系统论思考,量子计算机发展带来的思考..doc
  13. ip模拟工具modify headers
  14. 使用Simian进行重复代码检测
  15. JDK开发环境搭建及环境变量配置(win10)
  16. openSUSE 11.2 上试动Mono
  17. 【转】京东抢购服务高并发实践
  18. html页面播放avi视频
  19. Android中的接口的使用举例
  20. Vue3的生命周期的使用

热门文章

  1. 海兰一体计算机参数,海兰幽灵X7电竞一体机怎么样-海兰幽灵X7电竞一体机评测...
  2. 张家口zec挖矿软件哪里下载_电脑小白去哪里下载正规软件?
  3. hbase major_compact 文件会变小吗_图解式学习:可能是最易懂的Hbase架构原理解析(二)...
  4. Java中对查出的数据计数_基础算法7:从数据库某个字段中取出现次数最多的几条数据形成“热门xxx”...
  5. 掌业宝服务器维护升级,奇游联机宝APP焕新升级 主机加速多设备各享最优区服...
  6. 基于密集卷积神经网络的多类植物病害检测与分类
  7. Python中的运算符与表达式
  8. oracle adrci purge,adrci中的purge
  9. arm linux 进程页表,arm-linux内存页表创建
  10. jquery获取php生成的元素,jquery怎么生成元素