我可以将实用程序方法设为静态吗?

时间:2011-07-14 16:51:36

标签: java static

我有一些功能,如:

  1. 在字符串上输入并修改并返回字符串

  2. 将字符串(保存XML)作为输入并解析它并返回对象的函数。

  3. 例如:

    public class MyUtils{
    
        public static modifyString(String str){
            return someString;
        }
    
        public MyObject parseString(String xml){
            //Parse XML
            return obj;
        }
    }
    
    1. 我可以将这些函数设置为静态,以便任何人都可以在不创建我的类实例的情况下使用它们吗?
    2. 如果两个线程同时调用该函数怎么办?代码线程安全吗?如果是/否,怎么样?
    3. 我何时应该使用单个对象?何时应该使用静态方法?

3 个答案:

答案 0 :(得分:3)

  1. 是的,只需添加static关键字即可。使用您给出的示例,您可以像这样调用modifyString

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

  2. 在您的示例中,因为您没有修改存储在类中的任何内容,所以它将取决于是否有多个内容正在访问传入的内容。类本身应该是线程安全的。

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

答案 1 :(得分:0)

  1. 是的,你应该。

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

  3. 当类具有自己的状态时,使用单例模式进行管理,特别是从客户端隐藏此类状态。如果该类只包含无状态实用程序函数,则可以使用静态方法,而不需要使用单例模式。

答案 2 :(得分:0)

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

  2. 不,这些方法不是线程安全的,线程可以中断方法执行并更改当前正在处理的值。

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