java - 抽象类中的静态方法?

标签 java static static-methods

<分区>

我最近从一个视频中了解到,如果出于性能原因,Java 类的所有方法都是静态的,那么将其转换为抽象类是一种很好的做法。

谁能解释一下为什么会这样?

最佳答案

这可能会阻止人们创建该类的实例。 Java 代码预计会创建大量短期有用的对象并被垃圾回收,因此很难说这是一种实质性的性能提升。它似乎更像是一种传达类(class)背后意图的方式。

另一种选择是,不要将类设为抽象类,而是将类设为最终类。这是 JDK 代码中采用的方法,例如 java.lang.Math:

public final class Math {

    /**
     * Don't let anyone instantiate this class.
     */
    private Math() {}

使用这些方法中的任何一种,您都应该为类提供私有(private)构造函数。这可以防止任何人对其进行实例化,并清楚地表明该类的目的是为静态方法提供一个家。这里的缺点是代码覆盖工具倾向于将构造函数报告为未覆盖。

从 Java 8 开始,第三种选择是将静态方法放在接口(interface)上。任何具有非默认实现的方法都被假定为静态方法。这种方法的优点是没有构造函数可以设为私有(private),并且代码覆盖工具会很高兴。

有了抽象类(但没有私有(private)构造函数)或接口(interface),也有可能扩展或实现该类型以使所有静态方法都可用而无需静态导入。 See this link for an example .使用 java.lang.Math 方法不是一种选择。

关于java - 抽象类中的静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65754423/

相关文章:

java - 了解 Java 转换器接口(interface)

java - 文件为空时显示错误消息的问题

java:多线程、多用户 Web 应用程序中的 FTP

C# - 静态方法中的参数线程安全吗?

java - 创建java库时如何组织类

c# - Doxygen 不会生成指向没有显式类名的方法的链接

c# - 为什么函数需要在定义或使用之前声明?

java - 如何将方法中的数组放入调用方法的数组中?

c++ - 在 C++ 中,原始类型静态初始化为常量值是线程安全的吗?

python - 在Python中,使用静态方法实现抽象方法有什么优缺点?