在Java中,在修改不同范围/模块中的一个变量时使用静态成员,或者使用参数传递对象是否更好?
答案 0 :(得分:1)
这不应该是技术问题,而是设计问题。在设计类时,可以分隔类属性和实例属性中的字段。这是一个简单的例子:
public class Car {
// every instance of "Car" has wheels -> static
public static boolean hasWheels = true;
// every instance of "Car" has an individual colour -> non static
public Colour colour;
// ...
}
答案 1 :(得分:1)
Java是一种面向对象的编程语言,如果以面向对象的方式使用它,它通常效果最好。
目前尚不清楚“修改不同范围/模块中的一个变量”是什么意思,但答案是(可能)最好避免使用静态方法。
公开字段绝对是一个坏主意,以便可以通过其他类中的静态方法访问和修改它们。它打破了类的抽象边界,并导致了各种方式的有害的类间耦合。
答案 2 :(得分:0)
当你使用static member
时,你希望在static memory
中有一个成员实例,所以当另一个线程改变它的成员值时,另一个线程会看到最后一个值。要了解它,请参阅以下示例代码:
public class Counter
{
public static int number = 10;
public Counter(int c )
{
number = c;
}
public static final void main(String[] args)
{
Counter counter_1 = new Counter(20);
Counter counter_2 = new Counter(30);
System.out.println(counter_1.number);
System.out.println(counter_2.number);
}
}
运行此程序时,请参阅以下输出:
30
30
因此,静态方法Thread Safely
是一个重要问题。
但是当您使用object passing
approch时,任何线程都有其上下文(Thread-Context
),因此它更改在自己的线程上下文中发布(此结果取决于您是否使用Singleton Pattern
)
答案 3 :(得分:0)
使用单例模式来实现您的要求