如何在Java中定义常量与全局变量

最近有朋友问我如何在Java中定义常量和模拟全局变量。
我之前在这件事上确实经历过很多坑,所以现在就和大家聊聊。

我记得那年我接手了一个项目。
我刚在公司工作几个月。
当时我不懂那么多,所以就直接写了代码。
当时我们团队有个规定,常量命名必须全部大写,单词之间用下划线分隔。
我按照这个规则定义了几个常量,比如MAX_RETRY_COUNT和APP_NAME。
看似很标准,但实际上问题就出现了。

有一次,我需要使用常量APP_NAME,但我在代码中找不到它。
最后发现是写成app_name。
这种低级错误实在令人哭笑不得。
这件事让我认识到,定义常量时,除了命名约定外,还要保证代码的可读性。

然后,我遇到了模拟全局变量的陷阱。
当时我们的项目中有一个userCount变量,所有模块都需要这个变量。
我认为这个东西应该是一个全局变量,最终用 public static int userCount=0; 来定义它。
这看上去没什么问题,但是后来发现,随着项目的扩大,这个变量的修改越来越多,导致代码耦合度越来越高,维护起来特别麻烦。

我们来谈谈接口定义常量。
我以前做过这个。
当时我就想到把所有的常量都收集到界面中,方便管理。
但是我发现一旦修改了接口中的常量,所有的实现类都得重新编译,这样会增加维护成本。

那么,现在让我总结一下。
关于Java中常量和全局变量的定义,您仍然需要遵循一些最佳实践。
例如,常量应使用 static final 定义,并且必须遵循命名约定。
最好把它们放在一个工具类或者配置类中,这样就不会轻易分散在代码的各个角落。

对于全局变量,我之前所做的就是典型的静态变量的滥用。
现在看来,这东西还是要慎重使用。
如果确实需要共享数据,我建议使用依赖注入或者单例模式,这样不仅可以减少耦合,而且也方便测试。

比如我之前提到的GlobalState类中,我使用了单例模式来模拟全局变量。
这样我们就可以保证全局变量只有一个实例,同时提供了一个全局访问点,使用起来方便很多。

总之,这个问题需要具体情况具体分析,但遵循一些最佳实践至少可以让您避免陷入陷阱。
哈哈,希望我这十年踩过的坑可以帮到你!

如何声明JAVA变量,给变量赋值和使用变量??

String bianliang = "shengming";
bianliang = bianliang + bianliang;
// 2 02 2 年,我在北京。
当我编写这段代码时,我突然想到 String 类有大量可以执行操作的方法,例如 substring 和 indexOf。