第一部分:
构造方法Constructor(构造器)
一、构造方法的作用?
1.构造方法的执行分为两个阶段:对象的创建和初始化.这两个阶段不能颠倒,也不能分割.
2.在Java中,当我们使用关键字new时,就会在内存中创建一个新的对象,虽然对象已经被创建出来了,但还没有被初始化.而初始化则是在执行构造方法体时进行的.
二、构造方法如何定义?
1.[修饰符列表] 构造方法名[形参] { }
三.构造方法如何调用?
1.new 构造方法名(实参).
四.关于无参数构造方法:
1.如果一个类没有显示的定义任何构造方法,系统会默认提供一个无参数构造方法,也被称为缺省构造器.一旦显示的定义了构造方法,则缺省构造器将不存在.为了方便对象的创建,建议将缺省构造器显示的定义出来.
五、构造方法支持方法重载机制
六、关于构造代码块,对象的创建和初始化过程梳理:
1.new的时候在堆内存中开辟空间,给所有属性赋默认值.
2.执行构造代码块进行初始化.
3.执行构造方法体进行初始化.
4.构造方法执行结束,对象初始化完毕.
第二部分(代码区)
1.Student类
package oop09;
/*
* 构造方法/Constructor/构造器
*
* 1.构造方法有什么作用?
* 作用1:创建对象(通过调用构造方法可以完成对象的创建)
* 作用2:对象的初始化(给对象的所有属性赋值就是对象的初始化)
* 2.怎么定义构造方法呢?
* [修饰符列表] 构造方法名(形参列表){
* 构造方法体;
* }
* 注意:构造方法名必须和类名一致.
* 构造方法不需要提供返回值类型.
* 如果提供了返回值类型,那么这个方法就不是构造方法了,就变成普通方法.
*
* 3.构造方法怎么调用?
* 使用new运算符进行调用.
* 语法:new 构造方法名(实参);
* 注意:构造方法最终执行结束之后,会自动将创建的对象的内存地址返回,但构造方法体中不需要提供"return"值语句.
* 4.在Java语言中,如果一个类没有显示的去定义构造方法,系统会默认提供一个无参数的构造方法.(通常把这个构造方法叫做缺省构造器.)
* 5.一个类中如果显示的定义了构造方法,系统则不在提供缺省构造器,所有,为了对象创建更加方便,建议把无参构造方法写出来.
* 6.在java中,一个类中可以定义多个构造方法,而且这些构造方法自动构成了方法的重载(overload).
*/
public class Student {
// 无参数的构造方法显示的定义出来.
public Student(){
System.out.println("Student类的无参数构造方法执行了");
}
public Student(String name){
this.name = name;
}
public Student(String name, int age, boolean sex, String address) {
this.name = name;
this.age = age;
this.sex = sex;
this.address = address;
}
/*
* 姓名
*/
private String name;
/*
* 年龄
*/
private int age;
/*
* 性别
*/
private boolean sex;
/*
* 家庭住址
*/
private String address;
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 boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
2.测试类
package oop09;
public class ConstructorTest01 {
public static void main(String[] args) {
// 调用Student类的构造方法来完成Student类型对象的创建.
// s1就是一个引用,保存了内存地址,指向了Student类型的对象.
// 这样就完成了学生对象的创建和初始化.
// 无参数构造方法没有给属性手动赋值,但是系统会赋默认值.
Student s1 = new Student(); // 构造方法
// 通过调用另一个有参数的构造方法来创建对象,完成对象的初始化.
Student zhangsan = new Student("张三", + 20 , true ,"北京");
System.out.println("姓名: " + zhangsan.getName());
System.out.println("年龄: " + zhangsan.getAge());
System.out.println("性别: " + (zhangsan.isSex() ? "男" : "女"));
System.out.println("地址: " + zhangsan.getAddress());
}
}