java实例变量和构造函数

时间:2015-06-02 04:06:38

标签: java arraylist parameters constructor instance

我一直在绞尽脑汁想要做研究,但我发现的并没有帮助我破解它。我在这一点上真的希望有人可以帮我指明一个明确的方向,或者告诉我到底我做错了什么和误会。我似乎无法理解和处理构造函数,以及新类实例的参数。请注意,我只是在学习,所以如果我使用了错误的条款,我会道歉。

public class CommissionCalculation 
{
    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in); // create scanner for user input from command window
        Employee employee = new Employee(employee.name, employee.totalSales, employee.totalIncome); //create instance of employee class

我得到的具体错误是实例参数employee.name,其中显示“变量员工可能尚未初始化”。但是,employee.totalSales和employee.totalIncome没有此问题。

我正在尝试将这些参数传递到ArrayList,如下所示。

  ArrayList <Employee> employeeList = new ArrayList<>();//create arraylist of employee class        
  employeeList.add(new Employee(employee.name, employee.totalSales, employee.totalIncome));

类代码是

class Employee //creates new class 
{
    String name;
    double totalSales;
    double totalIncome;

    public Employee(String Name, double TotalSales, double TotalIncome)
    {
        this.name = Name;
        this.totalSales = TotalSales;
        this.totalIncome = TotalIncome;
    }

    public String getName() 
    {
        return name;
    }
    public void setName(String name) 
    {
        this.name = name;
    }

    public double getTotalSales() 
    {
        return totalSales;
    }
    public void setTotalSales(double totalSales) 
    {
    this.totalSales = totalSales;
    }

    public double getTotalIncome()
    {
        return totalIncome;
    }
    public void setTotalIncome(double totalIncome)
    {
        this.totalIncome = totalIncome;
    }

    public String toString()
    {
        return "Name: "+ this.name + "\nTotal Annual Sales: "+ this.totalSales + "\nTotal Income Earned:" + this.totalIncome;
    }
}

非常感谢所有帮助和建议!

3 个答案:

答案 0 :(得分:2)

当您撰写Employee employee = new Employee(employee.name, employee.totalSales, employee.totalIncome)时,employee.name是您当前正在构建的员工的姓名。

你基本上说&#34;这个员工的名字应该是这个员工的名字&#34;,然后Java要求&#34;但是 这个员工的名字是什么? &#34;

如果你调用这样的构造函数,你必须使用具体值(或已经有值的变量)来调用它,例如Employee employee = new Employee("John Doe", "245", "1234.56")

如果您只想创建一个空员工,那么您必须拥有这样的构造函数:

public Employee() {
}

这将允许您稍后设置值。如果需要,还可以向其中的变量添加默认值。 您可以像这样调用构造函数:

Employee employee = new Employee();

顺便说一下,如果你根本没有定义任何构造函数,那么默认情况下会添加这个构造函数。 (在这种情况下,它被称为&#34;默认构造函数&#34;。)

答案 1 :(得分:0)

我认为你会找到employee.totalSales,而employee.totalIncome会遇到同样的问题:尝试用&#34; Fred&#34;替换employee.name并且您将看到语法错误移动到下一个参数。问题是传递给构造函数的值需要在调用构造函数之前有一个值。员工变量尚未初始化,因此他们没有值 - 这是编译器在语法错误中告诉您的。

答案 2 :(得分:0)

  

我得到的是实例参数employee.name,它说   “可变员工可能尚未初始化。”然而,   employee.totalSales和employee.totalIncome没有这个   问题

如果提供有效参数,则其他两个参数也会出现编译时错误。

Demo.java:3: error: variable employee might not have been initialized
    Employee employee = new Employee(null, employee.totalSales, employee.totalIncome);
                                           ^
Demo.java:3: error: variable employee might not have been initialized
    Employee employee = new Employee(null, 0, employee.totalIncome);
                                              ^

正如@Jake所建议的那样,有一个默认构造函数并初始化员工字段。