2010-10-04 167 views
1

好的,我有一个任务,我必须创建一个具有一组私有属性的类,我已经完成了这个任务。它很棘手,因为我对Java编程还是比较陌生的(或者一般的编程),而且在封装时不太习惯。我之前没有使用getters/setter或构造函数。我了解getter/setter方法,但尚未了解构造函数的任何在线信息,甚至不了解其用途。构造函数(java)

我必须为每个属性创建getters/setters和构造函数,所以看起来我应该学会使用这些方法。如果任何人都可以给我一个具有构造函数的类的例子,并解释构造函数在做什么,为什么我会使用它,这将是很好的。

谢谢你的时间提前。

+0

SO不是维基百科的替代品 - 远离它:http://en.wikipedia.org/wiki/Constructor_(object-oriented_programming)。第一个例子是Java。 (或者更好的是,写一本好书,你还有很多东西需要学习;)) – 2010-10-04 21:43:21

+0

简而言之,一个构造函数*构造*你的对象。 – 2010-10-04 21:45:32

+0

“我对Java编程(或一般编程)相当陌生”因此,你以前使用过另一种编程语言吗?哪一个? – mschonaker 2010-10-04 22:18:26

回答

4

首先,欢迎来到编程世界:)

让我们看一个简单的例子。

假设你想编程一个类来表示一个Square。当你创建一个Square对象时,你必须给Square一些属性,比如每边的长度。这是施工人员进场的地方。

类的布局看起来像这样,注意length_of_each_side变量没有赋值。

public class Square { 
    int length_of_each_side; 

    public Square() { 
    ... 
    } 

    public Square(int length) { 
    ... 
    } 
} 

如果你不指定正方形的大小,你可以有一个默认的构造函数给你一个预定义的Square。

public Square() { 
    length_of_each_side = 1; 
} 

也可以允许。如果我想创建一个预先定义的广场(长度1)有人到指定方

public Square(int length) { 
    length_of_each_side = length; 
} 

的大小,它看起来像这样

Square mySquare = new Square(); 

如果我想创建一个Square并指定长度为55,它看起来像这样

Square mySquare = new Square(55); 
+0

伟大的,简单的解释,更不用说容易扩展,如果你想解释构造函数时处理遗传/多态性。 – Crag 2010-10-04 22:31:07

2

我不确定你是如何看待这个在学校或你的老师告诉你什么,但只是一个建议 - 不要使用吸气剂和安装者作为习惯的问题。有一个原因,他们不是Java中的“自动”,这是因为他们真的不应该在那里。

当你有一个对象时,想法是要求对象为你做点事情 - 换句话说,你应该提供一些方法来为你变量,而不是获取变量并对其进行操作回来了。

有很多时候你不能避免吸气 - 但只有在你确定需要吸气时才能加入,而不是习惯。

您的构造函数是设置所有成员变量的最佳位置。事实上,如果你使变量成为最终的(一个非常好的习惯,使得这个类是“不可变的”),构造函数将是唯一可以赋值的地方。

当你的对象被创建时,你的构造函数被保证被调用,所以它是一个设置对象的好地方。在你的构造函数中,如果你确保对象处于有效状态并且你有最终的成员变量,那么不可能让你的对象进入无效状态 - 这是一个非常方便的练习,可以为你节省大量的调试时间。