在java中调用类并访问变量

时间:2018-05-04 11:46:24

标签: java class

我在以正确的方式调用课程时遇到问题。我创建了第二个名为" Questions"我在我的主类下面创建了一个实例,如下所示:

Questions QuestionBank = new Questions ();

我希望将Questions中的所有变量作为QuestionBank.Score访问,但是当我执行此操作时,QuestionBank会以红色突出显示。 Questions.Score工作正常,但与我使用的说明不符。

有什么想法吗?

提前谢谢。

3 个答案:

答案 0 :(得分:2)

  

Questions.Score工作正常

这可能是因为您已宣布您的分数 静态

public static int Score;

这意味着Score变量属于Questions类本身,并且只有一个变量。无论您new Questions()创建新实例多少次,只有一个Score变量属于Questions类而不是Questions类的实例。这解释了为什么您只能Score而不是Questions.Score访问QuestionBank.Score

要解决此问题,只需删除静态修饰符。

public int Score;

阅读What does the 'static' keyword do in a class?

答案 1 :(得分:1)

由于您的问题非常模糊且难以理解,我觉得this可以成为您理解的非常好的理解指南。

让我知道你有任何问题。 :)

答案 2 :(得分:0)

java visibility

的外观开始

让我说你会这样上课

public class VariableAccessibility {
    public static int STATICVARIABLE = 1;
    public static final int STATICVARIABLECONSTANT = 1;


    int protectedVariable = 1; //protected is default
    public int publicVariable = 1;
    private int privateVariable = 1;

    public int getPrivateVariable() {
        return privateVariable;
    }
    public void setPrivateVariable(int privateVariable) {
        this.privateVariable = privateVariable;
    }
}

然后你可以/不能做以下

VariableAccessibility varAccess = new VariableAccessibility();
int value = varAccess.publicVariable;   //works because its public variable
int staticVariable = varAccess.STATICVARIABLE; //works
int consVar = varAccess.STATICVARIABLECONSTANT; //works, because its static

//int privateVar = varAccess.privateVariable; //not visible
int privateVar = varAccess.getPrivateVariable(); //works, call "getter" will be operating with private class variable

//静态变量值修改     VariableAccessibility.STATICVARIABLE = 5; //你可以做,因为静态但不是最终的     //VariableAccessibility.STATICVARIABLECONSTANT = 5; //无法做到,因为它的最终

基本上,将所有可能标记为private(使用私有修饰符)并且如果需要,然后创建/生成getter和setter(名称中带有get / set的方法)是一个很好的观点。 / p>

  • 公共变量随处可见,您可以直接修改它们。
  • 没有getter / setter,
  • 私有是不可见的,受保护应该在同一个包范围内可见。

静态和最终有特殊目的:

  • 静态变量是"共享"跨所有实例
  • 最终一般不可修改。