有人可以解释Java中的构造函数吗?

时间:2010-03-10 18:25:22

标签: java constructor

我正在通过阅读在线Java书籍学习Java,但我发现很难理解“构造函数”。我的问题是如何编写一个构造函数,将类的私有字段设置为接收的值?

我试过这个,但不认为它是正确的:

public Biscuit(String id, String Biscuitname, int numOfBiscuits);

所以,如果我有一个例子“12002 digestive 83”,我需要一个构造函数,将类的私有字段设置为接收到的这些值

希望这是有道理的

3 个答案:

答案 0 :(得分:15)

你走了:

public class Biscuit
{
    private final String id;
    private final String name;
    private final int count;

    public Biscuit(String id, String name, int count)
    {
        this.id = id;
        this.name = name;
        this.count = count;
    }

    // Other code
}

一些注意事项:

  • 由于参数和字段具有相同的名称,我必须在构造函数中使用this.foo = foo。有些人避免对参数和字段使用相同的名称,但我个人没有看到这个问题。
  • 我创建了字段finalprivate;字段应该几乎总是私有IMO,并尽可能最终 - 如果你可以使整个类型不可变,那就更好了。 (这导致更具功能性的编程风格,更易于推理和测试。)
  • 我已经更改了参数的名称 - 名称将是饼干的名称,因此无需在参数名称中指定,同样numOfBiscuits显然与饼干相关。

所有这些都有意义吗?如果你有问题,可以提出更多问题!

答案 1 :(得分:3)

您的尝试很好,但缺乏实施。 您应该在大括号中用分号分隔属性而不是分号。

答案 2 :(得分:1)

只需在构造函数的主体中设置字段即可。如果构造函数中的参数名称与类中的字段名称相同,那么您需要在类字段名称前加上this.,以“消除歧义” - 就像我在下面的“id”字段中所做的那样:

class Biscuit {
   private String id;
   private String biscuitname;
   private int numOfBiscuits;

   public Biscuit(String id, String name, String num) {
       this.id = id;
       biscuitname = name;
       numOfBiscuits = num;
   }
}