《JavaSE》---14.<面向对象系列之(附:this和super关键字)>

news2024/11/26 12:59:44

目录

系列文章目录

前言

一、为什么要有this引用

1. 用代码看有this与无this的区别

1.1 代码示例

1.2 输出结果:

1.3 代码示例:

1.4 输出结果:

2. this深度理解

3. 什么是this引用

3.1 this引用的概念

4. this引用的特性

二、this的用法(在没有继承关系时)

2.1 this.访问当前对象的属性

2.2 用this()调用其他构造方法

值得注意的是:

 2.3 用this.在成员方法中调用其他成员方法

三、this和super的用法(继承关系的情况下)

3.1 当父类成员变量、方法与子类成员变量、方法不同时

3.2 当父类成员变量、方法与子类成员变量、方法相同时

3.1、3.2代码示例:

小结:

方法的重写

四、面试题:总结super和this的区别


系列文章目录

第一章 Java 类和对象

第二章 Java 封装

第三章 Java 继承

第四章 Java 多态

附:static关键字及final关键字

附:this和super关键字


前言

本篇博客主要讲解Java基础语法中的

面向对象系列之

this和super关键字的详解:为什么要使用this、有this和无this的区别、this的深度理解、this为什么是引用、this的用法、用this访问对象的属性、用this调用构造方法、用this调用成员方法、super的用法、面试题:super和this的区别。有关super关键字在继承的文章中也有说明。


      大家好,本人是普通一本的在校大学生一枚,目前在学习java。之前也学了一段时间,但是没有发布博客。本人现在已经大二结束了,开学就大三了,时间过的真的很快。我会利用好这个暑假,来复习之前学过的内容,并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区进行讨论!!!

      喜欢我文章的兄弟姐妹们可以点赞,收藏和评论我的文章。喜欢我的兄弟姐妹们以及也想复习一遍java知识的兄弟姐妹们可以关注我呦,我会持续更新滴,并且追求完整。
望支持!!!!!!一起加油呀!!!!

语言只是工具,不能决定你好不好找工作,决定你好不好找工作的是你的能力!!!!!

学历本科及以上就够用了!!!!!!!!!!!!!!!!!!!!!!!!!!!!


我们首先通过代码来看看有this和没有this的区别

我们依然用PetDog这个类来解释说明

一、为什么要有this引用

1. 用代码看有this与无this的区别

构造方法中

在参数名与成员变量名不相同的情况下。我们是可以成功赋值的。

但是在参数名与成员变量名相同的情况下。我们并不能成功赋值

由于局部变量优先原则,此时的赋值时参数传给参数。而不会对成员变量进行赋值。我们需要用到this引用才能成功赋值,完成初始化。

1.1 代码示例

class PetDog {
    //成员变量
    public String name;//名字
    public String color;//颜色
    public int age;     //年龄
    // 狗的属性

    //构造方法
    public PetDog(String name, String color, int age) {
        this.name = name;
        this.color = color;
        this.age = age;
    }

    //成员方法
    // 狗的行为
    public void barks() {
        System.out.println(name + ": 旺旺旺~~~");
    }
    public void wag() {
        System.out.println(name + ": 摇尾巴~~~");
    }
}

public class Test {
    public static void main(String[] args) {
    //在主函数中,我们进行实例化这个类。并对实例化出的类进行使用。

        PetDog dog1 = new PetDog("阿黄","黄色",15);
        System.out.println("姓名:" + dog1.name);
        System.out.println("颜色:" + dog1.color);
        System.out.println("年龄:" + dog1.age);
        dog1.barks();
        dog1.wag();
    }
}

1.2 输出结果:

姓名:阿黄
颜色:黄色
年龄:15
阿黄: 旺旺旺~~~
阿黄: 摇尾巴~~~

1.3 代码示例:

class PetDog {
    //成员变量
    public String name;//名字
    public String color;//颜色
    public int age;     //年龄
    // 狗的属性

    //构造方法
    public PetDog(String name, String color, int age) {
        name = name;
        color = color;
        age = age;
    }

    //成员方法
    // 狗的行为
    public void barks() {
        System.out.println(name + ": 旺旺旺~~~");
    }
    public void wag() {
        System.out.println(name + ": 摇尾巴~~~");
    }
}

