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

ps:随着不断的理解,本文不定期更新,如有不理解的地方,请留言说明。

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;
	}
}
</span>
看到这里就奇怪了,有构造方法,还要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模式。

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


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

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

先有一个概念,后期再深入。

ps:本贴随着学习的加强,不定期更新......

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值