JAVA学习笔记——第十一章 枚举和注解

一、引出枚举类

1.先看一个需求demo

package com.hspedu.enum_;public class Enumration01 {public static void main(String[] args) {Season Spring = new Season("春天", "温暖");Season Summer = new Season("夏天", "炎热");Season Autumn = new Season("秋天", "潮湿");Season Winter = new Season("冬天", "寒冷");//对于季节来说,他的对象是固定的四个不会有更多,如果按照这个设计类的思路,不能体现季节是固定的四个对象。// 因此这样的设计不好Autumn.setName("XXX");Autumn.setDesc("hahaha");//可以引出枚举类,把具体的对象一个一个列举出来的类//称为枚举类}
}class Season {private String name;private String desc;//描述public Season(String name, String desc) {this.name = name;this.desc = desc;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

2.创建Season对象有如下的特点:

1).季节的值是有限的几个值(spring,summer,autumn。wiinter)

2).只读,不需要修改

3.解决方案-枚举

1)枚举对应英文enumeration

2)枚举是一组常量的集合

3)枚举是一种特殊的类,里面只包含一组有限的特定的对象

4.枚举的两种实现方式

1.自定义类实现枚举

package com.hspedu.enum_;public class Enumration02 {public static void main(String[] args) {System.out.println(Season.SPRING);}
}
//演示自定义枚举实现
//1.构造器私有化,防止直接被new出来
//2.把setXXX相关方法去掉,防止属性被修改
//3.在Season内部,直接创建固定的对象
//4.可以加一个final,final+static可以跳过类加载,调用final+ static的变量,你不可能去修改,可以不需要类加载,底层优化,避免了类加载
//补充:这里出现了误会,去看了前面的final关键字。其实这里并没有跳过类加载,因为它new了一定会进行类加载,这里只是想说明常量不能修改
class Season {private String name;private String desc;//描述//定义了四个对象public final static Season SPRING = new Season("春天","温暖");//常量必须大写规范public final static Season SUMMEE = new Season("夏天","炎热");public final static Season AUTUMN = new Season("秋天","潮湿");public final static Season WINTER = new Season("冬天","寒冷");private Season(String name, String desc) {this.name = name;this.desc = desc;}public String getDesc() {return desc;}public String getName() {return name;}@Overridepublic String toString() {return "Season{" +"name='" + name + '\'' +", desc='" + desc + '\'' +'}';}
}

2. 使用关键字enum实现类加载

package com.hspedu.enum_;public class Enumeration3 {public static void main(String[] args) {System.out.println(Season2.SPRING);System.out.println(Season2.SUMMER);}
}
//演示关键字实现枚举
enum Season2 {//定义了四个对象
//    public final static Season2 SPRING = new Season2("春天","温暖");//常量必须大写规范
//    public final static Season2 SUMMEE = new Season2("夏天","炎热");
//    public final static Season2 AUTUMN = new Season2("秋天","潮湿");
//    public final static Season2 WINTER = new Season2("冬天","寒冷");
//如果使用enum来实现枚举类//1.使用关键字替代class//2.public final static Season2 SPRING = new Season2("春天","温暖");直接使用    SPRING("春天","温暖");//其实格式就是常量名(SPRING)+传给构造器的参数(("春天","温暖"))//3.如果有多个常量(对象),使用逗号间隔即可//4.如果使用enum实现枚举。要求定义的常量对象写在最前面SPRING("春天","温暖"),Winter("冬天","寒冷"),SUMMER("夏天","炎热"),AUTUMN("秋天","潮湿");private String name;private String desc;//描述private Season2(String name, String desc) {this.name = name;this.desc = desc;}public String getDesc() {return desc;}public String getName() {return name;}@Overridepublic String toString() {return "Season{" +"name='" + name + '\'' +", desc='" + desc + '\'' +'}';}
}

5.enum关键字实现枚举-快速入门

-

对于1.,使用javap来证明 除了继承以外往下看都是public staitc  final ,还有一些隐藏的属性啥的

对于3:如果调用无参构造器,创建常量对象,则可以省略()