public class Test {
    public static void main(String[] args) {
    //在主函数中,我们进行实例化这个类。并对实例化出的类进行使用。

        PetDog dog1 = new PetDog("阿黄","黄色",15);
        System.out.println("姓名:" + dog1.name);
        System.out.println("颜色:" + dog1.color);
        System.out.println("年龄:" + dog1.age);
        dog1.barks();
        dog1.wag();
    }
}

1.4 输出结果:

姓名:null
颜色:null
年龄:0
null: 旺旺旺~~~
null: 摇尾巴~~~

我们发现在没有使用this的情况下,并没有给成员属性赋值成功,这是因为就近原则。局部变量会优先给自己赋值。也就是参数创建的局部变量自己给自己赋值,并没有影响到成员属性当中的变量。

而通过this引用,编译器会明白这个变量是成员属性的变量。而不是传入参数时创建的变量。因此this代表当前对象的引用。建议大家习惯使用this,这样就能更好的区分这个变量是谁的。

若有多个对象,那么哪个对象调用了这个方法,那么这个this就是哪个对象的引用。

2. this深度理解

再往深了说,其实在构造方法中隐藏了PetDog this这个参数,而谁调用了这个方法,那么这个this就指的是谁。如上面: PetDog dog1 = new PetDog("阿黄","黄色",15);我们虽然只传了三个参数进去实际上我们传入的是

PetDog dog1 = new PetDog(dog1,"阿黄","黄色",15);

而接收这个参数的方法实际上也是这样的

    public PetDog(PetDog this, String name, String color, int age) {
        this.name = name;
        this.color = color;
        this.age = age;
    }

其中用删除线划的部分来代表编译器隐藏的部分。这是我们看不到但是实际存在的。因此用了this我们的编译也可以顺利通过。

注意:静态的成员变量不支持

我们建议所有的地方都加上this

3. 什么是this引用

3.1 this引用的概念

this引用指向当前对象:( 成员方法运行时调用该成员方法的对象 )
例如:PetDog dog1 = new PetDog("阿黄","黄色",15);。那么在这个构造方法中,this就同dog1一样指向PetDog这个对象。除了构造方法,成员方法也是可以这样用的。
在成员方法中所有成员变量的操作,都是通过该this 引用去访问
用户不需要来传递,编译器自动完成。
注意:this引用的是调用成员方法的对象

4. this引用的特性

1. this 的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
2. this 只能在 " 成员方法 " 中使用(构造方法相当于成员方法中的一种)
3. " 成员方法 " 中, this 只能引用当前对象,不能再引用其他对象
4. this 成员方法 第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法 对象的引用传递给该成员方法,this 负责来接收

二、this的用法(在没有继承关系时)

2.1 this.访问当前对象的属性

我们在上述讲到的有无this的区别就是在用this.去访问当前对小区的属性,要记得是只能在构造方法和成员方法中才能使用,因为别的地方没有隐藏的这个参数。并且我们最好习惯性使用this这样更方便我们去理解代码。

2.2 用this()调用其他构造方法

代码示例:

class PetDog {
    //成员变量
    public String name;//名字
    public String color;//颜色
    public int age;   //年龄
    // 狗的属性

    //构造方法,//我们在这里创建了多个构造方法,方便后面的使用。
    public PetDog(){
        this("阿花","花色",25);//用this()直接调用其他构造方法传参,
                              //传入什么参数类型就与哪个构造方法相匹配。
        System.out.println("构造方法1");
    }//因此是调用了构造方法2而不是构造方法3.


    public PetDog(String name, String color, int age) {
        this.name = name;
        this.color = color;
        this.age = age;
        System.out.println("构造方法2");
    }

    public PetDog(String name, String color) {
        this.name = name;
        this.color = color;
        System.out.println("构造方法3");
    }
    

    //成员方法
    // 狗的行为
    public void barks() {
        System.out.println(this.name + ": 旺旺旺~~~");
    }
    public void wag() {
        System.out.println(this.name + ": 摇尾巴~~~");
    }
}

public class Test {
    //在主函数中,我们进行实例化这个类。并对实例化出的类进行使用。
    public static void main(String[] args) {
        PetDog dog1 = new PetDog();
        System.out.println("姓名:" + dog1.name);
        System.out.println("颜色:" + dog1.color);
        System.out.println("年龄:" + dog1.age);
        dog1.barks();
        dog1.wag();
    }
}

