2012-07-16 25 views
3

在java中的Util类可以通过两种方式的Java UTIL类

class Utils 
{ 
    public static ReturnType someUtilMethod( 
// ... 
}  

和执行util的方法,通过

Utils.someUtilMethod(...); 

进行或者,我可以让

class Utils 
{ 
    public Utils(){}  
    public ReturnType someUtilMethod( 
// ... 
} 

和执行util的方法通过

new Utils().someUtilMethod(...) 

什么方法更好?这两种方式有些区别吗?

回答

11

一般的Util类包含不需要存储对象处理的状态等static方法是非常适合实用的方法有

+2

+1我会用'public enum Utils {; '以显示班级没有实例。 – 2012-07-16 11:19:48

+0

完全同意 - 绝对没有理由使得实用方法为“非静态”。除此之外,在静态方法的情况下,更少的时间和内存花费在实用程序方法调用上。 – Yura 2012-07-16 11:19:50

2

的实用功能应始终static,除非出于某种原因,它取决于一些其他变量的状态,并且这些变量需要在调用之间记住。

后者应该几乎不会发生,尽管类似伪随机数发生器可能是一个很好的例子。

Math函数是实用函数的一个很好的例子。当您拨打Math.sin()时,结果取决于只有上提供的参数。没有涉及“状态”,所以不需要创建对象。

0

如果你使用一个只有静态方法的类,你不需要在每次需要使用它时实例化对象,保存一行代码和一些内存。只记得使默认的构造函数是私人的,以便没有人拄着拐杖无意中将它实例化!

1

静态访问将会是一个更好的方法,因为在Util类保留方法中不涉及对象的属性。

另一个例子是数学类

  • 数学类有没有实例变量

  • 并有私人构造函数,所以没有对象可以创建。

  • 所以在Math类的情况下使用像Math.PI这样的静态访问是合适的。

0

实用程序类只是一个在Java语言中使用全局函数的地方。

你的第二个例子不包含在术语“工具类”中。该概念的定义包括类的非实例化。

实例方法的原因是动态方法调度(实现多态),或者可能存在一些非全局状态。但是,正如我所说,那么你会超出“实用阶级”这个词的范围。