返回首页

类,对象,属性,构造方法,方法,this

2100 字 11 分钟

开发必须掌握 类、对象、属性、方法、构造方法和 this。后续 Spring Boot 项目中的 User、Task、DTO、Entity 都建立在这些概念上。

  • 类和对象有什么区别?
  • 构造方法有什么作用?
  • this 表示什么?

昨天使用两组数组保存学生: String[] studentNames = new String[10]; int[] scores = new int[10]; 同一名学生的数据依靠相同下标关联: studentNames[0]:张三 scores[0]:85 这种方式可以运行,但存在问题:

  • 姓名和成绩是分开的,容易出现下标对应错误。
  • 如果增加年龄,还要增加一个数组。
  • 每个方法都要传入很多数组。
  • 无法直接表达“一个学生拥有姓名和成绩”。

类可以把属于同一个事物的数据和行为组织在一起。

类是什么

public class Student {
String name;
int score;
public void printInfo() {
System.out.println("姓名:" + name + ",成绩:" + score);
}
}

逐行理解:

public class Student

定义一个名为 Student 的类。

String name;
int score;

定义学生具有的属性,也常称为成员变量或字段。

public void printInfo()

定义学生对象能够执行的方法。 类是我们定义的一种数据类型,也可以理解为对象的设计说明: 类包括 属性(具有的属性也称为成员变量或字段) 和方法(对象能够执行的方法);

对象是什么 类只是定义,必须根据类创建具体对象: Student student1 = new Student(); 可以分成:

Student student1 new Student()
变量类型 变量名 创建Student对象

然后给这个对象的属性赋值:

student1.name = "张三";
student1.score = 85;

调用这个对象的方法:

student1.printInfo();

输出:

姓名:张三,成绩:85

再创建一个对象:

Student student2 = new Student();
student2.name = "李四";
student2.score = 90;

student1student2 来自同一个类,但代表两个相互独立的学生。

实际后端用途 以后接收注册请求时,JSON数据可能会转换为一个对象:

姓名、密码、邮箱
User对象
Service处理
保存到数据库
`new Student()` 创建的是对象,不是再次创建一个类。
类只需要定义一次,可以根据它创建很多对象。
`student1.name` 中的 `student1` 和 `name` 分别是什么?
`student1` 是 `Student` 类的一个实例。
更准确地说:
- `student1` 是引用变量的名字。
- 它保存了一个 `Student` 对象的引用。
- `student1.name` 表示访问该对象的 `name` 属性。
`src` 源代码目录 默认包
类=属性+方法
public class name{
属性:
int score;
方法
public void printInfo() {
System.out.print("");
}
}
对象由类创建
name name1=new name();
public boolean isPassed() {
boolean passed =false;
// 布尔命名优化
// boolean isFirstStudentPassed = firstStudent.isPassed();
if (score >= 60) {
passed = true;
}
return passed;
//简化为return score >= 60;
}
## 模块二:构造方法
放在属性之后、其他方法之前:
构造方法负责在创建对象时完成初始化:
为什么添加有参数构造方法后,`new Student()` 会报错?定义了构造方法后,Java不再自动赠送默认的无参数构造方法。

public Student(String name, int score) { this.name = name; this.score = score; } 构造方法特点:

  • 方法名必须与类名相同。
  • 没有返回类型,连 void 都不能写。
  • 执行 new Student(...) 时自动调用。
  • 通常用于设置对象的初始状态。 创建对象可以改成: Student firstStudent = new Student(“张三”, 85); Student secondStudent = new Student(“李四”, 55);

this 是什么 构造方法中同时出现两个 name: this.name = name;

  • this.name:当前对象的属性。
  • name:调用构造方法时传入的参数。

this.属性 区分成员变量与参数。

  • 左侧 this.name:当前这个对象的 name 属性。

  • 右侧 name:构造方法收到的参数。 Java项目通常让参数名和属性名相同: 但是两边都会优先表示参数,相当于把参数赋给参数自己,对象属性仍然没有得到正确赋值。

Student student = new Student(“王五”, 90); 进入构造方法时,请回答:

  1. 右侧参数 name 的值是什么?
  2. this.name = name 执行后,对象的 name 属性是什么?
  3. 构造方法里的 this 指向哪个对象?
    • 参数 name 的值:"王五"
  • 执行后对象的 name 属性:"王五"

  • this:不是字符串“王五”,而是当前正在创建的整个 Student 对象。

    this → 整个学生对象 this.name → 这个对象的姓名属性 name → 构造方法收到的姓名参数 “王五” → 参数和属性中保存的字符串值

