BEHOLD CODE
public class Main {
static int bob;
//create a foo
static Foo foo;
//cuz why not have a second foo
static Foo foo2;
public static void main (String args){
foo = new Foo();
foo2 = new Foo();
//creating a local variable with foo2's value +5
bob = foo2.anIntThatWillNeverChageValue+5;
}
}
Foo的课很简单
public class Foo {
static int anIntThatWillNeverChageValue =5;
public Foo(){
}
}
所以你可能会想“这个代码编译好了,问题是什么?”。好吧,java在线说:
bob = foo2.anIntThatWillNeverChageValue + 5;
中的主要课程
应该访问静态字段Foo.anIntThatWillNeverChageValue 以静态的方式
现在我明白这通常是一种很好的做法,只需通过说
来访问Foo的静态类bob = Foo.anIntThatWillNeverChageValue + 5;
会更好,更有效,更简单。然而,当foo被3个类扩展时,在多态环境中怎么样?我不想只访问基本的Foo变量,我希望我的特定对象的变量。当然,对此的明显解决方案是简单地使变量非静态,但在这种情况下,每次创建Foo的新子项时都要创建一个新变量。静态访问它会不会更有效率?
编辑:
引自Why should the static field be accessed in a static way?
解决原因的问题:在Java中,当你将某些东西声明为静态时,你会说它是类的成员,而不是对象(因此只有一个)。
基本上是我所要求的答案。我试图使用静态方法来避免非静态字段的UNECISARY副本。我的问题是询问为什么反对Java约定以多态方式访问静态方法,并且还打算询问可能通常可接受和/或更高效的可能解决方案。
答案 0 :(得分:0)
如果您希望仅Foo
的子类可以访问该变量,那么您应该声明它protected
。
如果它仅被声明的类使用,则将其设为private
。
无需实例化类型即可访问静态变量。如果您想通过使用类的实例化类型来访问它,那么您不应该声明变量static