在java中执行以下任务的最佳方法是什么

在java中执行以下任务的最佳方法是什么,java,static,heap,Java,Static,Heap,我的应用程序中有20多种常用方法。我想将这20个方法移动到一个公共类中 这里我的疑问是,定义所有的方法都是静态的或普通的方法,并创建一个全局对象来访问那个普通的方法 class Common { public String method1() {........} public String method2() {........} public String method3() {........} public String method4() {........} public Stri

我的应用程序中有20多种常用方法。我想将这20个方法移动到一个公共类中

这里我的疑问是,定义所有的方法都是静态的或普通的方法,并创建一个全局对象来访问那个普通的方法

class Common {

public String method1() {........}
public String method2() {........}
public String method3() {........}
public String method4() {........}
public String method5() {........}
...

}
创建对象

class CommonService {
    private static Common common;

    public static Common getCommon() {
    if(null == common) {
    common = new common();
    }
    return common;
    }
}
如果我们使用静态方法创建所有方法,那么所有20个方法都存储在堆的PermGen部分

但若我们遵循上述方法,就只能在java堆中创建和存储一个对象


请澄清哪一种方法是最好的。

“常用功能”不太准确。这实际上取决于您想要做什么,例如,当我创建一些StringUtils时,我创建了StringUtils类,它有我需要的东西。是否将其设置为静态取决于要处理的数据,如果一个信息可能被多次用于一个呼叫,则答案是简单的使用实例。

您应该考虑设计方面的“最佳”方式

如果这些方法用于一般目的,则最好将它们设置为
静态
,因为您没有任何状态可存储,这样可以节省内存

您应该考虑其他事项,然后决定是否要在实用程序类中使用<代码>静态< /代码>方法。一方面,实用程序类将非常容易测试,并且具有高度的可访问性。另一方面,在测试中很难模拟

静态方法

如果我有一个实用程序类,我将按如下方式编写:

public final class Common {

    private Common() { }

    public static int method1() { }
    public static int method2() { }
    // ...

}

这取决于这些方法的作用

如果这些方法只是辅助方法,不会改变状态,那么
static
可能更好,因为这样您就不必每次使用其中一个方法时都创建对象。您只需调用
Common.method()

但是,如果对象具有状态,则应使用对象方法进行评级,并在需要使用方法时创建新对象

希望这有帮助

如果我们使用静态方法创建所有方法,那么所有20个方法都存储在堆的PermGen部分

方法不是数据,而是代码。存储代码的位置不取决于方法是否接受隐式
参数。如果使用单例方法,方法代码仍将占用存储空间,此外,堆上将有一个实例

然而,以上所有内容都是无关紧要的,而且您的设计关注的是一个完全错误的方面。重要的是决策将如何影响使用这些方法的代码:

  • 静态方法简单,是纯函数(不依赖于任何外部状态)的最佳选择
  • 单例允许多态性,因此使方法更易于模拟以进行测试

如果这种方法的意义是“执行纯函数”,比如数学上的sin(x)、cos(x)等,那么静态方法是最好的

它们属于一个领域?(主题范围)或不同?(然后创建更多具有正确名称的“实用程序类”)

如果有状态(就像很多人说的)也许单身更好

问题的形状“我有20个应用中的方法”和名称通常建议以前(较老)的设计问题,我说的是“过程性思维”,OOP的视野很差


没有代码很难说。

你到底想实现什么?在每一个领域,每件事都有它自己的优点和缺点。更好的是,您可以将其作为
final
Util
类和make-method
static
。这些方法是否有任何关联?为什么这比构造函数更好?(或者一个单例,如果你想让它们都在同一个实例上)我不确定
静态方法,但是从可测试性的角度来看,单例是不受欢迎的,因为如果你不需要在这些方法之间共享状态,你应该可以使用静态方法。@subodh joshi:你到底想实现什么?>>应用程序性能和内存管理。那么我为什么要问。从内存管理的角度和性能的角度来看,哪一种方法是正确的?从内存管理的角度来看,基本上没有区别。唯一的区别是为堆上的单个对象分配了16个字节。我是java新手,所以请接受我的冷淡问题,并给我你有价值的答案。实际上,根据我的知识,我可以理解jvm在PermGen空间中为每个静态变量和方法分配内存空间。因此,如果我们使用静态方法创建方法,jvm将在PermGen空间中创建20个内存空间。但如果我们使用单例,permgen中只会创建一个内存空间。这是我的疑问。我是对的还是错的?@Anbazhagan优化了10-20字节,一般问题与良好的代码设计,包。。。请记住,类的方法的存储完全独立于该类的实例。不管有多少实例,一个方法只存储一次。这就是为什么这个方法是否是静态的是无关紧要的。变量是另一回事,因为它们是数据。静态变量的存储不同于实例变量的存储。但这与您的设计困境无关。