JavaSE基础总结复习之面向对象の知识总结

news2025/1/15 17:27:12

目录

Java语言的基础特点

面向对象

类和对象

类的构造

一,发现类

二,发现类的共有属性(成员变量)

三,定义类的成员方法(行为,动词)

四,使用类创建对象

对象

什么是对象

如何创建对象

类和对象的关系

构造方法

特点

作用

对象与引用

值传递:

引用传递:

关键字

this关键字

static关键字

static--静态

static修饰属性

static修饰内容

static修饰成员的方法

代码块

实例块:

静态块:

类什么时候会被加载?

问题:

包的功能:

注意:

包的命名规范:

访问权限

public

protected

(default)

private

补充变量的分类:

按照位置分类:

成员变量

局部变量

面向对象语言的三大特征

封装

一般意义上的封装:

面向对象语言中的封装:

封装案例1:将属性设置为私有权限

​编辑

封装案例2:将类中的方法私有化

java设计模式:

单例模式:

继承

优点

继承的语法

方法的重写

方法重写的规则

super关键字

@Override

继承中的构造方法

抽象类

抽象方法

什么时候需要定义抽象的方法:

抽象类的特点

多态

向下转型:

instanceof关键字

final关键字

接口

接口的定义

implements关键字

注意


Java语言的基础特点

  • 简单易学(语法简单,上手容易);
  • 面向对象(封装,继承,多态);
  • 平台无关性( Java 虚拟机实现平台无关性);
  • 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持);
  • 可靠性(具备异常处理和自动内存管理机制);
  • 安全性(Java 语言本身的设计就提供了多重安全防护机制如访问权限修饰符、限制程序直接访问操作系统资源);
  • 高效性(通过 Just In Time 编译器等技术的优化,Java 语言的运行效率还是非常不错的);
  • 支持网络编程并且很方便;
  • 编译与解释并存;

面向对象

关注的焦点是类:在计算机程序设计过程中,参照现实中的事物,将事物的属性特征,行为特征抽象出来,用类来表示。

代码结构:以类为组织单位。每种事物都具备自己的属性和行为/功能。

面向对象程序设计时,从宏观上分析程序有哪些功能。

然后对功能进行分类,把不同的功能封装在不同的类中(造汽车,发动机·······)。

是一种宏观设计,适合解决复杂的问题,代码扩展性强,可维护性高。

类和对象

具有相同特征(同一类)事务的抽象描述,例如:人类,树类,公务员类,语言类,是抽象的概念

现根据客观的事务进行抽象(设计为程序),然后由抽象创造出具体,最终使用的是具体

类的构造

一,发现类

总结的过程就是抽象化的过程。

例如:古希腊哲学家柏拉图把人定义为:没有羽毛的两脚直立的动物,其中:”没有羽毛“,”两脚独立“都是特征,都能归类为人类,当然在现在看来这样的定义是片面的。

类的声明格式为:

[访问权限修饰符][修饰符]class Cat{

}

//例如:public class Cat{}

访问修饰符有两种public无(默认)

修饰符:final,abstract

关键字class用来定义一个类

Java类名的命名规范

类名首字母大写,见名知意。

二,发现类的共有属性(成员变量)

三,定义类的成员方法(行为,动词)

四,使用类创建对象

对象

实际存在的该类事物的每个个体,是具体的,因而也称为实例,例如:小明,苹果,魅族20

什么是对象

对象是类的实例,是以类为模板,在内存中创建出的是个实际存在(对象)

如何创建对象

使用new关键字,例如:Cat()-----类的构造方法

Cat miao = new Cat();

new Cat()使用new创建对象,然后调用Car类的构造方法初始化对象=,将右边创建的对象的地址赋值给左边miao变量

这个miao就相当于创建出的变量,可以表示这个对象,可以使用这个miao进行属性操作

例如:miao.name = "咪咪";

类和对象的关系

在Java编程语言中,类和对象是紧密相关的概念。类是对具有相同属性和行为的一组对象进行抽象和封装的模板。类定义了对象的属性和行为,并提供了一种创建对象的方式。

