我已经运行到这个问题很多次,我从来没有费心去了解为什么它的发生并了解“静态”的实际含义。我刚施加了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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top