1. 构造器(Constructor)
1.1 概念
- 1.1.1 定义:构造器是一种特殊的方法,在创建对象时自动调用,用于初始化对象的属性
- 1.1.2 与普通方法的区别:构造器名必须与类名完全一致,且没有返回值类型(连
void也不写)
1.2 格式
- 1.2.1 无参构造器:
public 类名() {
}- 1.2.2 有参构造器:
public 类名(数据类型 变量名, ...) {
this.成员变量 = 变量名;
}1.3 系统默认规则
- 1.3.1 不写任何构造器:系统自动提供一个无参构造器
- 1.3.2 已写任意构造器:无论有参无参,系统不再自动提供无参构造器,需手动补写
1.4 构造器重载
构造器同样支持重载,同一类中可以同时存在无参和有参构造器。
- 1.4.1 示例:
public Student() {
}
public Student(int age, String name, String gender) {
this.age = age;
this.name = name;
this.gender = gender;
}1.5 与 getter / setter 配合使用
- 1.5.1 有参构造器:创建对象时直接完成属性初始化,适合创建时就确定属性值的场景
- 1.5.2 无参构造器 + setter:创建后再逐个赋值,适合属性值需要动态修改的场景
// 有参构造器方式
Student stu = new Student(20, "锦涛", "男");
// 无参 + setter 方式
Student stu1 = new Student();
stu1.setAge(20);
stu1.setName("锦涛");1.6 匿名对象
- 1.6.1 定义:没有名字的对象,只有
new赋值,没有变量声明接收其地址 - 1.6.2 特点:因为无法获得该对象的地址,只能使用一次,使用完毕后立即标记为垃圾对象等待 GC 回收,释放内存节约资源
- 1.6.3 示例:
new Student().show(); // 调用一次方法后即成垃圾对象
new Student().setAge(20); // 赋值后无法再获取,意义不大
System.out.println(new Student().getAge()); // 每次 new 都是全新对象- 1.6.4 每次 new 都是独立对象:多次匿名创建同参数对象,地址值不同,
==比较结果为false
Student s1 = new Student(20, "张三", "男");
Student s2 = new Student(20, "张三", "男");
System.out.println(s1 == s2); // false,两个独立内存地址2. 示例代码
2.1 Demo03
package com.itszt.day04;
public class Demo03 {
public static void main(String[] args) {
// 有参构造器:创建对象时直接初始化属性
Student stu = new Student(20, "锦涛", "男");
System.out.println(stu.getName()); // 锦涛
System.out.println(stu.getAge()); // 20
System.out.println(stu.getGender()); // 男
// 无参构造器
Student stu1 = new Student();
}
}
class Student {
private int age;
private String name;
private String gender;
public Student() {
}
public Student(int age, String name, String gender) {
this.age = age;
this.name = name;
this.gender = gender;
}
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getGender() { return gender; }
public void setGender(String gender) { this.gender = gender; }
public void show() {
System.out.println("1000行代码");
}
}2.2 Demo04
package com.itszt.day04;
public class Demo04 {
public static void main(String[] args) {
// 匿名对象:只能使用一次,用完即成垃圾对象
new Student().show();
new Student().setAge(20);
System.out.println(new Student().getAge());
// 每次 new 都是独立对象,地址不同
Student s1 = new Student(20, "张三", "男");
Student s2 = new Student(20, "张三", "男");
System.out.println(s1 == s2); // false
System.out.println(s1);
System.out.println(s2);
}
}3. 总结
| 知识点 | 核心要点 |
|---|---|
| 构造器作用 | 创建对象时自动调用,初始化属性 |
| 命名规则 | 与类名完全一致,无返回值类型 |
| 无参构造器 | 不写任何构造器时系统自动提供 |
| 有参构造器 | 已写任意构造器后系统不再自动提供无参构造器 |
| 构造器重载 | 无参和有参可同时存在 |
this | 区分同名成员变量与参数 |
| 匿名对象 | 无变量接收,只能使用一次,用完等待 GC 回收 |
== 比较对象 | 比较的是地址值,内容相同但地址不同则为 false |