所以我对最佳做法有疑问。基本上我正在做以下事情,以便更容易地访问不同类的成员:
class myClass1 {
public static int var1;
public static String var2;
//...
public static void method1() {
//...
}
}
然后在其他课程中,我可以使用myClass1
,myClass1.var1
,myClass1.var2
访问myClass1.method1()
个成员。我看到的另一种设计模式是根本不使用static
,只需执行myClass1 instance = new myClass1();
然后执行instance.method1();
或其他任何操作。
我记得在某个地方听到过关于静态不好的事情......与全球物体或其他事物有关。但是自从计算机科学开始以来已经有一段时间了,呵呵。
无论如何,初学者Java程序员只是希望深入了解最佳实践。谢谢。
答案 0 :(得分:8)
静态与非静态成员变量和方法的语义完全不同。非静态变量是类的实例的成员;每个实例都有自己的副本。静态变量是类本身的成员;它们与任何特定的实例无关。
类似地,非静态方法在类的实例上运行,静态方法不依赖于特定实例。
您应该根据问题的需要使用静态/非静态。这不是最佳实践的问题。
答案 1 :(得分:3)
通常,所有成员字段/方法public static
被认为是面向对象编程范例的不良做法。它采用了对象封装和数据安全的所有概念。您班上的任何客户都可以随时篡改您的数据。这种做法非常类似于在过程语言中定义全局变量和函数,如C.
答案 2 :(得分:3)
为什么这是一个坏主意有几个原因:
总而言之:除非有必要,否则不要使用静态字段,即便如此,它们也应该是私有的。
值得注意的例外显然是静态和最终字段(也就是常量),可以在没有太多危险的情况下公开声明。
答案 3 :(得分:1)
这完全取决于你在做什么。如果你的类只保存无状态实用程序函数,那么这可能没问题。如果您正在尝试任何类型的真实OOP设计,那么这没有意义。
如果你使用类的实例来模拟“真实世界”中的对象,那么它们将需要实例变量,并且应该有实例方法来处理该数据。每个实例都封装了该数据并提供了合适的行为。
答案 4 :(得分:1)
一般来说,除了static final
变量之外,永远不会创建静态变量,这些变量就像常量一样。主要原因是多个线程可以同时更改全局变量的状态,从而导致该类的每个对象实例的不可预测状态。
答案 5 :(得分:1)
根据面向对象的基本问题:
变量不应该在课外访问。所以他们应该是私人而不是公开,除了接口案例。这也适用于静态变量。
您想要访问变量use public方法。如果是静态变量,您将使用静态公共方法。