Java 传递对象与静态成员

Java 传递对象与静态成员,java,class,static,Java,Class,Static,在Java中,在不同范围/模块中修改一个变量时使用静态成员更好,还是使用参数传递对象更好?这不应该是一个技术问题,而是一个设计问题。设计类时,将类属性和实例属性中的字段分开。下面是一个简单的例子: public class Car { // every instance of "Car" has wheels -> static public static boolean hasWheels = true; // every instance of "Car" ha

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

这不应该是一个技术问题,而是一个设计问题。设计类时,将类属性和实例属性中的字段分开。下面是一个简单的例子:

 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; 

   // ...
 }

Java是一种面向对象的编程语言,如果您以面向对象的方式使用它,它通常工作得最好

不清楚“在不同的范围/模块中修改一个变量”是什么意思,但答案是(可能)最好避免使用静态方法


公开字段,以便可以通过另一个类中的静态方法访问和修改字段,这绝对是个坏主意。它打破了类抽象边界,并导致类间耦合,这在各种方面都是有害的。

当您使用
静态成员时,您希望在
静态内存中有一个It成员的实例,因此当另一个线程更改它的成员值时,另一个线程会看到最后一个值。要了解它,请参见以下示例代码:

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
因此,在静态方法中,线程安全是一个重要问题。
但当您使用
对象传递
方法时,任何线程都有其上下文(
线程上下文
),因此它会在自己的线程上下文中发布更改(这也取决于您是否使用
单例模式

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

这个问题太笼统了,无法回答(这是一个错误的问题),但一般的智慧是明确地传递一个对象…(如果这是一个问题…@Andreas_D-你显然从未见过可靠的罗宾:-)说真的,“并非所有汽车都有四个轮子”的问题有助于说明为什么静态字段/成员在模型中是一个坏主意。如果
numberOfWheels
是返回
4
Car
实例方法,则可以在
Car
ReliantRobin
子类中重写它以返回
3
。或者-是的,好的,我更改了属性。A是的,我知道真正的汽车可能有少于或多于四个轮子。但我有种感觉,柠檬说得对。(请大家同意,没有车轮的车辆不称为汽车……)