Java 这两种实现之间的区别是什么?
我只是在学习java,遇到了两种做同样事情的方法。我的问题是:它们之间有什么区别?谢谢 备选方案A: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
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中使用)。