首页
学习
活动
专区
圈层
工具
发布

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指向字符串池中缓存的字符串

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

    java中的file是什么?

    大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说java中的file是什么?,希望能够帮助大家进步!!!...(推荐:java视频教程) 一、简述IO操作: 当需要把内存中的数据存储到持久化设备上的这个动作称为输出(写)output操作; 当把持久设备上的数据读取到内存中的这个动作称为输入(读)input操作。...); File file2=new File("D:\java","a.txt");//父路径、子路径--可以适用于多个文件的!...,"a.txt");//File类的父路径、子路径 System.out.println(file3); } } 3、File类的获取及文件的创建和删除、判断: import java.io.File...=new File("src");//写相对路径的话,会自动转成绝对路径,但是不去检验文件是否真实存在(只会给翻译回来,可能根本不存在) D:JAVA0322Day16src //获取文件对象的绝对路径

    1.4K30

    java中的stringbuffer是什么_java中&和&&的区别

    大家好,又见面了,我是你们的朋友全栈君。 JAVA提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。...这个String类提供了不可改变的字符串。 而这个StringBuffer类提供的字符串可以进行修改。 String: 为不可变对象,一旦被创建,就不能修改它的值....对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去....;//error 对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer 中付值的时候可以通过它的append方法. ss.append(“w!”)...而String是不能被修改的,只能重复的去创建对象来实现修改。——如果频繁的对字符串进行追加、替换、修改、插入、删除操作,最好使用StringBuffer。

    1.3K30

    java中scanner是什么意思_java中scanner是什么

    java中的scanner是一个类,是用于扫描输入文本的新的实用程序;当在Eclipse中编写Java程序时,如果变量是需要手动输入的时候,此时就可以用到scanner类。...java中的scanner是一个类,是用于扫描输入文本的新的实用程序。本篇文章将给大家详细介绍一下,感兴趣的朋友可以来了解一下。...当我们在Eclipse中编写Java程序时,如果我们的变量是需要手动输入的时候,我们就可以用到scanner类了。 Scanner类,这是一个用于扫描输入文本的新的实用程序。...由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分。 于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法。...PS:在Eclipse中一定要在开始时在package下面导入java.util.Scanner;不然scanner便不能调用。

    3.2K20

    java中的pojo是什么意思_java中的POJO是什么意思?

    簡單的Java對象(Plain Ordinary Java Objects)實際就是普通JavaBeans,使用POJO名稱是為了避免和EJB混淆起來, 而且簡稱比較直接....其中有一些屬性及其getter setter方法的類,有時可以作為value object或dto(Data Transform Object)來使用.當然,如果你有一個簡單的運算屬性也是可以的,但不允許有業務方法...POJO是Plain Ordinary Java Objects的縮寫不錯,但是它通指沒有使用Entity Beans的普通java對象,可以把POJO作為支持業務邏輯的協助類。...POJO有一些private的參數作為對象的屬性。然后針對每個參數定義了get和set方法作為訪問的接口。...long getId() { return id; } public String getName() { return name; } } POJO對象有時也被稱為Data對象,大量應用於表現現實中的對象

    8K30

    java中的stringbuffer是什么_java string类

    话不多说开始: 区别一:在Java中字符串使用String类进行表示,但是String类表示字符串有一个最大的问题:“字符串常量一旦声明则不可改变,而字符串对象可以改变,但是改变的是其内存地址的指向。”...方式二:利用StringBuffer类中的append()方法(public StringBuffer append(String str))。...在实际开发中只有频繁修改内容才考虑使用StringBuffer类或StringBuilder类操作。 从JDK1.5开始,Java增加了一个新的字符串操作类:StringBuilder类。...,StringBuilder类和StringBuffer类是完全相同的,而且打开Java Doc文档后可以发现两个类的方法功能都是相同的。...而打开Java源码你会发现区别,在StringBuffer类中定义的方法全部使用“synchronized”进行同步定义,属于安全的线程操作;而StringBuilder类没有同步定义,StringBuilder

    67910

    Java中的枚举类是什么

    在Java中,枚举类(Enum Class)是一种特殊的类,用于表示固定数量的常量值。枚举类允许开发者定义一组具名的常量,这些常量在程序中是唯一的、不可变的。...枚举类在Java中提供了一种类型安全的方式来表示固定数量的选项或状态。 使用枚举类的好处有很多,包括: 类型安全:枚举类提供了一种类型安全的方式来表示特定的选项或状态。...下面是一个简单的Java枚举类的示例: public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY...} 在这个例子中,Day是一个枚举类,它包含了表示一周中每天的常量。...每个枚举常量都是Day类型的一个唯一实例。 除了简单的枚举常量外,还可以在枚举类中定义方法、构造函数和字段。

    40000

    聊聊Swift中的宏

    聊聊Swift中的宏 宏,Macros是一种常见的编程技术,传统的C语言中,即包含了宏功能。宏这种功能,简单来说是在代码的预编译阶段进行静态替换,是一种非运行时的特性。...但宏的元编程能力可以大大的提高编程的灵活性和复用性,Swift在5.9版本中重新引入了宏功能,并且是以一种全新的方式来定义和实现宏,在提供灵活性的同时保证代码的安全性和可靠性。...但这也有一些缺陷,相比与C语言的宏,Swift中的宏的定义非常抽象,实现复杂,不太利于开发者进行理解。...Swift中的宏分为两类: 1 - 独立宏 2 - 附加宏 其中,独立宏单独出现,单独使用,不会附加到任何声明(可以理解为原始代码)上。附加宏则需要配合声明一起使用,通常是为了向原代码中增加一些功能。...这些宏因为是标准库中的,我们无法查看展开后的样子,如果是自定义宏则可以直接展开查看,后面我们再介绍。

    2.2K10

    宏中#和##的用法

    printf(STR(vck)); // 输出字符串"vck"     printf("%d   ", CONS(2,3)); // 2e3 输出:2000     return 0;   }   二、当宏参数是另一个宏的时候...  需要注意的是凡宏定义里有用'#'或'##'的地方宏参数是不会再展开.   1, 非'#'和'##'的情况   #define TOW (2)   #define MUL(a,b) (a*b)  ...printf("%d*%d=%d   ", TOW, TOW, MUL(TOW,TOW));   这行的宏会被展开为:   printf("%d*%d=%d   ", (2), (2), ((2)*(...加多一层中间转换宏.   加这层宏的用意是把所有宏的参数在这层里全部展开, 那么在转换宏里的那一个宏(_STR)就能得到正确的宏参数.  ...第二层: --> ___ANONYMOUS1(static int, _anonymous, 70);   第三层: --> static int _anonymous70;   即每次只能解开当前层的宏

    1.6K20

    内核中的guard宏

    这个guard是怎么实现的?作用是什么?我们需要看一看,研究一下。...注意:本属性只能作用域function auto scope的变量,也就是说函数中定义的栈上分配的在函数作用域中的变量,参数或者static变量是不行的。...内核中的guard内核作为一个极其复杂的超超超大型c项目,一直都是需要手动在每个return或者goto去处理资源释放之类的操作,如果能用上cleanup岂不是美滋滋。...使用这些宏,我们可以很容易构造出一个自动释放的函数(就是cleanup属性自动调用的释放函数,比如上面例子中的free_A)比如,还是我们之前的例子://之前是这样写的void free_A(char..._0会调用__DEFINE_UNLOCK_GUARD宏和__DEFINE_LOCK_GUARD_0宏//__DEFINE_UNLOCK_GUARD宏定义了一个class_preempt_t类型,然后定义了

    16810

    Rust中的过程宏

    宏中的x变量是一个表达式(用x:expr标记),所以在展开后它知道如何正确处理,会将其展开为((1 + 1) * (1 + 1))。 然而这只是书本上常见的宏的简单用法。...对于宏编程,Rust中提供了几种过程宏的库操作支持,即: 1、Syn 它是基于TokenStream的一种语法分析过程,它并不很强大,需要自定义扩展一些宏,比如Rust中的函数和闭包等。...过程宏(Procedure Macro)是Rust中的一种特殊形式的宏,它将提供比普通宏更强大的功能。方便起见,本文将Rust中由macro_rules!定义的宏称为规则宏以示区分。...属性宏(Attribute macro):用在结构体、字段、函数等地方,为其指定属性等功能。如标准库中的#[inline]、#[derive(...)]等都是属性宏。...在宏展开的过程中,遇到派生宏时,会将整个结构体(或enum、union)展开成TokenStream作为派生宏函数的输入,然后将其输出的TokenStream附加到结构体后面,再继续作语法分析。

    3.1K30
    领券