51CTO技术论坛 » Java » 求助:定义类的时候要不要给private变量赋初值?        上一帖     下一帖    查看完整版本

页: [1]

dorothyle2008-7-18 08:06
求助:定义类的时候要不要给private变量赋初值?

各位高手,大家好,我是java初学者,现在有一个关于定义类时要不要给private型变量赋初值的问题。
有一个类,叫做Tax, 以下是它的完整定义:
class Tax {
  public final static int SINGLE_FILER = 1;
  public final static int MARRIED_JOINTLY = 2;
  public final static int MARRIED_SEPARATELY = 3;
  public final static int HEAD_OF_HOUSEHOLD = 4;

  private int filingStatus = SINGLE_FILER;

  private int[][] brackets = {
    {27050, 65550, 136750, 297350}, // Single filer
    {45200, 109250, 166500, 297350}, // married filing jointly
    {22600, 54625, 83250, 148675}, // married filing separately
    {36250, 93650, 151650, 297350} // head of household
  };

  private double[] rates = {0.15, 0.275, 0.305, 0.355, 0.391};
  private double taxableIncome = 100000;

  public Tax() {
  }

  public Tax(int filingStatus, int[][] brackets, double[] rates,
    double taxableIncome) {
    this.filingStatus = filingStatus;
    this.brackets = brackets;
    this.rates = rates;
    this.taxableIncome = taxableIncome;
  }

  public void setBrackets(int[][] brackets) {
    this.brackets = brackets;
  }

  public void setRates(double[] rates) {
    this.rates = rates;
  }

  public double getTaxableIncome() {
    return taxableIncome;
  }

  public void setTaxableIncome(double taxableIncome) {
    this.taxableIncome = taxableIncome;
  }

  public int getFilingStatus() {
    return filingStatus;
  }

  public void setFilingStatus(int filingStatus) {
    this.filingStatus = filingStatus;
  }

  public double findTax() {
    double tax = 0;

    // Compute tax in the first bracket
    if (taxableIncome <= brackets[filingStatus][0])
      return tax = taxableIncome * rates[0];
    else
      tax = brackets[filingStatus][0] * rates[0];

    int i;

    // Compute tax in the possible 2nd, 3rd, 4th, and 5th brackets
    for (i = 1; i < brackets[0].length; i++) {
      if (taxableIncome > brackets[filingStatus][i])
        tax += (brackets[filingStatus][i] - brackets[filingStatus][i - 1]) *
          rates[i];
      else {
        tax += (taxableIncome - brackets[filingStatus][i - 1]) * rates[i];
        break;
      }
    }

    // Compute tax in the possible last bracket
    if (i == brackets[0].length && taxableIncome > brackets[filingStatus][i - 1])
      tax += (taxableIncome - brackets[filingStatus][i - 1]) * rates[i];

    return tax;
  }
}
这是题目给出的正确答案,它在定义这个类的时候给private型变量赋初值了,我现在有两个问题:
1. 我在测试这个类的时候,没给变量赋初值,而是直接在主程序里定义了两个Tax类的对象,然后用有参构造方法创建两个对象,同时赋给初值,程序运行得到了正确结果。那到底要不要在定义类的时候赋值呢?
2. 是不是任何一个类都应该有两个构造方法,有参和无参,如果在定义类的时候不赋初值,那是不是就必须要用有参构造方法给变量赋初值了呢?
    谢谢大家的帮助!

netgod2008-7-18 08:39
一般情况下,给private变量的赋值没有地方的限制,只要在它的作用域之内你都可以在自己需要的时候进行赋值就可以。
每个类都有一个默认的无参的构造方法的,如果要做变量初始化或者是传递对象处理就可以增加有参的构造方法。

一般建议用构造器来初始化private变量。

[[i] 本帖最后由 netgod 于 2008-7-18 16:40 编辑 [/i]]

dorothyle2008-7-18 09:18
netgod,感谢您的回复。
也就是说,如果我需要赋值,就要有有参构造方法,而且从规范的角度,从程序设计的角度看,都应该在有参构造方法里赋值。对吗?



相关文章:
分享JAVA程序设计视频教程
怎样自定义lookandfeel
JSP开发一个简单的模拟购物系统
怎样在netbeans里导入argouml源程序
(接)java的GUI界面怎么比windows的难看这么多

查看完整版本: 求助:定义类的时候要不要给private变量赋初值?


Powered by 51CTO.COM