Java 无法在构造函数中声明私有变量?

Java 无法在构造函数中声明私有变量?,java,constructor,Java,Constructor,我在用Java编程,我在编译下面的代码时遇到了麻烦。表达式的“非法开始”错误显示在 private final int YA; 但是,当我删除所有变量上的私有修饰符时,它可以很好地编译 我一直无法在网上找到解决方案,我的大部分搜索结果都是关于将构造函数私有化的问题,我不想这样做。真正让我感兴趣的是,我编写了另一个类,它遵循相同的格式,构造函数中的私有final变量,它编译时没有问题 我是Java新手,所以我可能会错过一些真正愚蠢的东西。如果是这样,请温柔一点 干杯,谢谢 public clas

我在用Java编程,我在编译下面的代码时遇到了麻烦。表达式的“非法开始”错误显示在

private final int YA;
但是,当我删除所有变量上的私有修饰符时,它可以很好地编译

我一直无法在网上找到解决方案,我的大部分搜索结果都是关于将构造函数私有化的问题,我不想这样做。真正让我感兴趣的是,我编写了另一个类,它遵循相同的格式,构造函数中的私有final变量,它编译时没有问题

我是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;

        }

    }

}

将成员移到构造函数之外:

private final int YA;

IndividualTaxCalculator(int inYearAssessment) {
  YA = inYearAssessment;
  // ..
}
请不要用大写字母命名非静态成员。这些用于常量

使用


相反。

将成员移出构造函数:

private final int YA;

IndividualTaxCalculator(int inYearAssessment) {
  YA = inYearAssessment;
  // ..
}
请不要用大写字母命名非静态成员。这些用于常量

使用


相反。

您只能在这样的成员上使用private/public/protected

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

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

只能在成员上使用private/public/protected,如下所示

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

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

在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;
        }
    }
}

在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;
        }
    }
}

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

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

阅读:阅读:final不也是大写的吗?我从未见过final是大写的。但是final值是常量。不,它不是。将其指定给后,它将被修复。一个常量是静态的final,对于一个类的每个实例都是一样的。是的,我也认为final变量应该大写,但我回顾了我的材料,它应该再次包含static。谢谢你指出这一点。我想投赞成票,但我认为我没有足够的声誉这么做。期末考试不也是资本化的吗?我从来没有见过用大写字母写的期末考试。但期末考试的价值是恒定的。不,它不是。将其指定给后,它将被修复。一个常量是静态的final,对于一个类的每个实例都是一样的。是的,我也认为final变量应该大写,但我回顾了我的材料,它应该再次包含static。谢谢你指出这一点。我想投赞成票,但我认为我没有足够的声誉这么做。