what,SPRING("春天", "温暖"), Winter("冬天", "寒冷"), SUMMER("夏天", "炎热"), AUTUMN("秋天", "潮湿");//看上面如果调用无参构造器,创建常量对象,则可以省略()private String name;private String desc;//描述private Season2(){}private Season2(String name, String desc) {this.name = name;this.desc = desc;}

6.课堂练习

 这个是对的,这里其实就是调用了Gender这个类的无参构造器,因为在这个类里面没有写其他的构造器,所以默认的无参构造器是存在的。

这里要考虑,这个BOY默认是public static final修饰的,static是类成员

第三行其实就是输出Gender2的tostring方法,但是它没有只能向上找分类Enum,Enum中(源码)的注释说了这个name就是enum常量的名称 ,所以第三行返回的就是BOY

且static说明这个BOY是一个静态对象,所以只有一个地址所以最后是true,其实感觉和静态关系也不大,本来就是同一个对象的两个引用指向它

 7.java_Enum常用方法

package com.hspedu.enum_;/** @author SHOWY*/public class Enummethod03 {public static void main(String[] args) {//使用Season2枚举类来演示各种方法Season2 autumn = Season2.AUTUMN;//输出枚举对象的名称System.out.println(autumn.name());//输出的是该枚举对象的次序(第几个编号从0开始),后面可以用这个作比较System.out.println(autumn.ordinal());//返回的是Seasons2的数组,含有定义的所有枚举对象Season2[] values = Season2.values();//遍历取出枚举对象for (Season2 season : values) {//增强for循环System.out.println(season);}//valuesof把字符串转成枚举对象,要求字符串必须为已有的常量名//执行流程根据输入的名称到Season2的枚举对象查找,如果找到返回,如果没有报错Season2 autumn1 = Season2.valueOf("AUTUMN");System.out.println("autunmn1" + autumn1);System.out.println(autumn1 ==autumn);//compareto比较两个枚举常量,就是比较编号//就是把Season2.AUTUMN和Season2.SUMMER枚举对象的编号比较,发现其实是两个编号的差值System.out.println(Season2.AUTUMN.compareTo(Season2.SUMMER));}
}

 8.java_Enum课堂练习

package com.hspedu.enum_;/** @author SHOWY*/import java.time.temporal.WeekFields;public class EnumExercise2 {public static void main(String[] args) {Week week[] = Week.values();System.out.println("所有星期的信息如下");for(Week w: week){System.out.println(w);}}
}enum Week{//创建week枚举对象MONDAY("星期一"),   TUESDAY("星期二"),   WEDNESDAY("星期三"),   THURSDAY("星期四"),   FRIDAY("星期五"),SATURDAY("星期六"),   SUNDAY("星期日");private String name;private Week(String name) {this.name = name;}@Overridepublic String toString() {return name;}
}

9.enum实现接口

二、注解 

1.注解的理解

 

2.Java_Override注解

1.介绍

2.使用说明(总结)

 3.Java_Deprecated注解

package com.hepedu.deprecated;/** @author SHOWY*/public class deprecated
{public static void main(String[] args) {A a = new A();a.hi();}
}
//1.@Deprecated修饰某个元素,表示该元素
//2.不推荐使用但是能用
//3.可以修饰方法、类、包、参数等等
//4.可以做版本升级过渡使用
@Deprecated
class A{public int n1 = 10;@Deprecatedpublic void hi(){System.out.println("hi");}
}

4.Java_SuppressWarnings注解

当我们不希望看到这些警告的时候,可以用SuppressWarnings注解来抑制这个警告信息
package com.hepedu.deprecated;/** @author SHOWY*/import java.util.ArrayList;
import java.util.List;public class SuppressWarnings {//1.当我们不希望看到这些警告的时候,可以用SuppressWarnings注解来抑制这个警告信息//2.在("")中可以写入你希望抑制的警告信息,直接给个all就行//3.关于SuppressWarnings的作用范围和放置的位置相关,比如放置//在main方法,那么抑制警告的范围就是main,也可以直接放在类上//4.看源码可以看见有一个 String[] value();说明该注解类可以设置一个数组@java.lang.SuppressWarnings("all")public static void main(String[] args) {List list = new ArrayList();list.add("A");list.add("B");list.add("C");list.add("D");int i;System.out.println(list.get(1));}
}

5.四种元注解

1.基本介绍

2.Retention注解

2.Target注解

 3.Documented注解

形成文档的时候能保留

 4.Inherited注解

注解具有继承性

 三、练习

3.1 练习1

color是静态的上来就有一个空间,而静态static只在类加载的时候执行,所以在new c1的时候这个color不再变了,所以答案是9.0,red 100.0,red

3.2 练习2

(简单,跟着步骤写就行)

package com.test;/** @author SHOWY*/public class lianxi2 {
}
class Frock{private static int currentNum = 100000;private int serialNumber;public Frock() {serialNumber = getNextNum();}public int getSerialNumber() {return serialNumber;}public static int getNextNum(){currentNum +=  100;return currentNum;}}
class TestFrock{public static void main(String[] args) {System.out.println(Frock.getNextNum());//100100System.out.println(Frock.getNextNum());//100200Frock frock = new Frock();//100300Frock frock1 = new Frock();//100400Frock frock2 = new Frock();//100500System.out.println(frock.getSerialNumber());System.out.println(frock1.getSerialNumber());System.out.println(frock2.getSerialNumber());}
}

3.3 练习3 

有点简单,就是有一个方法事abstract的,记得给这个类也是抽象类

package com.test;/** @author SHOWY*/public class liaxi3 {public static void main(String[] args) {Animal cat = new Cat();Animal dog = new Dog();cat.shout();dog.shout();}
}abstract class Animal{//抽象方法所以事抽象类public abstract void shout();
}class Cat extends Animal{@Overridepublic void shout() {System.out.println("小猫喵喵叫");}
}
class Dog extends Animal{@Overridepublic void shout(){System.out.println("小狗汪汪叫");}
}

3.4 练习4(很重要匿名内部类)

package com.test;/** @author SHOWY*/public class lianxi4 {public static void main(String[] args) {Cellphone cellphone = new Cellphone();cellphone.testwork(new Icalculate() {@Overridepublic double work(double n1, double n2) {return n1 + n2;}},2,3);cellphone.testwork(new Icalculate() {@Overridepublic double work(double n1, double n2) {return n1 * n2;}},3,4);}
}interface Icalculate{public double work(double n1,double n2);
}
class Cellphone{//当我们调用testWork方法时,直接传入了一个实现ICalculate的接口的匿名内部类,该匿名内部类可以灵活实现work方法完成不同的计算任务public void testwork(Icalculate icalculate, double n1,double n2){double result = icalculate.work(n1,n2);System.out.println("计算后的结果是" + result);}
}

3.5 练习5 

package com.test;/** @author SHOWY*/public class lianxi5 {
}
class A {private String name = "cpy";public void f1() {class B {//这个类在方法体中,局部内部类private final String name = "gzh";public void show() {System.out.println("NAME" + name +"外部类的name" + A.this.name);
//重名了如果要调用外部类的私有变量就类.this.属性名来指定}}}
}

3.6 练习6(很难)

这道题还是有点难度大的,乱乱的

值得注意的点,比如在创建交通工具工厂类的时候,后续不需要创建对象,只需要加方法,所以设置为static,然后为了马是同一只马,也做了操作

//VehiclesFactory
package com.test;/** @author SHOWY*/public class VehiclesFactory {private static Horse  horse = new Horse();private VehiclesFactory() {}//防止创建对象//创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat//这里将方法做成static比较方便,不需要创建对象//为了船每次得到新的,马是老的同一只public static Horse getHorse(){return horse;}public static Boat getBoat(){return new Boat();}}//Horse
package com.test;/** @author SHOWY*/public class Horse implements Vehicles{@Overridepublic void work() {System.out.println("一般情况下使用马儿前进");}
}
//Boat
package com.test;/** @author SHOWY*/public class Boat implements Vehicles{@Overridepublic void work() {System.out.println("过河的时候使用小船");}
}
//Interface Vehicles  
package com.test;/** @author SHOWY*/public interface Vehicles {public void work();}
//Person
package com.test;/** @author SHOWY*/public class Person {private String name;private Vehicles vehicles;//接口当属性第一次见!public Person(String name, Vehicles vehicles) {this.name = name;this.vehicles = vehicles;}//实例化Person对象“唐僧”,要求一般情况下用horse作为交通工具,遇到大河时用Boat作为交通工具//这里涉及一个编程思路,就是可以把具体的要求封装成方法//先得到船//思考一个问题,如果不浪费在构建对象的时候,传入的交通工具对象public void passRiver() {
//        Boat boat = VehiclesFactory.getBoat();
//        boat.work();if(!(vehicles instanceof Boat)){vehicles = VehiclesFactory.getBoat();}vehicles.work();}public void common(){
//        Horse horse = VehiclesFactory.getHorse();
//        horse.work();if(!(vehicles instanceof Horse)){vehicles = VehiclesFactory.getHorse();}vehicles.work();}
}
//主函数
package com.test;/** @author SHOWY*/public class lianxi6 {
public static void main(String[] args) {Person tang =  new Person("唐僧",new Horse());tang.common();tang.passRiver();
}
}

补充:他要过一次火焰山

 这时候可以用到匿名内部类,假设他就过一次火焰山,除了添加firehill类以外

package com.test;/** @author SHOWY*/public class Person {private String name;private Vehicles vehicles;//接口当属性第一次见!public Person(String name, Vehicles vehicles) {this.name = name;this.vehicles = vehicles;}//实例化Person对象“唐僧”,要求一般情况下用horse作为交通工具,遇到大河时用Boat作为交通工具//这里涉及一个编程思路,就是可以把具体的要求封装成方法//先得到船//思考一个问题,如果不浪费在构建对象的时候,传入的交通工具对象public void passRiver() {
//        Boat boat = VehiclesFactory.getBoat();
//        boat.work();if(!(vehicles instanceof Boat)){vehicles = VehiclesFactory.getBoat();}vehicles.work();}public void common(){
//        Horse horse = VehiclesFactory.getHorse();
//        horse.work();if(!(vehicles instanceof Horse)){vehicles = VehiclesFactory.getHorse();}vehicles.work();}public void testwork(Vehicles vehicles){vehicles = VehiclesFactory.getfirehill();//搞到vehicles以后调用workvehicles.work();}
}
package com.test;/** @author SHOWY*/public class lianxi6 {
public static void main(String[] args) {Person tang =  new Person("唐僧",new Horse());tang.common();tang.passRiver();tang.testwork(new Vehicles() {@Overridepublic void work() {System.out.println("火焰山坐飞机走了");}});
}
}

3.7 练习7(成员内部类

这个题就是一个成员内部类,关键点在于在这类中写一个返回Air对象的方法!!! 

package com.test;/** @author SHOWY*/public class lianxi7 {public static void main(String[] args) {//实例化不同的对象Car car = new Car(60);car.getAir().flow();Car car1 = new Car(-1);car1.getAir().flow();}}
class Car{private double temperature;public Car(double temperature) {this.temperature = temperature;}class Air{//成员内部类能监控外部类的属性public void flow(){if(temperature > 40){System.out.println("温度大于了40,空调吹冷气。。");}else if(temperature < 0){System.out.println("温度小于0,空调吹暖气");}else{System.out.println("温度正常,关系空调");}}}//提供一个方法,返回Air对象public Air getAir(){return new Air();}
}

3.8 练习8(好题)

 重点在switch中枚举对象的匹配

package com.test;/** @author SHOWY*/public class lianxi8
{public static void main(String[] args){//演示枚举值得switch使用,switch中放入枚举对象,在case中直接写在枚举类中定义的枚举对象即可Color green = Color.GREEN;green.show();switch (green){case RED:System.out.println("匹配黄色");break;case BLACK:System.out.println("匹配到黑色");break;default:System.out.println("没有匹配到");}
}}
interface Myinterface{public void show();
}
enum Color implements Myinterface{RED(255,0,0),BLUE(0,0,255),BLACK(0,0,0),YELLOW(255,255,0),GREEN(0,255,0);private int redCalue;private int greenCalue;private int blueCalue;Color(int redCalue, int greenCalue, int blueCalue) {this.redCalue = redCalue;this.greenCalue = greenCalue;this.blueCalue = blueCalue;}@Overridepublic void show() {System.out.println("属性值为" + redCalue + "," + greenCalue + "," + blueCalue);}
}

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

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

相关文章

GeeCache-单体并发缓存

实现LRU中value接口的缓存类 使用互斥锁封装LRU缓存类&#xff0c;实现并发访问 实现Group组&#xff0c;用名称对缓存分类 Getter为缓存击穿时调用的回调函数 若缓存击穿则调用回调函数&#xff0c;并把读取到的值加载到缓存中

吸烟抽烟行为识别数据集-超高识别率,支持YOLO,COCO,VOC格式的标注,10162张各种姿势场景下的吸烟图片

吸烟抽烟行为识别数据集-超高识别率&#xff0c;支持YOLO&#xff0c;COCO,VOC格式的标注&#xff0c;10162张各种姿势场景下的吸烟图片 数据集分割 训练组91&#xff05; 9279图片 有效集5&#xff05; 507图片 测试集4% 376图片 预处理 自动定…

云原生基础设施指南:精通 Kubernetes 核心与高级用法

1. 云原生的诞生 随着互联网规模的不断增长&#xff0c;以及企业对敏捷开发、快速交付和高可用性的需求日益增强&#xff0c;传统的单体架构逐渐暴露出局限性&#xff0c;难以满足现代业务对动态扩展和高效迭代的要求。为此&#xff0c;云原生应运而生。 云原生是为云计算时代…

使用Windbg排查C++软件安装包安装时被安全软件拦截导致安装堵塞(线程卡住)的问题

目录 1、问题描述 2、初步分析 3、将Windbg附加到安装包进程上进行分析 4、在Windbg中查看相关变量的值&#xff0c;并设置断点进行动态调试 4.1、在Windbg中查看相关变量的值 4.2、在Windbg中使用bp命令设置断点进行动态调试 5、腾讯电脑管家已经退出&#xff0c;但其…

【OJ题解】面试题三步问题

个人主页: 起名字真南的CSDN博客 个人专栏: 【数据结构初阶】 &#x1f4d8; 基础数据结构【C语言】 &#x1f4bb; C语言编程技巧【C】 &#x1f680; 进阶C【OJ题解】 &#x1f4dd; 题解精讲 目录 **题目链接****解题思路****1. 问题分析****2. 递归思路****3. 优化方案&a…

源码编译安装MySQL

MySQL相应版本的tar包下载 在5.7的版本的MySQL编译安装的时候&#xff0c;需要依赖C语言的库文件【boost】&#xff0c; 如上图所示&#xff0c;如果你使用第一个MySQL的tar包&#xff0c;还需要去网上去下载boost即C语言的库文件&#xff0c;但是第二个tar包就既包含MySQL的源…

Hive3.X——异常处理Could not create ServerSocket on address 0.0.0.0/0.0.0.0:10000

Hive3.X——异常处理Could not create ServerSocket on address 0.0.0.0/0.0.0.0:10000 01 前言 大数据系列&#xff0c;学到了Hive&#xff0c;搭建环境的时候&#xff0c;因为使用的是本机WSL2&#xff08;别问为啥不用VMware&#xff0c;问就是条件有限&#xff0c;而且WS…

【数据结构——内排序】快速排序(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;实现快速排序算法。 测试说明 平台会对你编写的代码进行测试&#xff1a; 测试输入示例&#xff1a; 10 6 8 7 9 0 1 3 2 4 5 (说明&#xff1a;第一行是元素个数&a…

若依实现图片上传时自动添加水印

文章目录 总体思路1. 修改通用上传方法2. 去除文件路径前两级目录3. 添加水印方法运行效果总结 为了解决图盗用&#xff0c;并有效保护图片版权&#xff0c;若依项目需要实现一个功能&#xff1a;上传图片时&#xff0c;自动在图片上添加水印。这不仅可以有效防止盗用&#xff…

Mave下载、安装以及idea(2024)进行配置

目录 Maven简介 Maven下载 配置环境变量 配置本地仓库 在idea环境配置Maven 使用Maven创建工程 创建一个普通的java工程 创建一个Web项目 Maven简介 Maven是一个跨平台的项目管理工具&#xff0c;也是Apache组织中的一个成功的开源项目。它主要服务于基于Java的项目构…

Linux 简单命令总结

1. 简单命令 1.1. ls 列出该目录下的所有子目录与文件&#xff0c;后面还可以跟上一些选项 常用选项&#xff1a; ・-a 列出目录下的所有文件&#xff0c;包括以。开头的隐含文件。 ・-d 将目录象文件一样显示&#xff0c;而不是显示其下的文件。如&#xff1a;ls -d 指定目…

【反无人机目标检测与跟踪】DUT Anti-UAV数据集介绍

DUT Anti-UAV数据集是IEEE TITS 2023上大连理工大学团队提出的Vision-based Anti-UAV Detection and Tracking论文中提出的一个可见光反无人机检测与跟踪数据集。 因为反无人机目标检测与跟踪的数据集都比较少&#xff0c;因此这个数据集也非常宝贵。 这个数据集的链接如下 数…

【热力学与工程流体力学】流体静力学实验,雷诺实验,沿程阻力实验,丘里流量计流量系数测定,局部阻力系数的测定,稳态平板法测定材料的导热系数λ

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…

Angular由一个bug说起之十二:网页页面持续占用CPU过高

随着网络日益发达&#xff0c;网页的内容也更加丰富&#xff0c;形式也更加多样化。而随之而来的性能问题也不容小觑。这篇文章我会根据我在实践中遇到的一个问题来总结&#xff0c;我在面对性能问题的一些解决步骤&#xff0c;希望能对大家有所启发。 查找问题原因 我接触的…

游戏引擎学习第44天

仓库: https://gitee.com/mrxiao_com/2d_game 向量数学的重要性 矢量数学非常重要&#xff0c;因为 它在某种程度上类似于将C和C视为高于汇编语言的语言&#xff0c;从而使得我们能够以略高的层次思考问题&#xff0c;同时保留大部分性能好处和直接访问的类型。这种思维方式就…

通俗易懂的 Nginx 反向代理 配置

通俗易懂的 Nginx 反向代理 配置 首先 root 与 alias 的区别 root 是直接拼接 root location location /i/ {root /data/w3; }当请求 /i/top.gif &#xff0c;/data/w3/i/top.gif 会被返回。 alias 是用 alias 替换 location location /i/ {alias /data/w3/images/; }当请…

【NLP高频面题 - 词嵌入篇】为什么说Word2vec的词向量是静态的?

【NLP高频面题 - 词嵌入篇】为什么说Word2vec的词向量是静态的&#xff1f; 重要性&#xff1a;★★ NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用&#xf…

Android -- WebView之loadData加载html字符串显示网页

目录 前言1. loadUrl 加载网页地址2. loadData 加载Html字符来显示网页3. loadDataWithBaseURL4. 总结 前言 最近在给一个老项目做64位so文件的适配&#xff0c;当应用发布到应用市场上后&#xff0c;用户反馈64位手机上的网页加载不出内容&#xff0c;但32位的手机上是正常…

Docker在Ubuntu和CentOS系统下的安装

目录 1. 各版本平台支持情况2. 在Ubuntu系统下安装docker3. 常见报错4. Docker的镜像源修改5. Docker目录修改6. 在CentOS系统下安装docker 1. 各版本平台支持情况 &#xff08;1&#xff09;平台支持情况如下&#xff1a; Server 版本 桌面版本 2. 在Ubuntu系统下安装docker…

Ansible-Playbook基础学习

一.Ansible Playbook基本介绍 1.Playbook 介绍 Ansible Playbook 是 Ansible 的核心组件之一&#xff0c;它是一个用于配置管理、应用部署和任务自动化的文本文件&#xff0c;使用 YML格式编写。YML 的语法简洁明了&#xff0c;易于阅读和编写&#xff0c;使得用户可以方便地…