输出结果:

构造方法2
构造方法1
姓名:阿花
颜色:花色
年龄:25
阿花: 旺旺旺~~~
阿花: 摇尾巴~~~

由此我们看出,程序从 new PetDog();这里直接进入构造方法1这个无参的构造方法,再执行this();由参数匹配到了构造方法2这个方法并传入了参数,初始化了对象。执行完构造方法2再回来,打印出构造方法1。再输出姓名.....颜色....年龄...和调用的成员方法。

值得注意的是:

 可见this();需要放在当前类的构造方法中的第一行才可以,不然会编译报错不能通过。

总结:

1.this();   是只能在当前类构造方法中使用,去调用当前类的其他构造方法。不能在普通的成员方法中使用。

2.只能放在第一行。如果不放在第一行,就不能通过编译。

 2.3 用this.在成员方法中调用其他成员方法

代码示例:

class PetDog {
    //成员变量
    public String name;//名字
    public String color;//颜色
    public int age;   //年龄
    // 狗的属性

    //构造方法,//我们在这里创建了多个构造方法,方便后面的使用。
    public PetDog(){
        this("阿花","花色",25);
        System.out.println("构造方法1");
        this.wag();//在构造方法中用this.来调用成员方法
    }


    public PetDog(String name, String color, int age) {
        this.name = name;
        this.color = color;
        this.age = age;
        System.out.println("构造方法2");
    }

    //成员方法
    // 狗的行为
    public void barks() {

        System.out.println(this.name + ": 旺旺旺~~~");
    }
    public void wag() {
        this.barks();//在成员方法中用this.来调用成员方法
        System.out.println(this.name + ": 摇尾巴~~~");
    }
}

public class Test {
    //在主函数中,我们进行实例化这个类。并对实例化出的类进行使用。
    public static void main(String[] args) {
        PetDog dog1 = new PetDog();
        System.out.println("姓名:" + dog1.name);
        System.out.println("颜色:" + dog1.color);
        System.out.println("年龄:" + dog1.age);
        dog1.wag();
    }
}
输出结果:
构造方法2
构造方法1
阿花: 旺旺旺~~~
阿花: 旺旺旺~~~
阿花: 摇尾巴~~~
姓名:阿花
颜色:花色
年龄:25
阿花: 旺旺旺~~~
阿花: 摇尾巴~~~
我们看到this.既可以在构造方法中去调用其他成员方法,也可以在成员方法中去调用其他成员方法。而且可以写在方法中的任意一行。

三、this和super的用法(继承关系的情况下)

注:在 《JavaSE》---12.<面向对象系列之(继承)> 

的文章中讲了this和super用作调用构造方法。

this(...)用于调用本类构造方法,

super(...)用于调用父类构造方法,

两种调用不能同时在构造方法中出现

大家要知道: 有父类才会用到super关键字!!!

3.1 当父类成员变量、方法与子类成员变量、方法不同时

实例化对象后,用对象的引用.点号+变量名 或 方法 引用到哪个成员变量或者成员方法,那么访问的就是哪个成员变量或成员方法。

3.2 当父类成员变量、方法与子类成员变量、方法相同时

如果单纯用对象的引用.+成员变量 或 成员方法那么只能访问到子类自己的哪个变量或方法。如果想访问到从父类继承下来的成员变量或成员方法,那么我们需要用关键字super点号 + 成员变量 或 成员方法来引用。这样我们就可以访问到从父类继承下来的那个与子类成员变量或成员方法了

口说无凭:

3.1、3.2代码示例:

class Animal{//这是我们创建的父类Animal
    //父类成员变量
    public String name = "父类name";
    public int age = 99;

    //父类成员方法
    public void eat(){
        System.out.println(this.name + "父类正在吃饭");
    }
    public void sleep(){
        System.out.println(this.name + "父类正在睡觉");
    }
}
class Dog extends Animal{//这是我们创建的子类狗类。让它去继承Animal
    public String name = "子类name";
    public int height = 30;

