Java 我可以使一个实用方法成为静态的吗?

Java 我可以使一个实用方法成为静态的吗?,java,static,Java,Static,我有一些功能,如: 对字符串进行输入并修改和返回字符串的函数 函数,该函数将字符串(包含XML)作为输入,对其进行解析并返回一个对象 例如: public class MyUtils{ public static modifyString(String str){ return someString; } public MyObject parseString(String xml){ //Parse XML retur

我有一些功能,如:

  • 对字符串进行输入并修改和返回字符串的函数

  • 函数,该函数将字符串(包含XML)作为输入,对其进行解析并返回一个对象

  • 例如:

    public class MyUtils{
    
        public static modifyString(String str){
            return someString;
        }
    
        public MyObject parseString(String xml){
            //Parse XML
            return obj;
        }
    }
    
  • 我是否可以将这些函数设置为静态函数,以便任何人都可以使用这些函数而不必创建类的实例
  • 如果两个线程同时调用函数呢?代码是线程安全的吗?如果是/否,如何确定
  • 什么时候应该使用单例对象,什么时候应该使用静态方法
  • 是的,只需添加
    static
    关键字。使用您给出的示例,可以如下调用
    modifyString

    modifyString(“一些字符串数据”)

  • 在您的示例中,由于您没有修改存储在类中的任何内容,这将取决于是否有多个对象正在访问传入的内容。类本身应该是线程安全的

  • 它们是不同的东西,当需要使用实例数据时,也就是说,当需要类具有属性或状态时,应该使用单例。对于实用程序函数,更好的选择通常是使用静态方法,因为您不太可能拥有与实用程序函数关联的状态

  • 是的,你应该

  • 静态方法没有特定的问题;但是,如果您的方法引用静态字段或可变参数,则可能与其他线程发生冲突。如果引用静态字段,则考虑使用SuntLon模式代替。

  • 当类有自己的状态需要管理时,使用单例模式,尤其是对客户端隐藏这样的状态。如果类只是由无状态实用程序函数组成,那么可以使用静态方法,而不需要使用单例模式

  • 是的,您可以将这些方法设置为静态。事实上,这些“实用程序类”通常是用静态方法创建的

  • 不,这些方法不是线程安全的,线程可能会中断方法执行并更改当前正在处理的值

  • 当一个类只需要一个实例时,应该使用单例。一个很好的例子是日志类,它记录有关程序执行的信息。在这种情况下,使用单例是没有意义的,因为您将使用静态方法


  • 听起来好像有人警告过你要使用单例而不是静态。该警告适用于静态字段,而不是静态方法。我不理解你的第2点。我不使用任何类级别/实例变量。因此,如果两个线程调用相同的函数modifyString,那么会发生什么?@ako你的代码是线程安全的,然而,如果您要使用任何类变量或实例变量,那么它很可能不是线程安全的,我将更新我的答案以澄清这一点。