为什么会有构造方法?以及构造函数与set()/get()方法的区别?

1.为什么会有构造方法()?
需求:介绍一类人,属性:姓名、性别

e.g. 为司机这类人说明他们的姓名name,性别sex.

当然用方法来解决这个问题:

setName(String name);
 
setAge(int age);


两步精简于一步:
info(String name, int age)//注意,这并不是构造方法,因为info首字母没大写,所在并不是类名,也就不是构造方法
每次都要设定这个司机姓名和性别,就显得非常麻烦和啰嗦。
所以,可以考虑设定一个固定的结构:

第一句话说明:姓名           第二句话说明:性别

规定这种结构后,就可以直接在下面写姓名和性别。

这种方式类似于excel中建立一个表。

姓名  性别
王五
李四

以后,再想添加一个司机,就可以直接在下面添加一行,(张三,男)。

而不至于再添加说明:姓名、性别。(如下右边错误示例)

姓名  性别 
王五
李四


           :

错误示例(再输入姓名,性别)  
姓名 性别
王五

                
在第一列输入姓名,第二列输入性别,这就是相当于构造了一种结构。
而这是一种方法,故称之为:构造方法。

构造方法目的是:规定在默认的位置输入固定类型的值。


构造方法定义一定的属性,但不可能让所有的参数都添加进去,仅存储自身的属性..

其它的则使用setName来进行定义,需要用的时候再定义,这样可以最大的提升效率.

2.关于构造方法取名的事情?
构造方法的名称 = 类的名称

这样做的一个好处就是:可以见文知意,更方便理解。

同时,还可以避免与其它方法重名。

package com.junc.test;
 
public class Test {
    public static void main(String[] args) {
        Car car = new Car("王五","男");  //调用构造方法,指定第一个值输入:姓名,第二个值输入:性别
        System.out.println(car.getName());
    }
}
 
class Car {
    private String name;
    private String sex;
    
    public Car() {        //无参构造方法
    }
    
    public Car(String name, String sex) {    //有参构造方法
        this.name = name;
        this.sex = sex;
    }
    
    public void setName(String name) {  //怎么会有setXXX()方法
        this.name = name;
    }
    
    public String getName() {  //怎么会有getXXX()方法
        return name;
    }
}



看到这里就奇怪了,有构造方法,还要set()方法与get()方法干嘛?
两者的区别就在于:

*  构造方法主要用于:定义一种规则,初始化值

*  setXXX()与getXXX()主要用于:修改值,获取值。

3. 思考一个问题?
如果构造器参数有多个怎么办?

比如说,人有姓名、性别、年龄、体重、身高、出生年月、出生地址......

这种情况在做项目中必然是会遇到的,就算开始没有遇到,随着项目的需要,也是需要可扩展。

如果写成:

public Car(String name, String sex,String age, String weight, String height, String born, String address) {    
        this.name = name;
        this.sex = sex;
....
 }


那么,当调用的时候,怎么保证不写错?
Car car = new Car("王五","男",“?”,“?”,“?”,......);
你知道后面对应的哪个空写哪个么?
万一写反了怎么办,写反后不会报错,但是结果不对呀。不报错才是最大的问题,都不容易找到问题出现在哪里!

最好的办法就是使用builder模式。

这是后期深入的时候再考虑的问题。

为什么要现在先提出这个问题呢?

因为我们在学习一样知识的时候,要知道它能做什么,它不能做什么。

先有一个概念,后期再深入。
--------------------- 
转载:https://blog.csdn.net/w83325887/article/details/52150499 
 

猜你喜欢

转载自blog.csdn.net/qq_43690617/article/details/88779040
今日推荐