在Java中声明"全局"变量时,"静态"究竟意味着什么?

Hri*_*sto 7 java static class instance-variables static-variables

我已经多次遇到这个问题而且我从不费心去了解它为什么会发生并学习"静态"实际意味着什么.我刚刚应用了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 
}
Run Code Online (Sandbox Code Playgroud)

所以eclipse告诉我这样做static int iNumVertices;,我不知道为什么.那究竟什么是"静态",它是如何使用的,使用"静态"的目的是什么,为什么它会给我这个问题呢?

Jon*_*ust 9

这是你的例子:

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

    }
}
Run Code Online (Sandbox Code Playgroud)

该方法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
    }
}
Run Code Online (Sandbox Code Playgroud)

找到自己创建全局静力学表明你应该仔细考虑如何设计一些东西.这并不总是错的,但它应该告诉你要思考你在做什么.

  • 最好的做法是将所有内容设置为私有,不需要从外部访问,即使在只有一个类的小型测试项目中也是如此. (3认同)
  • @Hristo我相信一般来说,每个实例变量(也称为字段,属性和其他名称)都应该是私有的.您希望尽可能少地暴露班级的内部工作.这有助于您使您的课程更具可预测性,因为您不会让其他人修改您的课程状态.当您修复代码中的错误6个月后,如果您将变量保密,则不必担心其他5个文件会更改变量. (2认同)