到底是什么“静态”的意思是声明在Java中的“全局”变量是什么时候?
-
26-09-2019 - |
题
我已经运行到这个问题很多次,我从来没有费心去了解为什么它的发生并了解“静态”的实际含义。我刚施加了Eclipse建议和移动的变化。
public class Member {
// Global Variables
int iNumVertices;
int iNumEdges;
public static void main(String[] args) {
// do stuff
iNumVertices = 0; // Cannot make a static reference to the non-static field iNumVertices
// do more stuff
} // main end
}
所以日食告诉我做static int iNumVertices;
,我不知道为什么。那么究竟什么是“静态”,它是如何使用的,什么是使用“静态”的宗旨,它为什么给我这个问题?
解决方案
这是你的例子:
public class Member {
// Global Variables
int iNumVertices;
int iNumEdges;
public static void main(String[] args) {
// do stuff
iNumVertices = 0; // Cannot make a static reference to the non-static field iNumVertices
}
}
的方法main
是与类相关的静态方法。它不与Member
的实例相关联,因此它不能访问变量与Member
的实例相关联。这个问题的解决是不使那些字段是静态的。相反,你需要使用Member
关键字创建new
的一个实例。
这里的一个修改的版本:
public class Member {
// Fields
private int iNumVertices;
private int iNumEdges;
public Member(){
// init the class
}
public static void main(String[] args) {
Member member = new Member();
member.iNumVertices = 0;
// do more stuff
}
}
查找自己创建全局静是一个指示你,你应该好好想想如何你设计的东西。这不是的总是的错误,但它会告诉你要想想你在做什么。
其他提示
静态变量是那些跨类的所有对象共享。在这里,你的例子为每个对象的成员的创建,你会得到有它自己的 iNumVertices 的值的对象。当使用静态强>使用一个变量,仅存在一个横跨的会员的每一个对象的共享变量。 静态方法相同的方式工作 - 它们在所有的对象共享。
由于静态变量/方法是共同的所有对象,一个需要不使类的一个对象,以访问这些变量/方法。
非静态变量如 iNumVertices 属于一个类的一个对象。他们不能没有创建一个对象来访问。所以,当你从静态上下文访问非静态变量(这里的主的方法),那么Java不会知道对象的 iNumVertices 的你正试图accesss其中。因此,错误。
要么使 iNumVertices 静态的,或者是指它通过创建会员的目的
Member m = new Member();
m.iNumVertices = 0;
learn what "static" actually means
实际上意味着类变量将是同为特定类的所有实例,但是如果你想避免使用静态变量(这是一个好主意,因为静态变量被保存在内存中),您可以通过什么静态变量值槽构造,从而避免静电改性剂的使用,以及实现相同的效果(即,如果你在传递类实例化相同的值)。
下面是代码示例:
public class Car{
private int speed;
public Car(int speed){
this.speed = speed;
}
}
所以,你可以创建新实例时,做到这一点:
Car car = new Car(100);
和每次创建汽车实例时,就会产生速度100,从而避免了静态声明private static int speed = 100;
静态变量是类变量。会有变量缴费单拷贝到类的所有实例,它们将共享该变量。静态成员也可以不引用类的特定实例使用。
更多这里:
http://download.oracle.com/javase/tutorial /java/javaOO/classvars.html
静态变量不需要有类以实例化被访问,因此,如果您试图访问一个非静态变量的形式,你处于危险之中,试图访问的东西,尚未初始化/实例化一个静态上下文
静态方法只能访问静态变量。有类两类变量。一个是静态变量(也类变量)等是实例变量。只有静态变量的一个副本存在于内存中,但实例变量将被实例化的每个对象。因此,静态变量的所有对象访问相同的变量,并通过一个对象所做的任何更改将反映到其他对象。 这里的问题是,为什么是方法必须是静态访问静态变量。当你的方法静态的,你可以在不实例化类的对象访问方法。所以,如果这种方法能够访问实例变量则对于该对象的变量应该使其改变?另一种方法是可能的即非静态方法可以访问静态变量。
每个类变量(变量类体的方法主体内部和外部声明)在静态方法中需要用于声明静态太
静态类变量和方法可以在类外部访问,而不需要该类的一个实例。
静态变量是共同的一类的所有实例。
注意:如前面所述这些类变量,即由所有实例共享
。这些也可以称为类级别的变量。 一般来说,你定义常量(你还需要最后的关键字来定义常量)和全局变量作为静态的。
有关的更多信息请参见: http://download.oracle.com/javase/tutorial/java/ javaOO / classvars.html
http://www.roseindia.net/java/beginners/staticvariable.shtml