Java中$符的使用场景有哪些

发布时间:2023-04-25 17:31:54 作者:iii
来源:亿速云 阅读:160

今天小编给大家分享一下Java中$符的使用场景有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1. $符号七大应用场景

1.1 内部类与匿名内部类

在Java中,当一个类被定义在另一个类的内部时,它被称为内部类。在编译之后,内部类的字节码文件名将包含外部类名、$符号和内部类名。例如,如果我们有一个名为Outer的外部类和一个名为Inner的内部类,那么编译后的字节码文件名为:Outer$Inner.class。同样,当我们创建匿名内部类时,编译器会为其生成一个类名,该类名包含外部类名、$符号以及一个编译器生成的数字序列,例如:Outer$1.class。

1.2 Lambda表达式与方法引用

从Java 8开始,Lambda表达式和方法引用成为了Java编程的重要组成部分。当编译器处理Lambda表达式和方法引用时,它会生成包含$符号的特殊方法名。例如,考虑以下Lambda表达式:

Runnable r = () -> System.out.println("Hello, world!");

编译后,将生成一个名为lambda$main$0的方法。在这种情况下,$符号用于区分由编译器生成的Lambda表达式方法和其他程序中的方法。

1.3. 自动生成的字段与方法

在某些情况下,Java编译器会为我们自动生成一些字段和方法,这些字段和方法的名字可能包含$符号。例如,当我们使用枚举类型(Enum)时,编译器会为枚举类生成一个名为$VALUES的静态字段,以及一个名为valueOf的静态方法。同样,当我们使用switch语句与枚举类型结合时,编译器会生成一个包含$符号的方法,用于实现对应的switch逻辑。

1.4. 自定义类名与变量名

虽然在Java编程中,通常不建议使用$符号作为类名或变量名的一部分,但这是允许的。例如,以下代码是有效的Java代码:

class MyClass$1 {
    int $value = 42;
}

然而,由于这种命名方法可能引起混淆,因此在实际编程中应该避免这样做。

1.5. 生成的代码和工具

在某些情况下,代码生成工具(如AspectJ,JAXB等)和字节码处理库(如ASM,CGLIB等)可能会在生成的类名、方法名或字段名中使用$符号。这是因为$符号在这些场景下能够提供一种有效的命名约定,避免与原始代码中的名称发生冲突。

1.6. 货币计算

在Java程序中,我们可能会使用BigDecimal或其他数据类型处理货币计算。在某些情况下,我们可以使用$符号作为货币值的前缀,以表示货币单位。虽然这不是Java语言的内置功能,但是可以作为一种编程约定来使用,以提高代码的可读性。

BigDecimal salary = new BigDecimal("5000.00");
BigDecimal bonus = new BigDecimal("1000.00");
BigDecimal total = salary.add(bonus);
System.out.println("Total: $" + total);

虽然这里的$符号并不是Java语言特性,但它在表示货币值时可以帮助提高代码的可读性。

1.7 在配置文件中动态获取变量值

在Java应用程序中,我们经常需要使用配置文件来存储和管理应用程序的设置。在许多情况下,配置文件会使用$符号作为占位符,用于动态获取变量值。以下是一些常见的配置文件格式和$符号的使用示例:

1.7.1 Java属性文件(.properties)

Java属性文件是一种简单的键值存储格式。在属性文件中,我们可以使用${key}的形式作为占位符,表示需要从其他地方获取值。

database.url = jdbc:mysql://${host}:${port}/${dbName}

在这个例子中,${host}、${port}和${dbName}是占位符,它们将在运行时被相应的值替换。

1.7.2 Spring Boot配置文件(application.yml 或 application.properties)

在Spring Boot应用程序中,我们通常使用YAML或属性文件来配置应用程序。在这些文件中,我们可以使用$符号和大括号来表示占位符。

server:
  port: ${app.port:8080}

在这个例子中,${app.port:8080}表示一个占位符,其值将在运行时从环境变量或其他配置源中获取。如果没有找到该值,将使用默认值8080。

1.7.3 Apache Maven POM文件(pom.xml)

Apache Maven是一种流行的Java构建工具。在Maven的POM文件中,我们可以使用$符号和大括号来表示占位符。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

在这个例子中,${java.version}表示一个占位符,其值将在运行时从其他地方获取。

1.7.4 Java模板引擎(如Thymeleaf, FreeMarker, Velocity等)

在Java Web应用程序中,我们经常使用模板引擎来渲染HTML页面。许多模板引擎都支持使用$符号作为占位符,用于动态获取变量值。

<!-- Thymeleaf 示例 -->
<p th:text="${message}"></p>

<!-- FreeMarker 示例 -->
<p>${message}</p>

<!-- Velocity 示例 -->
<p>$message</p>

在这些例子中,$符号用于动态插入变量message的值。

1.7.5 Log4j2 配置文件中动态获取变量值

Log4j2是一个流行的Java日志框架,用于记录应用程序的运行状况。在Log4j2的配置文件中,我们可以使用$符号和大括号作为占位符,用于动态获取变量值。以下是一个Log4j2配置文件(log4j2.xml)的示例:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="logPath">${sys:user.home}/logs</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
        <RollingFile name="RollingFile" fileName="${logPath}/app.log" filePattern="${logPath}/app-%d{yyyy-MM-dd}.log.gz">
            <PatternLayout>
                <pattern>%d %p %c{1.} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" />
        </Root>
    </Loggers>
</Configuration>

在这个例子中,我们使用${sys:user.home}作为占位符,表示用户主目录。在运行时,这个占位符将被相应的系统属性值替换。同时,我们还定义了一个名为logPath的自定义属性,它的值为${sys:user.home}/logs。在配置文件的其他部分,我们可以使用${logPath}来引用这个属性。

2. 在配置文件中$符号来获取变量值的原理

在配置文件中使用$符号获取变量值,其背后的原理主要包括解析占位符、变量替换和值来源。以下是详细说明:

3. 为什么要是用$符而不使用别的符号

在配置文件中使用$符号作为变量占位符的原因可以从历史、约定和可读性等方面来解释。

以上就是“Java中$符的使用场景有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

推荐阅读:
  1. 怎么用Java打印出贴吧某用户发表过的所有帖子
  2. Java开源O2OA V4.3355更新了哪些功能

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:怎么使用vue实现前端导入excel数据

下一篇:MySQL错误代码1052 Column 'xxx' in field list is ambiguous如何解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》