    public void show(){
        System.out.println(name);                              //1.
        System.out.println(this.name);                         //2.
        System.out.println(super.name);                        //3.
        System.out.println("父类成员变量age:"+age);       //4.
        System.out.println("父类成员变量age:"+this.age);    //5.
        System.out.println("子类成员变量height:"+height);      //6.
        System.out.println("子类成员变量height:"+this.height); //7.
        eat();            //8.      
        this.eat();       //9.
        super.eat();      //10.
        sleep();          //11.
        this.sleep();     //12. 
        super.sleep();    //13. 
        wangWang();       //14.
        this.wangWang();  //15.
    }
    public void eat(){
        System.out.println(this.name + "子类正在吃饭");
    }
    void wangWang(){
        System.out.println(this.name + "子类喜欢汪汪叫!");
    }
}

public class GJiCheng {
    public static void main(String[] args) {
        //用Dog类实例化一个对象
        System.out.println("--------------------------------");
        Dog dog1 = new Dog();
        dog1.show();
        System.out.println("--------------------------------");
    }
}

输出结果:

--------------------------------
1.子类name 
2.子类name
3.父类name
4.父类成员变量age:99
5.父类成员变量age:99
6.子类成员变量height:30
7.子类成员变量height:30
8.子类name子类正在吃饭
9.子类name子类正在吃饭
10.父类name父类正在吃饭
11.父类name父类正在睡觉
12.父类name父类正在睡觉
13.父类name父类正在睡觉
14.子类name子类喜欢汪汪叫!
15.子类name子类喜欢汪汪叫!
--------------------------------

让我们再详细对比并分析一下打印输出的结果:

1. System.out.println(name);                

输出:子类name     

2. System.out.println(this.name);

输出:子类name

3. System.out.println(super.name);

输出:父类name

分析:

          ①②这个成员变量,父类有一个,子类也有一个。有两个name,一个是从父类继承的,一个是自己的。结果打印出了自己的。是因此我们可以知道,如果父类和子类成员变量相同时,会优先在子类中找变量。子类有就先输出子类自己的成员变量。如果子类没有这样成员变量才会输出父类的成员变量。因此1.和2.打印出来的是子类当中的name

          ③由super引用的成员变量只会在继承父类的成员变量中找。因此会访问从父类继承过来的那个成员变量,因此③打印出来的是父类name

4. System.out.println("父类类成员变量height:"+age);

输出:父类成员变量age:99

5. System.out.println("父类成员变量height:"+this.age); 

输出:父类成员变量age:99

分析:由于子类中只有一个从父类继承来的成员变量age,因此会输出父类成员变量age:99,合情合理

6. System.out.println("子类成员变量height:"+height);

输出:子类成员变量height:30

7. System.out.println("子类成员变量height:"+this.height);
输出:子类成员变量height:30

分析:这是子类自己的成员变量,输出这个结果合情合理

8. eat();         
输出:子类name子类正在吃饭

9. this.eat();      
输出:子类name子类正在吃饭

10. super.eat();      
输出:父类name父类正在吃饭

分析:这个成员方法,父类有一个,子类也有一个。

11. sleep();      
输出:父类name父类正在睡觉

12. this.sleep();     
输出:父类name父类正在睡觉     

13. super.sleep();   
输出:父类name父类正在睡觉

分析:这是从父类继承来的成员方法。这样输出合情合理。既可以用this,也可以用super,也可以什么都不加。

14. wangWang();
输出:子类name子类喜欢汪汪叫!   

15. this.wangWang();
输出:子类name子类喜欢汪汪叫!

分析:这是子类自己的成员方法,这样输出合情合理,

注意:这个就不能用super关键字引用了

小结:

1.this访问的时候,既可以访问从父类继承下来的,也可以访问子类自己的

2.super只能访问从父类继承过来的。

3.当父类和子类有相同的成员变量或成员方法时,可以用super去访问从父类继承过来的,不用super则访问的是子类自己的那个成员变量或成员方法。

4.super只是一个关键字。提高代码的可读性,让别人轻松知道这是访问父类中的

注意: 当父类与子类有相同的方法名但是参数不同的情况下,我们传入什么参数匹配到那个方法,那么就会访问到哪个方法.(方法的重载)

方法的重写