模块三:对象之间的关系#

实际业务中,一个对象经常需要引用另一个对象。 其他对象可以作为莫一个对象的属性来应用 构造方法也可以接收对象 【开发必须掌握】对象可以作为属性、参数和返回值。
【面试表达】这种“一个对象拥有或关联另一个对象”的关系常被称为 has-a 关系。
【以后深入】一对一、一对多、多对多会在数据库和项目设计阶段学习。

模块四:对象数组#

应用练习:对象数组统计 以前用平行数组保存学生: String[] studentNames; int[] scores; 现在可以直接创建学生对象数组: Student[] students = new Student[3]; 注意:这句话只创建了三个用于保存对象引用的位置,没有创建三个学生。刚创建时: students[0] = null students[1] = null students[2] = null 还需要分别放入对象: students[0] = new Student(“张三”, 85, javaClass); 或者使用数组初始化: Student[] students = { firstStudent, secondStudent }; 遍历时,每个数组元素都是一个 Student 对象: students[index].printInfo(); 含义是: 取得下标index中的Student对象 → 调用这个对象的printInfo方法

挑战题:返回最高分学生对象 之前的方法可以返回基本类型:

public static int calculateTotal(...) {
return ...;
}

方法也可以返回一个对象:

public static Student findTopStudent(Student[] students) {
// 返回一个Student对象
}

这里返回 Student 对象

实际后端开发中经常出现:

根据用户编号查询 → 返回User对象 根据任务编号查询 → 返回Task对象

Student topStudent=findTopStudent(students);
System.out.println(“最高分学生:”);
topStudent.printInfo();
}
public static Student findTopStudent(Student[] students) {
Student topStudent= students[0];
for(int index=0;index<students.length;index++) {
if(students[index].score>topStudent.score) {
topStudent=students[index];
}
}
return topStudent;
} 面1 Student student = new Student("张三", 85, javaClass); 中:

  • Student 是什么?
  • student 是什么? ``` student
不是对象本身,而是一个引用变量,它保存了新建对象的引用。初学阶段说“student对象”可以交流,但面试时应更准确。
- `new Student(...)` 做了什么?
`new Student(...)` 创建的是 Student 对象。
一个类可以创建多个对象 这些对象的属性是否必须相同?为什么?
类是对一类事物共同属性和行为的定义,对象是根据类创建的具体实例。`Student` 是类型,`student` 是保存对象引用的变量,`new Student(...)` 创建对象、调用构造方法并返回对象引用。一个类可以创建多个对象,每个对象拥有各自的实例属性,因此属性值不必相同。
面2
- 为什么构造方法不能写 `void`?
构造方法不是普通方法。Java规定构造方法不能声明任何返回类型,连 `void` 都不能写。如果写了就变成普通方法了,就不是构造方法,也不会在new Student()时自动执行
- 它在什么时候自动执行?
构造方法会在使用 `new` 创建对象时自动执行。
- `this.name` 和右侧的 `name` 分别表示什么?
`this.name`:当前对象的成员属性。
右侧 `name`:构造方法的参数,不是类的属性。
- 如果写成 `name = name`,可能产生什么结果?
不只是“不方便阅读”。由于参数 `name` 会遮住同名属性:
name = name;
两边都表示参数,相当于把参数赋值给自己。对象的 `name` 属性没有被修改,仍然是默认值:
null
观察:

Classroom javaClass = new Classroom(“Java一班”);

Student firstStudent = new Student(“张三”, 85, javaClass); Student secondStudent = new Student(“李四”, 55, javaClass);

javaClass.className = “Java二班”;

请回答:
1. 这里一共创建了几个 `Classroom` 对象?
创建了1个 `Classroom` 对象。
判断对象数量最直接的方法是数 `new`:

Classroom javaClass = new Classroom(“Java一班”); // 一次new

两名学生只是保存了同一个对象的引用,并没有重新创建班级。
类,对象,属性,构造方法,方法,this
https://335264.xyz/posts/第6天/
作者
刺儿菜
发布于
2026-09-09
许可协议
CC BY-NC-SA 4.0
Comments

评论