构造方法的作用:创建对象,并完成对象的初始化。(说白了就是new一个对象,并对对象的属性值进行设置)
其实也是对代码的简化。
构造方法:
- 没有返回值,
- 方法名与类名相同
- 构造方法永远出现new之后
无参构造:
此方法可以不写,因为系统会自动为类生成一个无参构造,一旦写了就会覆盖JVM默认的无参构造。(至于为什么系统里会有默认的无参构造,那就要问问java的创始人了)
public class People1 {
String name;
boolean sex;
int age;
public static void main(String[] args) {
// 为People1z创建了新对象,new出的原因是因为系统内部已有默认的无参构造,供其调用
People1 people = new People1();
people.name = "lihua";
people.age = 18;
people.sex = true;
}
}
有参构造:
(如果是在封装的基础上,有参构造 = 无参构造 + setter方法)
【有事没事代码说话,最为直观】
public class People1 {
String name;
boolean sex;
int age;
public People1(String name1,boolean sex1,int age1) {
this.name = name1;
this.sex = sex1;
this.age = age1;
}
public static void main(String[] args) {
People1 people = new People1("lihua",true,18);
// 有参构造就可以省下了下面这一步,一行搞定。
// people.name = "lihua";
// people.age = 18;
// people.sex = true;
System.out.println(people.name);
}
}
- 在有有参构造的程序里能否写无参构造?
当我们在有有参构造的程序创建一个无参对象时,即 People1 person = new People1();
此时会显示【The constructor People1() is undefined】的报错信息,即People1()未定义。
这时我们在 People1 类中定义一个无参构造即可。
此时就有了我们上面说的覆盖,覆盖这个问题还有待我去认真琢磨一下,哈哈哈,学习ing…
以下是设置初始值的几种方法
类似于给刚生下来的小孩设置初始值
// 对象的初始化 1
People lisi = new People();
lisi.name = "lisi";
lisi.sex = true;
lisi.weight = 4;
lisi.height = 0.4;
---------------------------------------------------------------
People zhangsanPeople = new People();
// 对象的初始化 2
// 该设置初始值方法是在封装的基础上
zhangsanPeople.setName("zhangsan");
zhangsanPeople.setAge(1);
zhangsanPeople.setWeight(4);
---------------------------------------------------------------
// 对象的初始化 3
// 在有参构造的基础上,对初始化 2 代码的简化
People lisiPeople = new People("zhangsan", 1, 4);
直接生成构造体
雷同对比:
(和创建数组的对比)