首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java中的宏变量,宏替换详解。

群友在微信群讨论的一个话题,有点意思,特拿出来分享一下。 输出true false 来看下面这段程序,和群友分享的大致一样。...首先来理解下宏变量: Java中,一个用final定义的变量,不管它是类型的变量,只要用final定义了并同时指定了初始值,并且这个初始值是在编译时就被确定下来的,那么这个final变量就是一个宏变量。...编译器会把程序所有用到该变量的地方直接替换成该变量的值,也就是说编译器能对宏变量进行宏替换。...final String a = "hello"; final String b = a; final String c = getHello(); a在编译期间就能确定下来,而b、c不行,所以a是宏变量...所以,再回到上面的程序,finalWorld2和finalWorld4是final定义的,也是在编译期间能确定下来的,所以它能被宏替换,编译器就会让finalWorld2和finalWorld4指向字符串池中缓存的字符串

3.8K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【为宏正名】for的妙用你想不到

    在开始本文的内容之前,如果你还没有阅读过前面两篇文章,可以单击下面的链接: 基础必修1:【为宏正名】本应写入教科书的“世界设定” 基础必修2:【为宏正名】什么?我忘了去上“数学必修课”!...应用范例1:【为宏正名】99%人都不知道的"##"里用法 【被低估的价值】 ---- 想必大家对C语言中的 for 循环结构并不陌生。...里虽然可以定义局部变量,但这些变量只能是同一类型的,或者是指向这一类型的指针。...tReader.EndOfStream) { ... } } 以上述代码为例进行讲解: 在 using 圆括号内定义的变量,其生命周期仅覆盖 using 紧随其后的花括号内部...【后记】 ---- 本文的目的,算是对【为宏正名】系列所介绍的知识进行一次示范——告诉大家如何正确的使用宏,配合已有的老的语法结构来“固化”一个新的模板,并以这个模板为起点,理解它的语法意义和用户,简化我们的日常开发

    69820

    dotnet 新项目格式与对应框架预定义的宏

    在 sdk style 的项目格式支持使用多框架开发,此时需要在代码里面通过宏判断,在编译的时候执行不同的代码。...本文告诉大家在框架里面对应的预定义的条件编译符有哪些 在让一个 csproj 项目指定多个开发框架 - walterlv告诉大家如何在 sdk style 项目格式如何定义多框架开发,在使用多框架开发的时候...,有时会使用到特定的平台框架提供的方法,此时就需要使用预定义的宏通过条件判断编译符号的方法,在不同的框架编译不同的代码 例如下面代码根据在不同的平台输出不同的代码 static void Main...所有 .NET Framework 都定义 NETFRAMEWORK 宏,此外对应不同的版本使用不同的宏 NET20 NET35 NET40 NET45 NET451 NET452 NET46 NET461...此外对应不同的版本使用不同的宏 NETCOREAPP1_0 NETCOREAPP1_1 NETCOREAPP2_0 NETCOREAPP2_1 NETCOREAPP2_2 本文说到的宏是古老的词汇,在官方用语里面叫条件编译符

    89740

    【为宏正名】本应写入教科书的“世界设定”

    wTemp,而如果用户插入的代码中也使用了同名的变量,就会产生很多问题:轻则编译错误(重复定义);重则出现局部变量wTemp强行取代了用户自定义的静态变量的情况,从而直接导致系统运行出现随机性的故障(比如随机性的中断被关闭后不再恢复...为了避免这一问题,我们往往会想自动给这个变量一个不会重复的名字,比如借助 __LINE__ 宏给这一变量加入一个后缀: #define SAFE_ATOM_CODE(......【宏是引用而非变量】 ---- 具体实践中,很多人在使用宏过程中会产生“宏是一种变量”的错觉,这是因为无论一个宏此前是否定义过,我们都可以借助 #undef 操作,强制注销它,从而有能力重新给这一宏赋予一个新的值...这显然是过于狭隘的——会出现实际为true却判定为false(走else分支)的情况,为了避免这种情况,实践中,我们应该避免在逻辑表达式中使用true——无论true的值是什么。...---- 实际上,宏的变量特性是不存在的,更确切地说法是,宏是一种“引用”。那么什么是引用呢?

    79140

    Eclipse 改动凝视的 date time 日期时间格式,即${date}变量格式

    Eclipse 改动凝视的 date time 日期时间格式,即${date}变量格式 找到eclipse安装文件夹以下的plugins文件夹,搜索 org.eclipse.text ,找到一个jar...比如我找到的jar包为:org.eclipse.text_3.5.300.v20130515-1451.jar 然后打开它,找到这个类: org.eclipse.jface.text.templates.GlobalTemplateVariables...也能够找到源代码,源代码下载地址为:http://git.eclipse.org/c/platform/eclipse.platform.text.git。...我这里贴出这个文件的源代码,能够直接用(注:这个类非常easy。无多少依赖。...我提供编译好的class文件供大家下载(下载以下的图片。把jpg后缀 改成rar后缀。然后打开)。替换到原文件就可以。

    1.9K30

    铣削加工中的宏变量完成插铣程序方法

    刀具是通过其前端面进行切削的,对深内槽铣削和深方肩循环铣削而言,插铣是一种获得较高生产效率的方法,能够有效解决大悬深问题。   插铣加工属于高速加工的一种解决大悬伸的有效加工方式。...图1 零件图   加工工艺分析   传统的加工工艺方法是采用多次重复加工。这样做的缺点是只采用重复加工、多次加工,很难消除让刀,并且造成加工应力,最后由于应力释放造成零件的内腔变小。...要解决这个问题,可将加工分粗加工和精加工,粗加工采用普通的工艺方法,而精加工采用插铣进行。 加工方法   针对上述问题,我们建立如图2所示的坐标系,进行插铣程序的编制。...为了防止划伤已加工过的表面,我们采用了如图3所示的YZ平面的刀具轨迹路径。...图2 建立坐标系 图3刀具路径   加工过程中,粗加工尺寸80按79.6加工,而精加工采用宏变量编制高速插铣程序。

    65310

    将序列分解为单独的变量

    python中,任何序列或可迭代的对象都可以通过一个简单的赋值操作来分解为单独的变量。...前提是要求变量的总数和结构要与序列相吻合 #_*_coding:utf8_*_ p = (4, 5) x, y = p print(x) # 4 print(y) # 5 data = ['GuoJing...杨过', '小龙女') name, age, (yangguo, xiaolonglv) = data print(yangguo) # 杨过 print(xiaolonglv) # 小龙女 如果元素的数量不匹配...小龙女') yangguo, xiaolonglv, yinzhiping = lover # 报错:ValueError: need more than 2 values to unpack 丢弃不要的变量...在将序列分解成变量时,有些值我们并不需要,可以选一个用不到的变量名作为要丢弃的值的名称(一般选用 _ 作为变量名) #_*_coding:utf8_*_ data = ['杨过', '尹志平', '小龙女

    88240

    excel_VB宏脚本_批量生成点餐宝接受的格式

    Attribute VB_Name = "模块1" '作者:landv '开发时间:2015年12月28日18:09:34 '主要功能,为东风路小厨生成农行点餐宝所支持批量导入的格式。...复制H行到TXT文本修改成UTF_8格式即可。...Attribute VB_Name = "自动处理" '版本:1.0.2 '作者:landv '开发时间:2015年12月28日18:09:34 '主要功能,为东风路小厨生成农行点餐宝所支持批量导入的格式...End Sub 2015年12月31日15:20:30 版本:1.0.3 定义了转换类别的变量,这样可以方便阅读,也方便了修改。...Attribute VB_Name = "自动处理" '版本:1.0.3 '作者:landv '开发时间:2015年12月28日18:09:34 '主要功能,为东风路小厨生成农行点餐宝所支持批量导入的格式

    90320

    为IDA命令行模式增加宏支持功能的插件

    它带有一组预定的宏 ? 要创建或编辑新宏,只需从“快速插件视图”窗口(Ctrl-3)调用宏编辑器。 静态宏 静态宏在CLI中按原样替换。例如以下宏: ? 执行时输出以下内容: ?...动态宏 可以定义动态宏,这些宏通过评估返回字符串的Python表达式而得到扩展。例如,该idc.here()命令非常有用,可以缩写为较短的宏,例如$!或${here}。...要定义动态宏,只需用${和包围其表达式}$。长形式的宏${here}用于idc.here()表达的定义如下: ? 简短形式$!: ? 当CLI命令中存在宏时,将调用该宏: ?...bin ” 要么: v = “ $ {str(1 + 2 + 3 + 4)} $ ” 表达式应始终求值为字符串,因此始终记住str()表达式,或者"%x" % expr如果它不返回字符串,则将其格式化...第一次运行插件时,它将填充默认的宏。如果删除所有宏,除非删除以下文件,否则不会返回默认宏:%APPDATA%\Hex-Rays/firstrun.climacros。

    74020

    【为宏正名】99%人都不知道的##里用法

    这个系列将本着实用的原则介绍一些宏在模块封装中“点石成金”的用法,让大家正确认识到宏真实的作用和使用规则——真真正正还“宏”一个公道。...因此,上面的宏可以改写为: #define log_info(__STRING, ...)...) ( 默认值 ,##__VA_ARGS__) 它有两种使用情况情况: 当我们使用参数宏的时候在括号里不填写任何内容,最终会展开为仅有默认值的情况: EXAMPLE(); 被展开为: ( 默认值...) 当我们提供了任意的有效值时,则会被展开成逗号表达式: EXAMPLE(我们提供的值); 被展开为: ( 默认值, 我们提供的值 ) 根据逗号表达式的特性,此时,默认值会被丢弃掉(有些编译器会报告表达式无效的...; int xxxx_init(xxxx_cfg_t *cfg_ptr); 为了简化用户的配置过程,初始化函数会检查指针cfg_ptr是否为NULL,如果为NULL则自动使用默认配置,反之将使用用户定义的配置

    4.1K20

    重写bean类的toString()方法为JSON格式|idea设置toString()方法为JSON格式模板|idea设置toString()的模板

    前言 有好多人会用idea将bean类重写toString()的方法,但是好多人其实还不知道其实toString()是可以自己自定义模板的,可以自定义生成你想要的格式,然后一键生成。...生成的格式是这样的,但是有时候我们想要自定义生成的toString()格式,比如JSON格式,那要怎么设置呢? ?...二、重写toString()为JSON格式 大家可以点击右边的Settings 按钮,选中Templates,点击添加按钮,新建一个 名字为JSON或者你自己想起的模板名字 ? ?...然后将下面的内容,复制到你刚新建的模板名字的内容里,记得点击Apply,点击OK之后,然后就可以选中你刚才自己建的那个模板的名字,一键生成toString()方法了 public java.lang.String...自己动手多尝试,会有很多的收获的。 参考文章: https://www.cnblogs.com/zipon/p/6208346.html

    4.1K20

    使用 Apollo 为静态变量赋值的方法

    但是,在使用 Apollo 的时候,我们可能会遇到这样的场景: 在类中,想要为静态属性赋值。 我们且不考虑什么时候会出现这样的需求,仅考虑如果有这样的需求,我们应该怎么处理?...实际上,Apollo 仅支持直接为非静态属性赋值,因此当我们有这样的需求的时候,就需要我们变通一下,通过一些小技巧,来达成我们的目的了。...以下面的ApolloConfig代码为例,我们分别为非静态属性name和静态属性address赋值: @Configuration @EnableApolloConfig public class ApolloConfig...其中,我们使用@Value("${csdn.name:NONE}")为非静态属性name赋值,并添加了默认值NONE,即当我们没有在 Apollo 配置中心配置该属性值的时候,Apollo 会自动将NONE...值得注意的是,上面例子中使用的方法名是自定义的,不一定非得和参数名一致,根据需要自定义即可。

    2.8K10
    领券