1.类与对象的定义
类是一种抽象的数据类型,它描述了具有共同属性和行为的一组对象的集合。而对象是类的实例。在Java中,你使用关键字new
来创建类的实例,即对象。每个对象都是类的一个具体实现,它拥有类中定义的所有属性和方法。
这么讲可能有点难懂,我换个说法。拿我们人类为例,人类就是类,我们身为人类,每一个人都是“人”这个类的实例也就是对象,每个人都是“人”这个类的具体实现,每个人都有作为人的基本属性。
2 .类与对象的创建
2.1类的创建
类定义了对象的结构,包括:
- 属性:也称为成员变量,用于存储对象的状态信息。
- 方法:定义了对象可以执行的操作或行为。
- 构造函数:特殊的方法,用于在创建对象时初始化对象。名字应当与类相同
public class Person {
// 属性,成员变量
String name;
int age;
// 方法
void introduce() {
System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
}
// 构造函数
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
大部分类都是由class修饰的,在这里,Person就是一个类。
2.2对象的创建
我们需要使用关键字 new 来创建对象。
public class Main {
public static void main(String[] args) {
// 创建Person类的对象
Person person1 = new Person("Alice", 30);
// 调用对象的方法
person1.introduce(); // 输出:Hello, my name is Alice and I am 30 years old.
}
}
这里我们就是创建了一个新对象 person1 ,它存储了name
为"Alice"和age
为30的信息,并且可以调用 introduce
方法来输出其介绍信息。
3.this的用法
在类的创建里,我们我们会发现 this 的字眼 ,那么它究竟有什么用呢?
3.1. 区分成员变量和局部变量
public class Person {
String name; // 成员变量
public void setName(String name) {
this.name = name; // 使用this来引用成员变量name
}
public String getName() {
return this.name; // 同样,可以使用this,但在这里不是必需的,因为name只出现了一次
}
}
假如成员变量和方法中的临时变量一样的话,由于编译器会默认使用局部变量,除非明确指定使用 this
来引用成员变量,否则二者很容易混淆。
3.2. 调用当前类的其他构造器
在类中,构造方法是可以重载的
public class Person {
String name;
int age;
String email; // 新增的字段
// 第一个构造器,只初始化name
Person(String name) {
this.name = name;
}
// 第二个构造器,通过调用第一个构造器来初始化name,并额外初始化age
Person(String name, int age) {
this(name); // 使用this调用第一个构造器,传递name参数
this.age = age;
}
// 第三个构造器,通过调用第二个构造器来初始化name和age,并额外初始化email
Person(String name, int age, String email) {
this(name, age); // 使用this调用第二个构造器,传递name和age参数
this.email = email;
}
// 其他方法...
}
我们可以看到三个,this 后面直接跟参数,编译器会自动找到对应的结构方法,通过这种方式,我们可以通过少量的代码来复用构造器之间的初始化逻辑,从而避免代码重复,并使类的结构更加清晰和易于维护
注意:this() 必须是构造器中的第一条语句。
3.3. 返回当前对象的引用
通过返回当前对象的引用,我们可以在一行代码中连续调用多个方法,这通常被称为链式调用或流式接口。可以连续调用嘛,就和链子一样。
public class User {
private String name;
private int age;
private String email;
// 构造器
public User() {}
// setName方法,返回当前对象的引用
public User setName(String name) {
this.name = name;
return this; // 返回当前对象的引用
}
// setAge方法,返回当前对象的引用
public User setAge(int age) {
this.age = age;
return this; // 返回当前对象的引用
}
// setEmail方法,返回当前对象的引用
public User setEmail(String email) {
this.email = email;
return this; // 返回当前对象的引用
}
// 示例:使用链式调用来设置User对象的属性
public static void main(String[] args) {
User user = new User()
.setName("John Doe")
.setAge(30)
.setEmail("john.doe@example.com");
// 现在user对象已经设置好了所有属性,可以使用它...
}
}
这里的 User 类 有三个成员变量,之前我们可能需要写三行代码分别输入,但现在就可以一行调用多个方法,一行输入了。
4.构造方法
-
名称与类名相同:构造方法的名称必须与类名完全相同(包括大小写)。
-
没有返回类型:构造方法没有返回类型,连
void
都不写。如果写了返回类型,那么它就不再是构造方法,而是一个普通方法。 -
自动调用:构造方法是在创建对象时自动调用的,你不能直接调用构造方法,但可以通过
new
关键字来间接调用。 -
可以有多个(可以重载):一个类可以有多个构造方法,只要它们的参数列表不同(这称为构造方法的重载)。
-
初始化对象:构造方法的主要作用是初始化对象的状态,即给对象的成员变量赋初值。
-
默认构造方法:如果一个类没有显式定义任何构造方法,则编译器会自动提供一个无参的默认构造方法。但是,一旦你定义了至少一个构造方法,编译器就不会再提供默认构造方法了。
-
可以通过this调用,但不能构成环:比如
这样来回调用就是不行的。
未完待续~