类 (Class)
🤔 OS:初学时,我们知道要把代码写成一步步的指令。但很快就会发现,很多指令需要被反复执行,非常繁琐。这时,"类"就像游戏里的"宏功能",能把一套复杂的操作打包成一个"大招",大大提升了我们的开发效率和代码质量。
-
官方术语 :类是一个模板,它描述了一类对象的共同属性 (attributes) 和行为 (behaviors)。
-
💡 个人理解 :
类,就是把解决某个问题的一套"方法"和所需"变量",封装成一个"类",以后直接用这个"类"就行,不用再一步步重复操作。 -
🎯 作用 : 类的主要作用就是作为创建对象的模板 。我们通过设计的类,来确保所有根据它创建出的对象,都是行为正确、数据安全的。
举个例子:从"搓招"到"一键发招"
在玩一个动作游戏时,一个新手玩家需要按顺序按 A(轻拳)、A(轻拳)、→(前)、B(重拳)才能打出一个简单的"连招"。这个过程不仅慢,还容易按错。
"类"就相当于一个"宏功能"或"自定义技能"。
我们可以设计一个类,它内部封装好了这一整套固定的按键顺序和逻辑。
以后,我们只需要创建一个这个技能的对象 ,然后调用它一个方法,角色就能瞬间、准确地打出这套连招。
- 类 -> (创建) -> 对象 -> (调用) -> 方法
一、 如何创建(定义)一个类?
创建类,就是编写它的"设计图"。这遵循一个固定的语法结构。
基本语法
codeJava
[修饰符] class 类名 {
// 1. 成员变量 (属性)
// 用来描述这类对象的状态
// 2. 构造方法 (Constructor)
// 用来初始化新创建的对象
// 3. 成员方法 (方法)
// 用来描述这类对象的行为
}
组成部分详解
-
[修饰符] (Modifier)
-
最常用的就是 public。public class MyClass 意味着这个类可以被项目中的任何其他代码访问。
-
如果不写(class MyClass),则为默认的包访问权限。
-
对于初学者,一律使用 public 即可。
-
-
class 关键字
- 这是Java的关键字,固定写法,告诉编译器你正在定义一个类。
-
类名 (Class Name)
-
你为这个类起的名字。
-
命名规范 : 必须遵循大驼峰命名法 (UpperCamelCase),即每个单词的首字母都大写,例如 Student, Car, ArrayList。
-
文件名必须和 public 类的类名完全一致(包括大小写),例如 Student 类必须保存在 Student.java 文件中。
-
-
{ ... } (类体)
- 大括号内是类的所有内容,包括下面要讲的三个核心组成部分。
二、 构造方法 (Constructor) - 类的"建造者"
构造方法是一个非常特殊的方法,它在你使用 new 关键字创建对象时被自动调用。
构造方法的核心规则
-
方法名必须与类名完全相同。这是辨别它的铁律。
-
没有返回值类型。连 void 都不需要写。
-
主要作用是初始化成员变量,为新生的对象赋予初始状态。
构造方法的组成
修饰符\] 构造方法名(\[参数列表\]) { // 方法体 } * **修饰符**: 通常是 public,与类的修饰符保持一致。 * **方法名**: 必须是类名。 * **参数列表**: 括号内的部分,可以为空,也可以包含一个或多个参数。 * **方法体**: {} 内的代码,用于执行初始化逻辑。 *** ** * ** *** #### **三、 无参构造方法 vs. 有参构造方法** 一个类可以提供多种不同的"建造方案",这就是通过**构造方法重载 (Overloading)** 实现的。最常见的就是提供"无参"和"有参"两种版本。 ##### **1. 无参构造方法 (No-Argument Constructor)** * **写法**: 构造方法的参数列表是空的 ()。 * **作用** : 提供一种快速、便捷的创建对象的方式,通常会为对象的属性赋予一个合理的**默认值**。 * **示例**: codeJava public class Student { private String name; private int age; // 这就是无参构造方法 public Student() { System.out.println("正在调用无参构造方法..."); this.name = "匿名"; // 赋予默认名字 this.age = 18; // 赋予默认年龄 } } * **如何调用**: codeJava // new 后面跟的括号是空的,就会自动匹配并调用无参构造方法 Student stu1 = new Student(); // stu1 对象一生下来,name就是"匿名",age就是18 * **⭐ 特殊规则:默认构造方法** * **如果你一个构造方法都不写** ,Java编译器会自动为你提供一个**看不见的、public的、方法体为空的**无参构造方法。 codeJava // 你只写了这样 public class Dog {} // 编译器会自动帮你变成这样 public class Dog { public Dog() {} // 自动添加 } // 所以你依然可以这样创建对象: Dog myDog = new Dog(); * **重要** :**一旦你手动写了任何一个构造方法(无论是有参还是无参),编译器就"罢工"了**,不再提供任何默认构造方法。 ##### **2. 有参构造方法 (Parameterized Constructor)** * **写法**: 构造方法的参数列表 () 中包含一个或多个参数。 * **作用** : 提供一种**定制化**的创建对象的方式,允许在 new 的那一刻,就通过参数将外部数据传递进来,对新对象进行精确的初始化。 * **示例**: codeJava public class Student { private String name; private int age; // 无参构造... // 这就是有参构造方法 public Student(String name, int age) { System.out.println("正在调用有参构造方法..."); // 使用 this 关键字,将参数的值赋给成员变量 this.name = name; this.age = age; } } * **如何调用**: codeJava // new 后面括号里的参数,其类型、个数、顺序 // 必须和某个有参构造方法的参数列表完全匹配 Student stu2 = new Student("张三", 20); // stu2 对象一生下来,name就是"张三",age就是20 *** ** * ** *** #### **四、 完整示例与总结** codeJava // Student.java public class Student { // 1. 成员变量 (属性) private String name; private int age; // 2. 构造方法 (多种创建方案) // 无参 public Student() { this.name = "新生"; this.age = 18; } // 有参 public Student(String name, int age) { this.name = name; this.age = age; } // 3. 成员方法 (行为) public void introduce() { System.out.println("大家好,我叫 " + this.name + ",今年 " + this.age + " 岁。"); } } // Test.java (使用Student类) public class Test { public static void main(String[] args) { // 调用无参构造,创建默认学生 Student defaultStudent = new Student(); defaultStudent.introduce(); // 输出: 大家好,我叫 新生,今年 18 岁。 // 调用有参构造,创建定制学生 Student customStudent = new Student("李四", 22); customStudent.introduce(); // 输出: 大家好,我叫 李四,今年 22 岁。 } } **总结**: * **创建类** 就是定义其**框架** (public class ...)、**属性** (成员变量) 和**方法** (成员方法)。 * **构造方法** 是类中一个特殊部分,负责**初始化** new 出来的新对象。 * **无参构造** 提供默认创建方式,**有参构造**提供定制化创建方式。 * 一个类可以有**多个**构造方法(重载),new 时传入的参数列表决定了调用哪一个。