java 仿c/c++ 中#define #ifdef 的功能做Debug(转载)

转载自:http://livehappy.iteye.com/blog/865277

C代码

#define DEBUG

调试完成后只需将这个define命令行删除即可。有人可能觉得不用条件编译也可达此目的,即在调试时加一批printf语句,调试后一一将printf语句删除去。的确,这是可以的。但是,当调试时加的printf语句比较多时,修改的工作量是很大的。用条件编译,则不必一一删改printf语句,只需删除前面的一条“#define DEBUG”命令即可,这时所有的用DEBUG作标识符的条件编译段都使其中的printf语句不起作用,即起统一控制的作用,如同一个“开关”一样。
        Java这种常用在大型案例的语言沒有类似的功能,不过要模仿#ifdef的功能是可以的。简单说,Java 编译器为了最佳化,只要发现条件式的值为false,编译时就会把该区段代码忽略。所以只要定有一个 public final boolean 变量就可以了。例如:

新建一个package ,比如: com.foo.debug

建立一个debug.java

1 package com.foo.debug;
2
3 public interface Debug
4     {
5 //        public final boolean ENABLE = false;
6         public final boolean ENABLE = true;
7     }

在其他java中引用即可

1 //import Debug
2 import com.foo.debug.Debug;
3
4 //....
5 if(Debug.ENABLE) {
6    Log.d("HelloWorld_activity", "Toast \"HI\"");
7 }
8 //....
时间: 2024-08-04 04:29:09

java 仿c/c++ 中#define #ifdef 的功能做Debug(转载)的相关文章

C++中#define,#ifdef和#endif的作用

今天发现一个好用的东西,自己在编写code时经常需要测试,但是每次呢测试的代码写了删删了写.很麻烦,运行也不美观.希望运行时不再显示之前测试好的代码,那边的测试代码就得全部注释或者删除再编译: 今天无意发现这个#define,#ifdef 和#endif 有这么个作用! 举例如下: /************************************************************************* > File Name: main.cpp > Author:

java如何在网站中接入qq登录功能

其实接入qq登录还是很简单的,但是你既然要做qq登录肯定你得网站要能够在外网访问的到, 因为qq在对你得网站授权之间会进行人工检查,检查你得图标摆放位置合不合理,网站是否违法等内容. 当你的网站能够在外网访问的时候 我们在qq开发者网站中申请网站的授权 用你的qq登录这个网站 http://connect.qq.com/ 在管理中心创建你的应用 创建应用的时候需要你填写一些网站的基本信息 如访问网址.登录成功后回调地址(也就是你处理登录请求的action) 腾讯会在request中封装qq验证后

【转】C++中#if #ifdef 的作用

一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是"条件 编译".有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句. 条件编译命令最常见的形式为: /////////#ifdef 标识符 程序段1 #else 程序段2 #endif 它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2. 其中#else部分也可以没有,即

C++中#define用法

http://blog.sina.com.cn/s/blog_686188ef0100klku.html #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利.1 #define命令剖析1.1 #define的概念#define命令是C语言中

java异常——RuntimeException和User Define Exception

1.RuntimeException public class RuntimeException { public static void main(String[] args) { // TODO Auto-generated method stub String str="123"; int temp=Integer.parseInt(str); System.out.println(temp*temp); } } 查看parseInt方法的源代码如下: public static

C/C++预处理指令#define,#ifdef,#ifndef,#endif… (转)

本文转自博文C/C++预处理指令#define,#ifdef,#ifndef,#endif….这篇博文写得特别好,特转载. 本文主要记录了C/C++预处理指令,常见的预处理指令如下: #空指令,无任何效果 #include包含一个源代码文件 #define定义宏 #undef取消已定义的宏 #if如果给定条件为真,则编译下面代码 #ifdef如果宏已经定义,则编译下面代码 #ifndef如果宏没有定义,则编译下面代码 #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #en

Java如何取源文件中文件名和行号

package com.github.jdk; /**  * Java如何取源文件中文件名和行号  *   * {@code StackTraceElement}的定义详见文档  *   * @author doctor  *  * @time 2015年3月13日 上午9:16:16  */ public class StackTraceElementPractice { public static void main(String[] args) { StackTraceElement[] 

MVC模式在Java Web应用程序中的实例分析

MVC作为软件架构中及其重要的一种架构思想,在实际的java web项目开发中被开发者们广泛的应用.遵循MVC思想的所产生的解决方法也可以因实际情况的不同来进行不同的选择.这里以一个应用struts+hibernate+jsp的实例来进一步认识MVC. 学生管理系统中添加学生模块的的MVC架构: Model(系统的业务逻辑):Hibernate进行管理的数据实体+定义的业务逻辑的体现--------数据库操作类,也就是通常所说的Dao层 数据实体(PO,Entity): package PO;

java为什么非静态内部类中不能有static修饰的属性,但却可以有常量?

如:public class InnerClassDemo{int x;class A{static int a = 0;//这样写是不合法的.static final int b=0;//这样写是合法的 }} java类加载顺序,首先加载类,执行static变量初始化,接下来执行对象的创建,如果我们要执行代码中的变量int a 初始化,那么必须先执行加载外部类,再加载内部类,最后初始化静态变量 a ,问题就出在加载内部类上面,我们可以把内部类看成外部类的非静态成员,它的初始化必须在外部类对象创