字段在方法内不起作用

Gib*_*bbo 2 java

我有这个问题,更多的是一个查询,因为我实际上让它工作,但我不明白为什么,我目前正在学习java和阅读cengage第7版,这是练习之一.

所以我有这个方法:

public static void calculatePrice(){
        Scanner userInput = new Scanner(System.in);
        int orderNumber;
        double totalBill = 0;

        orderNumber = userInput.nextInt();
        switch(orderNumber){
        case 1:
            totalBill = totalBill + American;
            displayMenu();
            calculatePrice();
            break;
        case 2:
            totalBill = totalBill + Espresso;
            displayMenu();
            calculatePrice();
            break;
        case 3:
            totalBill = totalBill + Latte;
            displayMenu();
            calculatePrice();
            break;
        case 0:
            System.out.println("Your total bill will be $"+ totalBill);
            break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

本章教我决定,我决定在这种情况下使用开关.我有另一种方法询问用户问题.

这个方法的问题是字段:

double totalBill = 0;
Run Code Online (Sandbox Code Playgroud)

这不起作用,我不知道为什么,程序编译但它始终返回设定价格0,无论我在案例场景中的逻辑.

但是,当我从方法中删除该字段并将其放在顶部时,使其成为类宽:

private static double totalBill = 0;
Run Code Online (Sandbox Code Playgroud)

它工作正常,这是为什么?在方法中使用它似乎更聪明,因为没有其他方法需要使用它.

rge*_*man 5

您的totalBill变量在本地声明,因此每次调用此方法时它都会初始化为0.然后它会超出范围,直到下次调用它,0再次初始化为止.

随着private static double totalBill = 0;该法之外,现在它是一个static类变量,保留其值,无论多少次calculatePrice被调用.范围是整个类,而不仅仅是方法,并且在调用方法时不会重新初始化.