Java - 关于使用静态成员与否的类

时间:2011-06-17 20:52:59

标签: java class static

所以我对最佳做法有疑问。基本上我正在做以下事情,以便更容易地访问不同类的成员:

class myClass1 {

public static int var1; 
public static String var2; 

//...

public static void method1() {
//...
}

}

然后在其他课程中,我可以使用myClass1myClass1.var1myClass1.var2访问myClass1.method1()个成员。我看到的另一种设计模式是根本不使用static,只需执行myClass1 instance = new myClass1();然后执行instance.method1();或其他任何操作。

我记得在某个地方听到过关于静态不好的事情......与全球物体或其他事物有关。但是自从计算机科学开始以来已经有一段时间了,呵呵。

无论如何,初学者Java程序员只是希望深入了解最佳实践。谢谢。

6 个答案:

答案 0 :(得分:8)

静态与非静态成员变量和方法的语义完全不同。非静态变量是类的实例的成员;每个实例都有自己的副本。静态变量是类本身的成员;它们与任何特定的实例无关。

类似地,非静态方法在类的实例上运行,静态方法不依赖于特定实例。

您应该根据问题的需要使用静态/非静态。这不是最佳实践的问题。

答案 1 :(得分:3)

通常,所有成员字段/方法public static被认为是面向对象编程范例的不良做法。它采用了对象封装和数据安全的所有概念。您班上的任何客户都可以随时篡改您的数据。这种做法非常类似于在过程语言中定义全局变量和函数,如C.

答案 2 :(得分:3)

为什么这是一个坏主意有几个原因:

  1. 公共字段。使用公共字段几乎不可能编写线程安全的代码。这也使得维护或修改代码变得困难。在理论层面上,它违反了封装,这是OO的基本思想之一及其后果。例如,如果您有复杂的状态,而不是每个字段值组合都有效,那么您就遇到了麻烦。
  2. 静态字段。虽然静态字段具有合法用途,但应将其保持在最低限度。它们不是遗传的,很容易引起混乱,而且在最好的时候它是一颗定时炸弹。
  3. 总而言之:除非有必要,否则不要使用静态字段,即便如此,它们也应该是私有的。

    值得注意的例外显然是静态和最终字段(也就是常量),可以在没有太多危险的情况下公开声明。

答案 3 :(得分:1)

这完全取决于你在做什么。如果你的类只保存无状态实用程序函数,那么这可能没问题。如果您正在尝试任何类型的真实OOP设计,那么这没有意义。

如果你使用类的实例来模拟“真实世界”中的对象,那么它们将需要实例变量,并且应该有实例方法来处理该数据。每个实例都封装了该数据并提供了合适的行为。

答案 4 :(得分:1)

一般来说,除了static final变量之外,永远不会创建静态变量,这些变量就像常量一样。主要原因是多个线程可以同时更改全局变量的状态,从而导致该类的每个对象实例的不可预测状态。

答案 5 :(得分:1)

根据面向对象的基本问题:

  1. 变量不应该在课外访问。所以他们应该是私人而不是公开,除了接口案例。这也适用于静态变量。

  2. 您想要访问变量use public方法。如果是静态变量,您将使用静态公共方法。