如何通过setter方法修改私有静态变量

Suj*_*jen 14 java static

我在名为Example的类中有以下变量:

private static int number;
Run Code Online (Sandbox Code Playgroud)

如果我想使用外部类为变量赋值,我会这样做吗?

1)使示例静态的setter方法,所以我可以像这样访问它:

Example.setNumber(3);
Run Code Online (Sandbox Code Playgroud)

2)或使setter方法非静态,所以我创建一个Example对象来设置数字

Example e = new Example()
e.setNumber(3);
Run Code Online (Sandbox Code Playgroud)

两者之间有什么区别,哪一种更好?

ama*_*ion 12

在这种情况下,建议使用静态方法.

为什么?好吧,如果你使它成为一个非静态的方法,那将导致以下惊人的效果:

Example e1 = new Example();
Example e2 = new Example();

e2.setNumber(3);
e1.setNumber(5);

System.out.println(e2.getNumber()); // surprise! prints 5,     
Run Code Online (Sandbox Code Playgroud)

所以即使你在e1上调用了这个方法,e2也会受到影响.相应的静态示例不那么令人惊讶:

Example e1 = new Example();
Example e2 = new Example();

Example.setNumber(5);
System.out.println(Example.getNumber()); // prints 5, no surprise...
Run Code Online (Sandbox Code Playgroud)


Rev*_*nzo 5

首先,您实际上不应该设置静态变量。它容易引起问题,并且通常表明设计不良。唯一应使用静态变量的时间是线程安全的不可变对象和单例。

就是说,如果您仍然绝对希望设置该值,请将其设置为静态方法,因为您无需实例化该对象即可设置静态值。