5.当父类与子类都有一个方法名相同,参数列相同,返回值相同的方法时,这其实就构成了方法的重写.在此情况下,如果不用super,那么最终访问到的方法就是子类的方法.与父类的方法无关.

6.super在当前类中使用那么super一定是子类.

注意:super只能在非静态方法中使用,不能在static方法中使用,因为super,this是一样的,是依赖于对象的,而static不依赖于对象,而是类被加载时就被创建出来了.


四、面试题:总结superthis的区别

他们之间有什么区别呢?
相同点
1. 都是 Java 中的关键字
2. 都可以在成员方法中用来访问:成员变量和调用其他的成员方法
3. 都可以作为构造方法的第一条语句
4. 只能在类的非静态方法中使用,用来访问非静态成员方法和字段
5. 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在
不同点
1. this 是当前对象的引用,当前对象即调用实例方法的对象, super 相当于是子类对象中从父类继承下来部分成员的引用
2. 在非静态成员方法中, this 用来访问本类的方法和属性, super 用来访问父类继承下来的方法和属性
3. 在构造方法中: this(...) 用于调用本类构造方法, super(...) 用于调用父类构造方法,两种调用不能同时在构造方法中出现
4. 在父类有有带参构造方法时。一定会存在 super(...) 的调用,用户没有写编译器也会增加,但是 this(...) 用户不写则没有。

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

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

相关文章

【TAROT学习日记】韦特体系塔罗牌学习(5)——皇帝 THE EMPEROR IV

韦特体系塔罗牌学习(5)——皇帝 THE EMPEROR IV 目录 韦特体系塔罗牌学习(5)——皇帝 THE EMPEROR IV牌面分析1. 基础信息2. 图片元素 正位牌意1. 关键词/句2.爱情婚姻3. 学业事业4. 人际财富5. 其他象征意 逆位牌意1. 关键词/句2…

大盘周期性复苏之际,英诺赛科的新叙事如何开讲?

半导体行业已经开始周期性复苏。 据同花顺iFinD统计,截至目前,已有37只半导体个股披露了上半年业绩预告,其中27股预喜,或扭亏或预增,预喜率超七成,长川科技净利预增幅度位居第一,暂列上半年半导…

Cadence OrCAD Capture原理图搭建及仿真方法

1 安装Cadence Allegro 略。 2 搭建原理图 2.1 打开软件 1、点击Capture CIS。 2、在弹出的产品选择栏点击OrCAD Capture,点击OK。 打开的软件界面如下: 2.2 新建工程 1、点击左上角File,New,Project,或者直接点…

王权与自由Steam国际服下载教程分享

王权与自由,一款集合了所有mmorpg游戏内玩法的游戏,包含爬塔、小队副本、团队副本、休闲竞技、装备打造、人物养成、攻城战、大型的pvp团战等多种游戏玩法,在游戏中只有我们想不到的内容,没有游戏不包含的内容,而且有意…

【Git远程操作】克隆远程仓库 https协议 | ssh协议

