Java - 如何创建一个可以在任何地方使用的变量?

时间:2013-08-30 03:25:22

标签: java variables loops

我想创建一个我可以在我的方法中使用的变量来改变我的方法之外的变量。作为视觉:(我顺便导入了扫描仪类)

public static void main(String[] args) {

    int quitVar = 1;
    Scanner scan = new Scanner(System.in);

    class IWantToQuit {
        public void quit() {
            quitVar++; //This is the problem area.
        }
    }
    IWantToQuit quiter = new IWantToQuit();
    while (quitVar == 1) {
        System.out.println("HELLO");
    System.out.println("Type QUIT to quit.");
    choice = scan.next();
    if (choice.equals("QUIT")) {
        quiter.quit();
    }

出于某种原因,它说内部变量quitVar是由内部类访问的,但它需要声明并且我已经声明了它。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:3)

这个local inner class因为在内部方法中定义了。本地内部阶级的规则是:

  

本地类可以访问其封闭类的成员。

     

此外,本地类可以访问局部变量。但是,一个   本地类只能访问声明为final的局部变量。

在这种情况下,quitVar是局部变量,因此您需要将其声明为final以在本地类中访问它。但是如果你声明它final,你就不能增加。

如果您希望此变量可访问,则定义为class variable而不是局部变量。

答案 1 :(得分:2)

其他人正在为您提供解决方案,但您真正想要做的并不是一个好主意。

大多数开发人员普遍认为全局变量是一种反模式 - 所以也许我们还可以做其他事情。

你正在增加一些东西,但是测试1,所以如果它被调用两次,你的代码就不会触发。

如果将int更改为布尔值,则使用访问器将其设置为quitter的成员变量,它将更好地工作。

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);

    class IWantToQuit {
        private boolean hasQuit = false;
        public void quit() {
            hasQuit = true;
        }

        boolean hasQuit() {
            return hasQuit;
        }
    }

    IWantToQuit quiter = new IWantToQuit();
    while (!quiter.hasQuit()) {
        System.out.println("HELLO");
        System.out.println("Type QUIT to quit.");
        String choice = scan.next();
        if (choice.equals("QUIT")) {
           quiter.quit();
        }
    }
}

答案 2 :(得分:0)

在main()方法之外声明变量quitVar并将变量声明为static

Declaring Member Variable

Variable Scope

static variable