在Java中,静态最终变量是常量,并且约定应使用大写形式。但是,我已经看到大多数人以小写形式声明记录器,这在PMD中是违反的。
例如:
private static final Logger logger = Logger.getLogger(MyClass.class);
只需在Google或SO中搜索“静态最终记录器”,您便会自己看到它。
我们应该改用LOGGER吗?
记录器引用不是常量,而是最终引用,并且不应大写。常数VALUE应该为大写。
private static final Logger logger = Logger.getLogger(MyClass.class);
private static final double MY_CONSTANT = 0.0;
问题内容: 可以从许多线程访问类。在这种情况下,必须是记录器还是最终的和静态的?谢谢。 问题答案: 所有主要的Java日志记录程序包(等)都是同步的并且是线程安全的。即使从多个线程调用该类,每个类的记录器的标准模式也可以。
问题内容: 是否应该将记录器声明为静态?通常,我已经看到记录器的两种类型的声明: 要么 应该使用哪一个?两者的优缺点是什么? 问题答案: 非静态形式的优点是,您可以像下面的(抽象)基类中声明它,而不必担心会使用正确的类名: 但是,其缺点显然是将为该类的每个实例创建一个全新的记录器实例。这本身可能并不昂贵,但会增加大量开销。如果您想避免这种情况,请改用表格。但是它的缺点是,您必须在每个单独的类中声明
问题内容: 在方法内部声明局部内部类时,为什么包含最终的静态String或int是合法的,而包含其他对象却不合法? 例如: 编译时,得到以下信息: 为什么要区分?是因为String是不可变的吗?如果是这样,Integer.valueOf()也无效吗? 问题答案: 这是因为前两个静态成员分配给原始类型或String类型的编译时常量。 根据Java语言规范的第8.1.3节: 8.1.3。内部类和封闭实
问题内容: 我有一个带有注释字段的表,我想将每个记录中字符串的首字母大写,例如将“ duplicate”更改为“ Duplicate”。有些记录开始时已经有大写字母,有些甚至可能是数字。 我试过了 但是失败了,因为我的字段是’ntext’类型的。 在句号(句号)后能够大写第一个字母也将很有用,但这不是必不可少的,除非有人已经编写了代码。 提前致谢。 问题答案: 将您的ntext强制转换为nvarc
问题内容: 我理解这段代码: ..静态方法“隐藏”了声明的静态方法,而不是在多态性意义上覆盖它。 …将输出: 在Foo 中 重新定义为in 将禁用隐藏它的功能,并且重新运行将输出: 在Foo 中 ( 编辑 :将方法标记为时,编译失败,并且仅在我删除后再次运行) 如果将静态方法声明为,是否会阻止子类有意或无意地重新定义该方法,这是否被视为不好的做法? (这很好地说明了使用行为是..) 问题答案: 我
问题内容: 我在代码中使用Java Callable Future。以下是我使用future和callables的主要代码- 下面是我的Task类,该类实现Callable接口,我需要根据所拥有的主机名生成URL,然后使用调用SERVERS RestTemplate。如果第一个主机名中有任何异常,那么我将为另一个主机名生成URL,然后尝试拨打电话。 所以我的问题应该声明RestTemplate为静