(全文目录:)
开篇语
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
前言
在编程的世界里,面向对象(Object-Oriented Programming,简称OOP)几乎是每一位开发者必经的阶段。我们把“面向对象”当做编程的基石,就像建房子前,必须先有地基一样,理解OOP的核心概念,才可以在代码的世界中游刃有余。那面向对象的基本元素是什么呢?答案就是“类”和“对象”。
说到这里,可能很多人会心一笑,觉得这不就是我们学编程时的基础概念吗?的确如此!但很多初学者常常对类和对象的理解停留在表面,直到某一天在写实际的程序时,才发现“类”与“对象”之间隐藏的深意。那么,今天我们就从这些面向对象的基础开始,探索它们背后更加有趣的世界。
类与对象的概念:每个人都是一个“类”
想象一下,你在一个大公司的会议室里,大家围坐一圈,讨论着公司的未来发展。每个人都有自己的职位、工作内容、以及所属部门。其实,这就像是面向对象编程中的“类”和“对象”的关系。
- 类(Class):就像是一个模板,它定义了对象应该具备什么样的属性和方法。类是对象的抽象定义,是一个蓝图。
- 对象(Object):是类的实例,是具体化的个体。它拥有类定义的属性和行为,并且可以在程序中操作。
例子:类与对象
让我们用一个简单的例子来展示类和对象的区别。
// 定义一个Person类
public class Person {
// 类的属性
String name;
int age;
// 类的方法
public void introduce() {
System.out.println("Hi, my name is " + name + " and I am " + age + " years old.");
}
}
public class Main {
public static void main(String[] args) {
// 创建对象
Person person1 = new Person();
person1.name = "Alice";
person1.age = 25;
// 调用对象的方法
person1.introduce(); // 输出:Hi, my name is Alice and I am 25 years old.
}
}
在这个例子中,Person
就是一个类,它定义了每个 Person
对象的属性(name
和 age
)以及行为(introduce
方法)。而 person1
则是 Person
类的一个具体对象,通过 new
关键字创建,并赋予它实际的值。
类与对象的图示
classDiagram
class Person {
+String name
+int age
+introduce()
}
class Main {
+main(String[] args)
}
Main --> Person : Creates
构造器的定义与重载:类的“启动引擎”
在现实中,每个人从出生开始就有自己的名字和年龄。那么在程序中,当我们创建一个对象时,如何为对象赋予初始值呢?这就是 构造器(Constructor)的作用。
构造器:为对象初始化
构造器是类的一种特殊方法,专门用于在创建对象时进行初始化。构造器的名称必须与类名相同,并且没有返回类型。
public class Person {
String name;
int age;
// 构造器
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void introduce() {
System.out.println("Hi, my name is " + name + " and I am " + age + " years old.");
}
}
在上面的例子中,Person
类有一个构造器,构造器接收 name
和 age
两个参数,并用它们来初始化 Person
对象的属性。当我们创建 Person
对象时,构造器会自动被调用来初始化对象的属性。
构造器的重载:同一个名字,不同的参数
有时候,我们希望通过不同的方式来创建对象,例如,我们可能希望有一个默认构造器,也可以有一个带参数的构造器。这时候我们就用到 构造器重载。
public class Person {
String name;
int age;
// 默认构造器
public Person() {
this.name = "Unknown";
this.age = 0;
}
// 带参数的构造器
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void introduce() {
System.out.println("Hi, my name is " + name + " and I am " + age + " years old.");
}
}
在上面的例子中,Person
类有两个构造器,一个是默认构造器,没有参数,另一个是带有 name
和 age
参数的构造器。你可以根据需要选择使用不同的构造器来创建对象。
构造器的重载图示
classDiagram
class Person {
+String name
+int age
+Person()
+Person(String, int)
+introduce()
}
class Main {
+main(String[] args)
}
Main --> Person : Creates with parameters
this
关键字的使用:指向“当前对象”的箭头
在类中,有时我们需要区分成员变量和方法中的局部变量,尤其是在构造器中,参数和类的成员变量可能有相同的名称。为了避免混淆,我们使用 this
关键字来指代当前对象的成员变量。
this
:指向当前对象
public class Person {
String name;
int age;
// 构造器
public Person(String name, int age) {
this.name = name; // 通过 this 区分成员变量和参数
this.age = age;
}
public void introduce() {
System.out.println("Hi, my name is " + name + " and I am " + age + " years old.");
}
}
在这个例子中,this.name
和 this.age
表示当前对象的成员变量,而 name
和 age
则是构造器参数。this
就是指向当前对象本身。
对象的创建与销毁:生命周期管理
在程序中,当你通过 new
关键字创建一个对象时,你的程序实际上是在内存中分配了空间来存储这个对象的数据。这就像是一个工厂生产了一件产品,产品被存放在仓库中,直到我们不再需要它。
对象的创建:new
关键字
Person person1 = new Person("Alice", 25); // 创建对象
在上面的代码中,new Person()
就是通过构造器创建了一个 Person
对象。这个对象会被分配到内存中。
对象的销毁:垃圾回收机制
Java 的垃圾回收机制会自动管理对象的销毁。我们无需显式地销毁对象,只需要确保没有任何引用指向该对象,垃圾回收器会在适当的时候回收对象占用的内存。
person1 = null; // 断开引用,垃圾回收器可以回收这个对象
通过断开引用,person1
就不再指向那个 Person
对象,这时如果没有其他地方引用它,垃圾回收器就会在合适的时机自动销毁这个对象。
对象生命周期图示
graph TD;
A[创建对象] --> B[分配内存];
B --> C[对象在内存中存在];
C --> D{没有引用指向对象};
D -->|是| E[垃圾回收];
D -->|否| F[对象继续存在];
总结:从类到对象,一切都从这里开始
面向对象编程的核心就是理解“类”和“对象”的关系,构造器如何为对象初始化数据,this
关键字如何指向当前对象,以及如何管理对象的生命周期。它们共同组成了面向对象编程的基础,所有的复杂系统,都是在这些简单而强大的概念上建立起来的。
掌握了这些基础,你就可以更加自如地在编程的世界中构建属于自己的“类”和“对象”。就像在构建一座城市时,你要先规划好道路、建筑和基础设施,而面向对象的这些概念正是你“城市”的基础设施。
所以,别小看这些看似简单的概念,它们将是你成为一名高级程序员的第一步!
... ...
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
... ...
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。 ⭐️若有疑问,就请评论留言告诉我叭。
版权声明:本文由作者原创,转载请注明出处,谢谢支持!