传递对象与静态成员

时间:2012-02-28 07:29:58

标签: java class static

在Java中,在修改不同范围/模块中的一个变量时使用静态成员,或者使用参数传递对象是否更好?

4 个答案:

答案 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)

使用单例模式来实现您的要求