目录 前言 克隆远程仓库https协议 克隆远程仓库ssh协议 前言 这四个都是Git给我们提供的数据传输的协议,最常使用的还是https和ssh协议。本篇主要介绍还是这两种协议。 ssh协议:使用的公钥加密和公钥登录的机制(体现的是实用性和安全性&am…

AIGC工具:IPAdapter和ControlNet 指导控制生成工具

ControlNet强调对生成过程的直接控制,如通过线条、边缘、形状等信息;而IPAdapter侧重于风格迁移和内容的间接引导。 IPAdapter 它专注于通过迁移图片风格来生成新的图像内容。IPAdapter的强项在于能够将一张图片的风格迁移到另一张图片上,实现风格融合,甚至可以进行多图风格…

【Android】ConstrainLayout约束布局基本操作

文章目录 介绍约束条件添加方式外边距设置删除方式 添加约束条件父级位置对齐方式基线对齐引导线约束屏障约束 约束偏差使用链控制线性组 介绍 约束布局ConstraintLayout是 Android Studio 2.3 起创建布局后的默认布局 主要是为了解决布局多层嵌套问题,以灵活的方式…

【你也能从零基础学会网站开发】 SQL Server 2000企业管理器基本介绍

🚀 个人主页 极客小俊 ✍🏻 作者简介:程序猿、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注 SQL Server 20…

idea 配置jdk21 后 控制台中文乱码问题

1、 选择 add VM 填写:-Dfile.encodingGBK -Dfile.encodingGBK

Node对接支付宝沙箱完成支付完整流程

沙箱支付完整流程 一、进入支付宝沙箱网站二、进入沙箱环境三、下载【支付宝开放平台开发助手】四、打开【支付宝开放平台开发助手】工具,进行设置五、点击生成密钥点击打开文件位置 六、密钥格式转换七、回到沙箱配置密钥八、粘入应用工具九、需要应用的信息十、进…

算法:队列+宽搜

目录 题目一:N 叉树的层序遍历 题目二:二叉树的锯齿形层序遍历 题目三:二叉树最大宽度 题目四:在每个树行中找最大值 题目一:N 叉树的层序遍历 给定一个 N 叉树,返回其节点值的层序遍历。(…

智能图片识别表格

文章目录 在线体验快速开始一、项目介绍篇1.1 PP-Structure概述1.2 PP-Structure核心功能:表格识别1.3 PP-Structure特点1.4 模块介绍1.4.1 TableDec.py1.4.2 app.py 二、核心代码介绍篇2.1 app.py2.2 TableDec.py2.3 扩展-模型选择3.4.1 版面分析模型3.4.2 表格识别…

Linux-mysql数据备份恢复

MySQL数据备份与恢复 一、备份介绍 1、为什么要备份 备份:能够防止由于机械故障以及人为误操作带来的数据丢失,例如将数据库文件保存在了其它地方。 冗余: 数据有多份冗余,但不等备份,只能防止机械故障带来的数据丢…

netty如何结合Zookeeper如何高并发的代码实现步骤 —— 慧哥充电桩开源平台

Netty是一个高性能、异步事件驱动的NIO(非阻塞IO)网络通信框架,而Zookeeper是一个分布式、开放源码的分布式应用程序协调服务,常用于维护配置信息、命名空间和提供分布式同步。 在高并发环境下,Netty与Zookeeper的结合…

昇思25天学习打卡营第13天 | mindspore 实现 ShuffleNet 图像分类

1. 背景: 使用 mindspore 学习神经网络,打卡第 13 天;主要内容也依据 mindspore 的学习记录。 2. 迁移学习介绍: mindspore 实现 ShuffleNet 图像分类; ShuffleNet 基本介绍: ShuffleNetV1 是旷视科技提…

RabbitMQ学习实践一:MQ的安装

文章是本人在学习springboot实现消息队列功能时所经历的过程的记录,仅供参考,如有侵权请随时指出。 参考文章地址: RabbitMQ安装与入门_rabbitmq win11配置-CSDN博客 RabbitMQ入门到实战一篇文章就够了-CSDN博客 RabbitMQ系列&#xff08…

进程通信(5):POSIX消息队列

随进程持续:IPC对象一直存在直到最后一个进程关闭该对象为止(管道和FIFO)。 随内核持续:IPC对象存在一直到内核自举(系统重新启动)或者显示删除该对象。 如System V消息队列,System V信号量,S…

固态继电器的实际使用和有效应用

固态继电器(SSR)已成为现代电气和电子系统中不可或缺的组件,与传统的机电继电器相比具有众多优势。在本文中,我们将深入探讨SSR的实际方面、其应用以及有效部署的关键考虑因素。 什么是固态继电器? 固态继电器是使用半导体器件(如…

ORB_SLAM2 ORBSLAM2 Ubuntu20.04 ROS Noetic虚拟机镜像下载

下图是build.sh 和 build_ros.sh 编译完成截图: slam测试视频: orbslam2 ubuntu20.04 test 下载地址(付费使用,不能接受请勿下载): 链接:https://pan.baidu.com/s/16R7Pb6LjgR5SeoeBSZfgaQ?pwdu05r 提取…

前端小知识点——按钮之间出现很小的空隙如何规避

前端小知识点——按钮之间出现很小的空隙如何规避 文章介绍问题再现总结 文章介绍 本文主要介绍页面中两个按钮相邻时会出现一点空隙,导致在后续自定义填充的时候出现换行或其它问题,特此记录。 问题再现 这个图片能看到我们给外面的div设置的是300的宽…