对象是根据类定义的模板创建的实体,它具有类定义的属性和行为。对象是类的实例化,每个对象都是独立的,可以具有不同的属性值。

类在Java中通过关键字class来定义,而对象通过关键字new创建。

构造方法

特点

构造方法的名称必须与类名完全相同。

构造方法没有返回类型,包括void。

构造方法可以重载,即一个类可以有多个构造方法,只要它们的参数列表不同即可。

作用

初始化对象的属性,让对象在创建后就具有合适的初始值。

在对象创建过程中执行一些必要的操作。

对象与引用

Java中进行方法调用中传递参数时,参数传递有两种:

值传递:

(形参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:

(形参数类型是引用数据类型参数):也称为传地址。

方法调用时,实际参 数是对象,这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的 操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法 执行中形式参数的改变将会影响实际参数。

基本类型传递的是该数据值本身。

引用类型传递的是对对象的引用,而不是对象本身 。

但是无论是值传递还是引用传递,其本质都是传值,所以也都统称值传递

关键字

this关键字

this在类中用来表示当前正在访问的对象,this.成员变量名--显示的访问当前对象的成员变量

常常用来区分同名的成员变量和局部变量

static关键字

static--静态

可以用来修饰类的成员变量,成员方法

static修饰属性

特点为静态成员变量也称为类变量,在内存中只有一份,所有成员共享

一般情况下,将类中所有对象都相同的属性设置为静态的

static修饰内容

随着类的加载而加载,类只要被加载了就可以直接通过类名访问

static修饰成员的方法

被称为静态方法,类方法,可以直接使用类名调用

静态的方法中,只能使用静态的成员变量,因为他们都是随着类的加载而加载的

非静态的方法可以使用静态的成员变量

静态的方法中不能使用this关键字,也不能用super关键字

代码块

类似于一个没有名称的方法体(代码块)

分为实例块静态块

实例块:

每次创建对象时自动执行

{

实例代码块内容

}

静态块:

在类被加载时自动执行

static{

静态代码块内容

}

类什么时候会被加载?

1,在运行类中的main方法

2,访问类中的静态成员变量和静态成员方法

3,创建类的对象时先加载类

问题:

项目越写越大,用到的类越来越多,会出现同名类,如何按照不同的功能管理类

java中使用包机制来管理类,

包的功能:

1,按照不同的功能来管理类

2.避免类重名

3,控制访问权限

注意:

当在一个类中,使用了另一个包中的类,使用前必须使用import关键字导入,使用本包中的类,以及java.lang包中的类不需要导入

java中每一个类都会属于一个包,所以使用时是通过类的全地址使用的--称为全类名

包的命名规范:

在包名中,可以使用.号来区分包的级别;包名一般情况下是小写,至少有三级 第一级 指该项目的类型,如com,org,gov等, 第二级 指项目所开发或者运行的公司名称,如:oracle,sun,huawei等 第三级 指项目的名称,如:bcms,oa,erp,cms等 第四级 指项目模块的名称,如:bean,action,exception等

访问权限

public

公共权限,可以修饰(类,成员变量,成员方法),公共权限修饰的成员可以在任何地方访问

protected

受保护权限,( 可以修饰成员变量,成员方法),在本类中,同包的其他类中可以访问到,可以在不同包的子类中访问

(default)

默认权限,可以修饰(类,成员变量,成员方法),同包的其他类中可以访问到

private

私有权限,可以修饰(可以修饰成员变量,成员方法),在本类中可以访问到

补充变量的分类:

数据类型:基本类型变量:byte short·······等基本数据类型

引用类型变量:类,数组,持有的是对象的引用地址

按照位置分类:
成员变量

定义在类中,可以使用权限修饰衬衫修饰

            在构造方法中进行自动的初始化赋值

            生命周期:

                    静态:随着类的加载二加载,随着类的销毁而销毁

                    非静态:随着对象的创建而创建,随着对象的销毁而销毁

                    储存的位置:

                    非静态:堆

                    静态:方法区
局部变量

定义在方法中,不仅使用修饰符修饰

            必须我们自己初始化

            生命周期:方法调用创建,方法结束销毁

            储存的位置:栈

面向对象语言的三大特征

封装

一般意义上的封装:

例如将重复出现的代码抽取了一个函数,称为代码的封装(包装)

面向对象语言中的封装:

将类的某些信息使用不同的访问权限修饰符==隐藏==在类内部,不允许外部直接访问操作,而是通过该类提供的方法来实现对隐藏信息的操作和访问,方便加入控制语句,控制权就在自己的手上

封装案例1:将属性设置为私有权限

在其他类中不能任意的访问,只能通过类中提供的特殊的方法进行访问

private String name;
private int age;

向外提供一个公共的方法访问,可以在此方法中加入控制语句

//设置名字的方法
public void setName(String name){
  if(name.length()>2&&name.length()<6){
    this.name = name;
  }
}
//获取名字的方法
public String getName(){
  return this.name;
}

在IDEA中可以通过右键方法变量,选择Generate,点击setter或者getter,直接创建一个外部可用的方法

封装案例2:将类中的方法私有化

java设计模式:

解决某种问题的固定方式(算法)

单例模式:

让一个类,在一个程序中只能创建一个对象,将类的构造方法私有化,外界不能随意调用

//将构造方法私有化,在外界不能随意调用
private Window(){
  
}
//向外界提供获得此对象的方法
//创建一个静态的window对象,类在第一次加载后在内存中生成唯一一份window对象
//每次加载时拿到的都是唯一的对象
static Window window = new Window();
public static Window getWindow(){
  return window;
}
public class TestWindow {
    public static void main(String[] args) {
        Window win = Window.setWindow();
        System.out.println(win);
    }
}

可以看到,此例中创建的每个window都的哈希值都相同于Window类中第一次创建的window,可以有效的避免创建多个对象,以达到在一个程序中只创建一个对象的作用

继承

就是将同一事物中共性的属性和行为进行抽取,定义在一个类中(基类)

其他类可以继承基类就可以拥有基类中的功能但不能使用基类中私有的内容

继承可以实现代码的复用性,以及可以在子类中扩展子类自己特有的功能,而不影响其他类

只要符合is-a关系(什么是什么关系,比如苹果是水果),就可以使用继承,一个类只能直接继承一个类,而间接的可以继承多个类,称为继承的传递性,例如b继承a,然后c继承b,则c也继承了a

一个类不显示的继承任何类的时候默认继承object类

Object类是java类体系中最大的类,object之上再也没有别的类

优点

提高了代码的复用性

减少了代码的冗余

增强了程序的扩展(在子类中扩展自己的内容)

继承的语法

extends关键字,在创建类的时候在类名后使用extends关键字继承别的类

public class Dog extends Animal{
  //Dog继承Animal的成员变量和成员方法,但是不能直接访问父类私有的内容
}

方法的重写

当父类的方法功能实现不能满足子类需求时,可以对方法进行重写

子类可以对从父类中继承类的方法就进行改造,在程序执行时,子类的方法将覆盖父类的方法,称为方法的重写

方法重写的规则

  1. 子类重写的方法必须和父类被重写的方法名称,参数列表相同
  2. 子类重写的方法的返回值类型与父类保存一致。
  3. 子类重写的方法使用的访问权限不能小于父类被重写方法的访问权限。注意:① 父类私有方法不能重写 ② 跨包的父类默认权限的方法也不能重写
  4. 子类方法抛出的异常不能大于父类被重写方法的异常

super关键字

在Java类中使用super来调用父类中的指定操作:

1,super可用于访问父类中定义的属性

2,super可用于调用父类中定义的成员方法

3,super可用于在子类构造器中调用父类的构造器

注意:

尤其当子父类出现同名成员时,可以用super表明调用的是父类中的成员 super的追溯不仅限于直接父类还可以是父类的父类 super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识

super调用的是父类的成员,而不是表示一个父类对象

@Override

是java中的一个注解标签,定义在重写的方法上面,表示此方法是从父类重写而来,也可以不用添加,只要重写的方法结构与父类一直,也算正确的重写

建议保留:

1,编译器可以进行语法验证

2,阅读代码时可以明确的知道此方法是重写的

在IDEA中可以通过在子类括号内部的空白中右键空白处选择Generate,点击Override Mathod

这样就可以创建一个Override的重写方法,进行修改即可

继承中的构造方法

1.子类继承父类时,不会继承父类的构造方法。

只能通过“super(形参列表)” 的方式调用父类指定的构造方法。

2.规定super(形参列表),必须声明在构造器的首行

3.如果在子类构造器的首行没有显示调用super(形参列表),则子类此构造器 默认调用super(),即调用父类中空参的构造器。

4.这么做是为了保证先对父类成员进行初始化

抽象类

抽象方法

抽象方法是一种特殊的方法:它只有方法声明,而没有具体的实现

什么时候需要定义抽象的方法:

在一些体系结构的顶端类只需要定义功能而没有必要实现,因为不同子类中的实现都不同,这个时候就可以将这个方法声明为抽象方法

抽象方法必须用abstract关键字进行修饰,有抽象方法的类就叫抽象类,而抽象类也需要用abstract来修饰,抽象类中可能包含抽象方法,所以类也是抽象的

/*
一个类中如果包含抽象方法,那么这个类一定是抽象类
使用abstract修饰的类就是抽象类
*/
public abstract class Animal(){
  //抽象方法,没有方法体,使用abstract修饰
  public abstract void eat();
}

抽象类的特点

抽象类不能被创建对象,其他功能与正常的类都相同,可以有成员变量,成员方法,包括构造方法都可以有。

抽象类的主要作用是在上层定义功能,只能用作基类,在子类中进行继承和重写。

继承抽象类的非抽象类必须实现其中所有的抽象方法,而已实现方法的参数,返回值要和抽象类中的方法一样,否则该类也必须声明为抽象类。

多态

同一种事务在不同的时刻表现不同的状态

父类的引用指向子类对象

前提是必须要有继承关系,此时构成多态

两个不同的时间段:

编译期:写代码时 类型是Animal(父类类型)

运行期:运行代码时 类型是具体的子类类型

多态也称向上转型

Animal dog = new Dog();
  dog.eat();/*在编译时dog调用为Animal类的方法,但在运行时会调用子类
              dog中重写的方法*/
Animal cat = new Cat();

用父类类型表示任意的子类类型对象,利于程序扩展

成员方法:编译看左边,运行看右边

静态成员方法:编译和运行都看左边

成员变量:编译和运行都看左边

向下转型:

将父类类型向下强制转为子类类型

Animal dog = new Dog();//此时编译调用子类的方法会报错
Dog d = (Dog)dog;//此时d就可以在编译中使用子类Dog中的方法
d.eat();

instanceof关键字

作用是:测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。

左边是对象,右边是类,当对象是右边类或子类创建的对象时,返回true,否则false

父类类型与指定类型相同返回true,否则返回false

if(animal instanceof Dog){
  Dog dog = (Dog)animal;
  dog.lookhome();
}

final关键字

用于修饰类,方法,参数,属性(成员变量)

final修饰的类,不能被继承,所以不能修饰抽象类,例如java中String类不可被继承

final修饰的类,子类不能重写

final修饰方法的参数,参数值在方法中不能被改变

情况1:在类定义时,值就确定,直接赋值,赋值后值不改变的,建议使用static修饰

final static int a = 10;

情况2:在类定义时值不明确,必须在创建对象后,在构造方法中对其进行赋值,每个对象中拥有一个常量

public class Demo {
    public void test(final int a){
    }
    final int count;
    public Demo(int count){
        this.count = count;
    }
    public static void main(String[] args) {
        Demo f = new Demo(1);
    }
}

常量一般建议全部使用大写字母定义

接口

接口的定义

接口是计算机领域的名词,表示一种功能的定义

例如usb接口 定义usb接口的规范,让其他设备去实现

接口可以看做是一种特殊的抽象类,里面也可以包含抽象方法

接口不能被创建对象

被其他类实现(继承关系),重写抽象方法

主要也是用于定义功能的

implements关键字

类通过implements关键字实现接口 类实现接口后要么重写接口中的所有抽象方法 要么将该类声明为抽象类

注意

接口可以继承多个接口,一个类可以实现多个接口

接口不能实例化对象

接口与实现类之间存在多态性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1853836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux——man帮助命令

一、man 获得帮助信息 基本语法&#xff1a;man [命令或配置文件] &#xff08;功能描述&#xff1a;获得帮助信息&#xff09; 查看 ls 命令的帮助信息 [roothadoop101 ~]# man ls man [数字] [函数] 1、Standard commands &#xff08;标准命令&#xff09; 2、System…

Structured Steaming结构化流详解:大案例解析(第12天)

系列文章目录 一、结构化流介绍&#xff08;了解&#xff09; 二、结构化流的编程模型&#xff08;掌握&#xff09; 三、Spark 和 Kafka 整合&#xff0c;流处理&#xff0c;批处理演示&#xff08;掌握&#xff09; 四、物联网数据分析案例&#xff08;熟悉&#xff09; 文章…

【服务器06】之【如何不开外网连接GitHub】

登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字&#xff0c;点击创建存储库就可以了 首先 如何在不开外网的条件下使用GitHub 第一步 下载安装Steam(Watt TooklKit) 区分一下如何查看哪个官网&#xff08;没有百度广告就是…

CPP-类对象大小的组成

要计算一个类对象的大小要先明白一个问题&#xff1a;类中既可以有成员变量&#xff0c;又可以有成员函数&#xff0c;那么一个类的对象中包含了什么&#xff1f; 下面来看一段代码&#xff1a; // 类中既有成员变量&#xff0c;又有成员函数 class A1 { public:void f1() {} …

Pytorch调试出错记录

一、搭建环境&#xff1a; LINUX-64 1、 nvidia-smi &#xff1a;NVIDIA-SMI 470.63.01 Driver Version: 470.63.01 CUDA Version: 11.4 2、安装conda&#xff1a;下载最新版上传安装 3、安装pytorch&#xff08;安装成功&#xff0c;但可能报错&#xff09; : conda in…

AI 大模型应用开发实战(04)-AI生态产业拆解

1 行业全景图 2 结构拆解AI GC 生成式AI这个产业。分成上中下游三大块。 2.1 上游基础层 主要包括&#xff1a; 算力&#xff1a;包括AI芯片和云服务等&#xff0c;例如像英伟达、AMD以及华为等厂商提供的算力基础设施。大型模型基于Transformer架构&#xff0c;对算力的需…

redis主从复制、哨兵、集群

在实际的生活环境中&#xff0c;如果只使用一个redis进行读写操作&#xff0c;那么面对庞大的访问人群是崩溃的&#xff0c;所以可以有几个redis&#xff0c;一个用来做主机&#xff0c;提供修改数据操作&#xff0c;而这个主机用来控制其他redis&#xff0c;即将更新的发送&am…

C/C++ - 编码规范(USNA版)

[IC210] Resources/C Programming Guide and Tips 所有提交的评分作业&#xff08;作业、项目、实验、考试&#xff09;都必须使用本风格指南。本指南的目的不是限制你的编程&#xff0c;而是为你的程序建立统一的风格格式。 * 这将有助于你调试和维护程序。 * 有助于他人&am…

号外!号外!全网第一手Android P刘海屏适配大揭秘,唯一Kotlin算法

如下图所示&#xff1a; 4.2.适配刘海屏 在刘海屏调试打开之后&#xff0c;浏览应用的所有页面&#xff0c;测试所有遮挡问题&#xff0c;或者是下移导致的问题&#xff0c;对有问题的页面进行布局适配。适配方案如下&#xff1a; Google 提供的适配方案&#xff0c;可以设置…

基于Vue-cli脚手架搭建项目使用ElementUI组件

项目结构 node_modules 项目依赖的外部组件文件放在此处,例如vue public index.html是对外提供的唯一的html文件 src assets 存放静态文件 例如图片 css js等文件 components 里面存放的是组件 App.vue是组件 main.js是项目配置文件 package.json存放的是项目依赖的…

1.树莓派4b+ubuntu18.04(ros版本melodic)+arduino mega自制两轮差速小车,实现建图导航功能

第一篇先介绍材料准备、环境配置和ros的安装 1.材料准备 1.树莓派4b&#xff0c;8g版本 2.arduino mega 3.MG310编码电机*2 4.雷达ydlidar X3 5.Tb6612电机驱动板 6.12v电池 7.ubuntu18.04ros melodic版本 2.环境配置 树莓派安装ubuntu18.04版本 ubuntu18.04版本的镜像可以…

访问网站时IP被屏蔽是什么原因?

在互联网使用中&#xff0c;有时我们可能会遇到访问某个网站时IP地址被屏蔽的情况。IP地址被网站屏蔽是一个相对常见的现象&#xff0c;而导致这种情况的原因多种多样&#xff0c;包括恶意行为、违规访问等。本文将解释IP地址被网站屏蔽的常见原因&#xff0c;同时&#xff0c;…

HarmonyOS-MPChart根据y轴刻度绘制渐变色曲线

本文是基于鸿蒙三方库mpchart&#xff08;OpenHarmony-SIG/ohos-MPChart&#xff09;的使用&#xff0c;自定义绘制方法&#xff0c;绘制一条颜色渐变的曲线。 mpchart本身的绘制功能是不支持颜色渐变的曲线的&#xff0c;只支持渐变色填充大块颜色。那么当我们的需求曲线根据…

【Linux】IP协议、以太网帧格式

目录 网络层IP协议协议头格式网段划分分类划分法特殊的 IP 地址IP 地址的数量限制私有 IP 地址和公有 IP 地址路由路由表生成算法 数据链路层以太网以太网帧格式认识 MAC 地址ARP协议ARP数据报格式 ARP 协议的工作流程ARP欺骗 DNShosts 文件域名的层级关系域名服务器分类域名解…

【计算机网络篇】数据链路层(12)交换机式以太网___以太网交换机

文章目录 &#x1f354;交换式以太网&#x1f6f8;以太网交换机 &#x1f354;交换式以太网 仅使用交换机&#xff08;不使用集线器&#xff09;的以太网就是交换式以太网 &#x1f6f8;以太网交换机 以太网交换机本质上就是一个多接口的网桥&#xff1a; 交换机的每个接口…

记MySQL事务+消息队列引起的问题

问题描述&#xff1a; 先说一下流程&#xff1a;后端保存前端提交的图表信息&#xff0c;然后发送异步消息到消息队列&#xff0c;由下游服务去处理图表信息。 部署项目到服务器&#xff0c;验证项目功能的时候&#xff0c;出现了以下错误&#xff1a;数据库存在数据。下游服…

计算机组成原理 —— 存储系统(DRAM和SRAM,ROM)

计算机组成原理 —— 存储系统&#xff08;DRAM和SRAM&#xff09; DRAM和SRAMDRAM的刷新DRAM地址复用ROM&#xff08;Read-Only Memory&#xff08;只读存储器&#xff09;&#xff09; 我们今天来看DRAM和SRAM&#xff1a; DRAM和SRAM DRAM&#xff08;动态随机存取存储器&…

构建未来应用的核心,云原生技术栈解析

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、云原生技术栈 1、容器和容器编排 1.1 Docker 1.2 Kubernete…

JaveEE进阶----Spring Web MVC入门

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、什么是 Spring Web MVC&#xff1f;&#xff1f;1.1MVC 定义1.2 什么是Spring MVC ?1.3过浏览器和用户程序交互 二、 RequestMapping 注解三、Postman 前言…

能理解你的意图的自动化采集工具——AI和爬虫相结合

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三连支…