linkin大话面向对象--构造器详解

  

对象的产生格式:类名称  对象名 = new  类名称();

因为有(),所以是方法,实际上它就是构造方法,并且是非私有的构造方法。如:CellPhone cp = new CellPhone();



构造器是一个特殊的方法,这个特殊方法用于创建实例时执行初始化。构造器是创建对象的重要途径,即使使用工厂模式,反射等方式创建对象,其实质依然是依赖于构造器,因此,java类必须包含一个或者一个以上的构造器。一旦自己显示的写了构造方法,那么java就不再为我们提供那个隐式的无参构造方法了。

特点:1,方法名与类名相同 2,不用定义返回值类型  3,不需要写return语句

作用:给类中的字段进行初始化,可以用来创建对象。

注意:多个构造方法是以重载的形式存在的。可以使用this在一个构造器中调用另外一个构造器。



构造器是创建java对象的途径,但不是说构造器完全负责创建java对象。实际上,当程序员调用构造器的时候,系统会先为该对象分配内存空间,并为这个对象执行默认初始化,这个对象在构造器执行前就已经完成了。所谓的调用构造器来new对象,不过就是将上面那个已经存在的对象作为构造器的返回值来返回,通常还会赋给另一个引用类型的变量,从而让外部程序可以访问这个对象。



通常建议为java类保留无参数的默认构造器,养成这种良好的习惯。

在软件开发中有一个规则,就是不要把相同的代码书写2次以上,充分的利用每一段代码,这样子可以让程序代码更加简洁,也可以降低软件的维护成本。



  •  
    setter方法和构造方法都可以用来初始化字段的值,那么什么时候用构造方法什么时候用setter?

1,当字段的值是和类的对象紧密相关不可分割的时候,用构造方法,就是说我要有这个实例,就必须有这个字段值,就用构造方法。

 2,需要初始化的字段值不太多的时候可以用构造方法,如果字段值太多,构造方法的参数列表太。。。了。

 3,其他时候都可以用setter方法。

//测试构造器重载
public class ConstructorOverLoad {
private String name;
private int age; //默认的构造器
public ConstructorOverLoad(){ } public ConstructorOverLoad(String name){
this.name = name;
} public ConstructorOverLoad(String name,int age){
//通过this调用另一个重载的构造器的初始化代码
this(name);
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public static void main(String[] args) {
ConstructorOverLoad linkin = new ConstructorOverLoad();
ConstructorOverLoad linkin1 = new ConstructorOverLoad("linkinPark");
ConstructorOverLoad linkin2 = new ConstructorOverLoad("linkinPark",25);
} }
  • 如何写出一个设计很好的类?

分析思路:

根据要求写出类所包含的字段;

所有的字段都必须私有化;

封装之后的字段可通过setter和getter设值和取得;

按需求可添加若干构造方法;

根据需求可添加相应的方法;

类中的所有方法都不要直接处理(输出打印),而是交给调用者去处理。



上一篇:java集合之HashMap源码解析


下一篇:线段树 || BZOJ1756: Vijos1083 小白逛公园 || P4513 小白逛公园