【问题标题】:Cannot declare private variables in constructor?不能在构造函数中声明私有变量?
【发布时间】:2014-03-12 14:01:30
【问题描述】:

我正在使用 Java 进行编程,但无法编译以下代码。错误(表达式的非法开始)显示在

private final int YA;

但是,当我删除所有变量的 private 修饰符时,它编译得很好。

我无法在网上找到解决方案,而且我的大部分搜索最终都针对有关将构造函数设为私有的问题(我不想这样做)。真正让我感动的是我编写了另一个遵循相同格式的类,构造函数中的私有最终变量,并且编译没有问题。

我是 Java 新手,所以我可能会在这里遗漏一些非常愚蠢的东西。如果是这样,请温柔。

干杯,谢谢。

public class IndividualTaxCalculator {

    IndividualTaxCalculator(int inYearAssessment) {

        private final int YA;
        YA = inYearAssessment;

        switch (YA) {

            case 2013:

                private float netEmploymentIncome;      // BTC cell H16
                private float totalIncome;              // BTC cell H27
                private float assessableIncome;         // BTC cell H31
                private float chargeableIncome;         // BTC cell H49
                private float taxPayableOnChargeable;   // BTC cell H51
                private float incomeTaxRebate;          // BTC cell H53
                private float taxPayableAfterRebate;    // BTC cell H55
                private float parenthoodTaxRebate;      // BTC cell H57
                private float netTaxPayable;            // BTC cell H59

                break;

        }

    }

}

【问题讨论】:

标签: java constructor


【解决方案1】:

将成员移出构造函数:

private final int YA;

IndividualTaxCalculator(int inYearAssessment) {
  YA = inYearAssessment;
  // ..
}

请不要以大写字母命名非静态成员。这些用于常量。

使用

private final int ya;

改为。

【讨论】:

  • final不也是大写的吗?
  • 我从未见过用大写字母写的final
  • 但最终值是不变的。
  • 不,不是。它在分配给它之后被修复。一个常量是static final,对于一个类的每个实例都是一样的。
  • 是的,我还认为final 变量应该大写,但我查看了我的材料,它应该再次包含静态。感谢您指出了这一点。我会投票,但我认为我没有足够的声誉来投票。
【解决方案2】:

您只能像这样在成员上使用私有/公共/受保护

public class IndividualTaxCalculator {
    private int foo;
    private int bar;
    ....
}

在方法中声明变量时,该变量只能在方法中访问。

【讨论】:

    【解决方案3】:

    当你在 Java 中创建一个类时,它的成员变量必须在类内部声明,但在任何方法之外。成员变量是您希望在类的任何方法中访问的变量,并且是需要访问修饰符的变量,例如 private。

    因此,我对您的代码的建议是将所有变量移动到在构造函数之外声明,并在 YA==2013 时在构造函数中初始化它们。所以,稍微重构一下你的代码:

    public class IndividualTaxCalculator {
        private float netEmploymentIncome;      // BTC cell H16
        private float totalIncome;              // BTC cell H27
        private float assessableIncome;         // BTC cell H31
        private float chargeableIncome;         // BTC cell H49
        private float taxPayableOnChargeable;   // BTC cell H51
        private float incomeTaxRebate;          // BTC cell H53
        private float taxPayableAfterRebate;    // BTC cell H55
        private float parenthoodTaxRebate;      // BTC cell H57
        private float netTaxPayable;            // BTC cell H59
    
        IndividualTaxCalculator(int inYearAssessment) {
            switch (inYearAssessment) {
                case 2013:
                    // Initialize the variables here
    
                    break;
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      不,你不能......你可以在构造函数之外声明这些私有变量,你可以给它们赋值。

      【讨论】:

        猜你喜欢
        • 2017-11-13
        • 2018-10-14
        • 2015-07-14
        • 1970-01-01
        • 1970-01-01
        • 2021-06-11
        • 1970-01-01
        • 2012-10-10
        • 2019-01-21
        相关资源
        最近更新 更多