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