Java 这两种实现之间的区别是什么?

Java 这两种实现之间的区别是什么?,java,class,object,methods,Java,Class,Object,Methods,我只是在学习java,遇到了两种做同样事情的方法。我的问题是:它们之间有什么区别?谢谢 备选方案A: class Foo { public static int var; Foo (){ var = 0; } public static void main(String[] args) { Foo object = new Foo(); object.method(); System.out.pr

我只是在学习java,遇到了两种做同样事情的方法。我的问题是:它们之间有什么区别?谢谢

备选方案A:

class Foo {
    public static int var;

    Foo (){
        var = 0;
    }

    public static void main(String[] args) {
        Foo object = new Foo();
        object.method();
        System.out.println(object.var); //prints 1
    }

    public void method (){
        var++;
    }
}
备选案文B:

class Foo {
    public static int var;

    Foo (){
        var = 0;
    }

    public static void main(String[] args) {
        Foo object = new Foo();
        method(object);
        System.out.println(object.var); //prints 1
    }

    public static void method (Foo object){
        object.var++;
    }
}

加强@eckes上面提到的内容-

这些样本中有更多的共同点,而不是不同点——两者都是模糊的,都会助长不良行为

注意:还可以使用对象引用引用静态字段 像

我的自行车

但这是不鼓励的,因为它没有明确说明它们是类变量

在这种情况下增加静态变量的干净方法:
Foo.var++

在现实生活中,使用可变静态变量通常是错误的。特别是如果您是初学者。

a使用对象的方法递增
var
,B使用静态方法递增
var
,无需创建对象即可调用。为什么不使用选项B中的Foo对象?除了代码样式外,没有区别/clarity@Samuari我打算做object.var++。不过,这确实带来了另一个问题,如果我修改一个实例变量,它会更改所有对象的值?您不应该在实例上下文中使用静态字段,因此当您使用
foo.var
时,这两个选项都应该创建编译器警告,因为这是错误使用的明显标志。在构造函数中分配静态变量也是非常可疑的。我怀疑您不想使var成为静态的,否则代码就毫无意义了。在所有地方
Foo.var++可以使用(这表明对象未在B中使用)。