Java 面向对象入门:初识类、对象与构造方法 ✨
Java 是一门面向对象的编程语言。理解面向对象的思想是掌握 Java 的关键。今天,我们将从最基础的概念入手,探索类和对象的奥秘,学习如何创建它们,以及如何使用构造方法初始化对象。
🤔 什么是类?什么是对象?
- 现实世界的映射:我们的现实世界由各种各样的“对象”组成,比如人、汽车、书籍等。基于这些具体的对象,我们可以抽象出它们的“类型”或“类别”,这就是“类”的概念。
- 对象:软件中真实存在的、具有独立特性的个体。
- 类:类型或类别,代表一类个体的通用描述。
- 模子与实例:类可以理解为对象的模子、模板或图纸,它定义了这一类对象有哪些属性和行为。对象则是类的具体实例,根据类的模板创建出来的实体。一个类可以创建出多个不同的对象。
- 类的组成:类通常包含两个核心部分:
- 📊 对象的属性/特征/数据:这在类中被称为成员变量,用来描述对象的静态特征。
- ⚙️ 对象的行为/动作/功能:这在类中被称为方法,用来描述对象的动态能力。
🏗️ 创建类与对象:从蓝图到实体
理解了类和对象的概念后,我们来看如何在 Java 中创建它们。
-
创建类:使用
class关键字定义一个类,并在其中定义成员变量和方法。public class Student { // 自己创造的一种数据类型 // 成员变量 --- 描述对象的属性 String name; int age; String className; String stuId; // 方法 ------ 描述对象的行为 void study(){ System.out.println(name+"在学习..."); } void sayHi(){ System.out.println("大家好,我叫"+this.name+",今年"+this.age+"岁了,所在班级为"+this.className+",学号为:"+this.stuId); } void playWith(String anotherName){ System.out.println(this.name+"正在和"+anotherName+"一起玩..."); } } -
创建对象:使用
new关键字根据类创建对象。// 声明 Student 类型引用 zs 指向一个学生对象 // Student 是数据类型 (引用类型) // zs 是引用类型变量 (引用) // = 指向 // new Student() 创建对象 Student zs = new Student(); -
访问成员:使用对象的引用变量和点运算符 (
.) 来访问对象的成员变量和调用方法。public class StudentTest { public static void main(String[] args) { // 创建一个学生对象 zg Student zg = new Student(); // 访问成员变量并赋值 zg.name = "张光"; zg.age = 22; zg.className = "jsd2309"; zg.stuId = "001"; // 调用方法 zg.study(); zg.sayHi(); zg.playWith("李林"); // 创建另一个学生对象 ll Student ll = new Student(); ll.name = "李林"; ll.age = 23; ll.className = "jsd2309"; ll.stuId = "002"; ll.study(); ll.sayHi(); ll.playWith("张光"); // 创建一个没有手动赋值成员变量的学生对象 zl // 1) 创建了一个学生对象 // 2) 给所有成员变量赋默认值 (name, className, stuId 默认 null, age 默认 0) Student zl = new Student(); zl.study(); // 输出 "null在学习..." zl.sayHi(); // 输出 "大家好,我叫null,今年0岁了,所在班级为null,学号为:null" zl.playWith("张光"); // 输出 "null正在和张光一起玩..." } }默认值规则:
- byte, short, int, long, char:
0 - float, double:
0.0 - boolean:
false - 引用类型 (如 String):
null
- byte, short, int, long, char:
👋 this:指代当前对象
this 是一个特殊的关键字,它指代当前正在调用方法的那个对象。
- 使用位置:
this只能用在方法中。 - 默认存在:在方法中访问成员变量时,前面默认隐藏着一个
this.。 - 主要用法:
this.成员变量名:访问成员变量 (必须掌握)。当成员变量与方法中的局部变量同名时,若想访问成员变量,则this不能省略。this.方法名():调用方法 (一般不用)。this():调用构造方法 (一般不用)。
⚙️ 构造方法:初始化对象的利器
构造方法是一种特殊的方法,主要作用是给对象的成员变量赋初始值。它在创建对象时被自动调用。
-
作用:给成员变量赋初始值。
-
语法:
- 方法名与类名完全相同。
- 没有返回值类型 (连
void都没有)。
-
调用:在创建 (new) 对象时被自动调用。
-
默认构造方法:如果你自己不编写任何构造方法,Java 编译器会默认提供一个无参构造方法。一旦你编写了任何构造方法,编译器就不再提供默认的无参构造方法。
-
重载:构造方法可以重载,即可以定义多个同名但参数列表不同的构造方法。
public class Student { // 成员变量 --- 描述对象的属性 String name; int age; String className; String stuId; // 构造方法 1: 无参构造方法 Student(){ // 可以在这里设置一些默认值或执行初始化逻辑 } // 构造方法 2: 有参构造方法 Student(String name,int age,String className,String stuId){ this.name = name; // 使用 this.name 访问成员变量,因为它与形参 name 同名 this.age = age; this.className = className; this.stuId = stuId; } // 方法 ------ 描述对象的行为 (为了简洁,这里省略了 playWith 方法) void study(){ System.out.println(name+"在学习..."); } void sayHi(){ System.out.println("大家好,我叫"+name+",今年"+age+ "岁了,所在班级为"+className+",学号为:"+stuId); } }使用构造方法创建对象并初始化:
public class ConsDemo { public static void main(String[] args) { // 使用无参构造方法创建对象,然后手动赋值 Student zg = new Student(); zg.name = "张光"; zg.age = 25; zg.className = "jsd2311"; zg.stuId = "001"; zg.sayHi(); // 输出:大家好,我叫张光,今年25岁了,所在班级为jsd2311,学号为:001 // 使用有参构造方法创建对象并初始化 Student ll = new Student("李林",24,"jsd2311","002"); ll.sayHi(); // 输出:大家好,我叫李林,今年24岁了,所在班级为jsd2311,学号为:002 // 使用有参构造方法创建另一个对象并初始化 Student zl = new Student("赵亮",22,"jsd2311","003"); zl.sayHi(); // 输出:大家好,我叫赵亮,今年22岁了,所在班级为jsd2311,学号为:003 } }好处:复用给成员变量赋初始值的代码。通过不同的构造方法,我们可以以不同的方式创建并初始化对象,避免了重复编写赋值代码。
🚗 综合练习:模拟汽车对象
让我们通过一个模拟汽车的例子来巩固所学知识。
public class Car {
String brand; // 品牌
String color; // 颜色
double price; // 价格
// 无参构造方法
Car(){
}
// 有参构造方法
Car(String brand,String color,double price){
this.brand = brand;
this.color = color;
this.price = price;
}
// 启动方法
void start(){
System.out.println(brand+"牌子的"+color+"颜色的"+price+"块钱的车启动了...");
}
// 运行方法
void run(){
System.out.println(brand+"牌子的"+color+"颜色的"+price+"块钱的车开始跑了...");
}
// 停止方法
void stop(){
System.out.println(brand+"牌子的"+color+"颜色的"+price+"块钱的车停止了...");
}
}
public class CarTest {
public static void main(String[] args) {
// 使用无参构造方法创建对象并手动赋值
Car car1 = new Car();
car1.brand = "奔弛";
car1.color = "黑";
car1.price = 80;
car1.start();
car1.run();
car1.stop();
// 使用有参构造方法创建对象并初始化
Car car2 = new Car("奥迪","银",40);
car2.start();
car2.run();
car2.stop();
// 使用有参构造方法创建另一个对象并初始化
Car car3 = new Car("特斯拉","白",70);
car3.start();
car3.run();
car3.stop();
}
}
📖 补充知识点:
- 面向过程 vs 面向对象:
- 面向过程:以方法为单位解决问题,适合简单业务(例如:大象装冰箱、去银行取钱)。
- 面向对象:以对象为单位解决问题,适合复杂业务(例如:造汽车、造航母)。
- OO 术语:
- OO: 面向对象 (Object-Oriented)
- OOA: 面向对象分析 (Object-Oriented Analysis)
- OOD: 面向对象设计 (Object-Oriented Design)
- OOAD: 面向对象分析与设计 (Object-Oriented Analysis and Design)
- OOP: 面向对象编程 (Object-Oriented Programming) - 我们主要参与的部分。
- 高质量的代码:我们未来的目标,包括复用性、扩展性、维护性、移植性、可读性、健壮性和效率等。
- 内存管理:Java 的内存主要由 JVM 管理,包括:
- 堆 (Heap):存放
new出来的对象(包括实例变量、数组元素、方法地址)。 - 栈 (Stack):存放局部变量(包括方法参数)。
- 方法区 (Method Area):存放
.class字节码文件(包括所有方法、静态变量)。
- 堆 (Heap):存放
总结
- 类和对象:
- 类:自己创造的一种数据类型,模板、模子,表示一类个体
- 对象:真实存在的单个个体/东西
- this和构造方法:
- this:用在方法中,指代当前对象,哪个对象调用方法指的就是哪个对象 当成员变量和局部变量同名时,若想访问成员变量,this不能省略
- 构造方法:作用、语法、调用、特点
提示
- 什么是类?
- 什么是对象?
- 类与对象的关系
- this的作用
- 构造方法的作用
- 构造方法的应用场景