当前位置: 首页 > news >正文

Java —— 类和对象(一)

目录

1. 面向对象的初步认知

1.1 什么是面向对象

1.2 面向对象与面向过程

2. 类定义和使用

2.1 认识类

2.2 类的定义格式

3. 类的实例化(如何产生对象)

3.1 什么是实例化

3.2 访问对象的成员

3.3 类和对象的说明

4. this引用

4.1 为什么要有this引用

4.2 什么是this引用

4.3 this引用的特性

4.4 练习

5. 对象的构造及初始化

5.1 如何初始化对象

5.1.1 默认初始化

5.1.2 就地初始化

5.2 构造方法


1. 面向对象的初步认知

1.1 什么是面向对象

Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来设计程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。

1.2 面向对象与面向过程

1. 传统洗衣服过程

传统的方式:

传统的方式:注重的是洗衣服的过程,少了一个环节可能都不行。

而且不同衣服洗的方式,时间长度,拧干方式都不同,处理起来就比较麻烦。如果将来要洗鞋子,那就是另一种方式。

按照该种方式来写代码,将来扩展或者维护起来会比较麻烦

2. 现代洗衣服过程

面向对象方式来进行处理,就不关注洗衣服的过程,具体洗衣机是怎么来洗衣服,如何来甩干的,用户不用去关心,只需要将衣服放进洗衣机,导入洗衣粉,启动开关即可,通过对象之间的交互来完成的

注意:面向过程和面向对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。

2. 类定义和使用

那么对象从何而来?

比如张三这个人, 就是一个对象. 我们就可以用一些口头语言去描述张三的形象特征, 也就是描述张三这个对象. 于是我们也可以通过代码来描述张三这个.

2.1 认识类

class Person {// 描述 人的属性public int age; // 年龄public String name; // 姓名// 描述 人的行为public void eat() {System.out.println("吃饭~ ");}
}

以上代码简单的素描了一下人的属性, 但注意这个代码并不等于有了一个"真实的张三".

那么描述一个对象我们就会通过这样的一个""去描述.

类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。
比如:洗衣机,它是一个品牌,在Java中可以将其看成是一个类别。
属性:产品品牌,型号,产品重量,外观尺寸,颜色...
功能:洗衣,烘干、定时....

2.2 类的定义格式

一个类由两部分组成: 属性 + 行为 (也叫 成员属性 + 成员方法)

在java中定义类时需要用到class关键字: class 类名{} (注: 类名使用大驼峰)

// 创建洗衣机类
class WashMachine {// 属性[字段] -> 成员属性public String brand;   // 品牌public String type;    // 型号public double weight;  // 重量public double length;  // 长public double width;  // 宽public double height;  // 高public String color;   // 颜色// 行为[方法] -> 成员方法public void washClothes(){   // 洗衣服System.out.println("洗衣功能");}public void dryClothes(){    // 脱水System.out.println("脱水功能");}public void setTime(){       // 定时System.out.println("定时功能");}
}
注意事项:
1. 类名使用大驼峰命名; 方法名/变量使用小驼峰命名.
2. 成员前写法 这里 统一为public.
3. 这里 写的方法不带static关键字.

定义 狗 这个类.
class Dog {// 成员变量public String name;public String color;// 行为public void barks() {System.out.println(name + "汪汪叫!");}public void wag() {System.out.println(name + "摇尾巴!");}
}
注意事项:
1. 一个Java文件一般只定义一个类
2. main方法所在的类一般要使用public修饰
3. public修饰的类必须要和文件名相同
4. 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改

3. 类的实例化(如何产生对象)

有了类之后, 应该怎么用? 应该怎么样拥有一个对象?

3.1 什么是实例化

我们现在已经有了一个类, 但是它不是一个具体的实体, 比如上文中的Dog类, 它并不是一个具体的狗, 只是一个类似于模板/图纸一样的东西, 那么要想让这个Dog成为"真正的狗", 那怎么办?我们来看.
Dog dog = new Dog();

这句代码我们称作: 实例化一个Dog对象.

那么只要new一个Dog, 就真正意义上有一只狗了. 这就是由类变成一个真正的实体.

定义了一个类,就相当于在计算机中定义了一种新的类型.

就像 int a = 10;, 类型 变量 = 值;, 我们定义的类Dog也叫做类型, 是我们自己定义的一种类型, 类型 变量 = 实例化一个对象;

与int,double类似,只不过int和double是java语言自带的内置类型,而类是用户自定义了一个新的类型. 类(一种新定义的类型)有了这些自定义的类型之后,就可以使用这些类来定义实例(或者称为对象)。

用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。

3.2 访问对象的成员

那么new了对象后, 类中的属性怎么访问?
通过 .操作符
dog.name = "来福";
dog.color = "黑色";

于是:

System.out.println(dog.name);
System.out.println(dog.color);

当给对象赋值了之后, 就可以通过 引用.方法 来访问方法.

dog.barks();
dog.wag();


3.3 类和对象的说明

1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员.

2. 类是一种自定义的类型,可以用来定义变量.

3. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量

4. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间

代码示例: 通过一个类可以实例化无数个对象.
Dog dog2 = new Dog();
dog2.name = "小灰";
dog2.color = "灰色";Dog dog3 = new Dog();
Dog dog4 = new Dog();

4. this引用

4.1 为什么要有this引用

先看一个日期类的例子:

public class TestDate {public int year;    // 年public int month;   // 月public int day;    // 日public void setDate(int y, int m, int d) {year = y;month = m;day = d;}public void printDate() {System.out.println(year + "-" + month + "-" + day);}public static void main1(String[] args) {TestDate testDate = new TestDate();System.out.println("fda");}
}

此时打断点,可以看到:

在testDate中yeah, month, day都为0.

我们现在要给它们赋值, 于是就要通过testDate这个引用单独的去访问成员属性.

    public static void main(String[] args) {TestDate testDate = new TestDate();testDate.year = 2023;testDate.month = 10;testDate.day = 26;System.out.println("fda");}

此时再运行Debug:

可以看到, 三个成员属性被赋值了.

也可以通过printDate()访问三个成员属性:


如果不是在main中一个一个赋值的, 那么就可以调用setDate()传入参数进行赋值.

我们进行Debug, 进入setDate():

可以看到, 现在y, m, d这些形参的值是有的, 然后yeah, month, day这些默认都是0, 往下走会发现会被赋值.

然后再运行, 打断点的这一行代码就执行完毕了.

这里要明白, yeah, month, day都是这个testDate对象里面的.


对于前面的代码, 如果我们把setDate()的形参变一下:

    public void setDate(int year, int month, int day) {year = year;month = month;day = day;}

运行之后会看到, 结果变成了都是0, 三个成员属性没有被赋值.

原因就在于:
局部变量优先原则.

也就是说, 在 setDate()中, 它认为yeah, month, day都是局部变量.
相当于在这里只是形参自己给自己赋值了, 所以它根本没有赋值到成员变量中.
那么怎么样才能赋值到成员变量中?
这里就要使用一个东西叫做 this关键字.
this加到 setDate()中就可以了
    public void setDate(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}

可以看到, 加上this之后, 运行结果就没有什么问题了.

为什么加上this就可以了, this又代表什么?

再来看下面这个例子:

    public static void main(String[] args) {TestDate testDate1 = new TestDate();TestDate testDate2 = new TestDate();TestDate testDate3 = new TestDate();testDate1.setDate(2023, 10, 26);testDate2.setDate(2024, 10, 26);testDate3.setDate(2025, 10, 26);testDate1.printDate();testDate2.printDate();testDate3.printDate();}

执行结果:

并且问题是在setDate中就算没有加this, 结果也是一样的.

三个对象都在调用setDate和printDate函数,但是这两个函数中没有任何有关对象的说明,setDate和

printDate函数如何知道打印的是那个对象的数据呢?


4.2 什么是this引用

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

public class Date {public int year;public int month;public int day;public void setDay(int year, int month, int day){this.year = year;this.month = month;this.day = day;}public void printDate(){System.out.println(this.year + "/" + this.month + "/" + this.day);}
}

注意:this引用的是调用成员方法的对象。

public static void main(String[] args) {Date d = new Date();d.setDay(2020,9,15);d.printDate();
}

this有三种使用方法:

  • this.成员变量
  • this.访问成员方法
  • this();访问构造方法
第三个具体后续讲解.

4.3 this引用的特性

1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型

2. this只能在"成员方法"中使用

3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象

4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收

在代码层面来简单演示--->注意:下图右侧中的Date类也是可以通过编译的


4.4 练习

写一个学生类 有姓名 年龄 等属性, 然后通过一个方法设置这些属性的值。其次通过写2个方法,在其中一个方法当中,使用this调用另一个方法.

public class Student {public String name;public int age;public void setStudent(String name, int age) {this.name = name;this.age = age;}public void print() {System.out.println(this.name + " => " + this.age);}public static void main(String[] args) {Student student = new Student();student.setStudent("Zhangsan", 18);student.print();}
}

5. 对象的构造及初始化

5.1 如何初始化对象

5.1.1 默认初始化

通过new可以实例化一个对象, 在对象中有很多的成员, 如果是方法中的一个局部变量, 我们知道没有初始化时一定会报错, 但是如果是对象, 却是能通过编译的.
    public static void main(String[] args) {Student student = new Student();// 没有给成员变量赋值, 直接访问成员变量, 不会报错, 因为它是一个引用变量System.out.println(student.name); }

不会报错的原因就在于默认初始化. 也就是没有给成员变量赋值的时候, 它们有自己的默认值, 这就是默认初始化.


5.1.2 就地初始化

写类的时候直接给成员变量赋值.

public class Student {public String name = "Zhangsan";public int age = 18;// ..
}
然而这种写法不好, 因为类本身就是一个模板, 对于上例来说不是所有的学生都叫做yy, 年龄都是18.
就地初始化的使用取决于代码的需求.

不同数据类型作为成员变量时所对应的默认值如下表:

数据类型

默认值

byte

0

char

'\u0000'

short

0

int

0

long

0L

boolean

false

float

0.0f

double

0.0

reference

null

那么除了setXXX方法还有其他的方式可以用于对象的初始化

5.2 构造方法

通过构造方法给对象中的成员进行初始化.

构造方法(也称为构造器)是一个特殊的成员方法,没有返回值, 方法名与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。

// 对于 Student类
Student() {System.out.println("不带参数的构造方法");
}// 可以通过构造方法传参并对成员变量赋值
Student(String name,int age) {System.out.println("带2个参数的构造方法");this.name = name;this.age = age;
}
虽然构造方法写好了, 但是构造方法如何被调用?
我们运行代码:

可以看到, 我们写的Student()方法被调用了. 并且可以知道, 这个方法是在Student student = new Student();这一行代码被调用的.

构造方法的调用是在new后的Student(). 我们通过new实例化对象, 在实例化对象的时候一定会调用构造方法.


在前面我们没有写两个Student()构造方法的时候, 并没有编译报错, Student student = new Student();也没有提供参数? 为什么说一定会调用构造方法?

当我们没有主动提供构造方法的时候, 编译器会默认帮我们提供一个不带参数的构造方法.

所以理论上来说, 我们在Student student = new Student();什么都没写, 实际上会有默认调用Student()的存在. 那么只要我们主动写了, 就会调用我们写的构造方法.

注: 一般我们写构造方法会在前面都加上public, 具体原因后续说.
// 对于 Student类
public Student() {System.out.println("不带参数的构造方法");
}// 可以通过构造方法传参并对成员变量赋值
public Student(String name,int age) {System.out.println("带2个参数的构造方法");this.name = name;this.age = age;
}

那么我们也可以调用带两个参数的构造方法, 在main中加上:

Student student2 = new Student("Sun",18);

可以看到, 不带参数的和带2个参数的都已经被打印.

由此可以说明, 在实例化对象的时候才会调用构造方法, 而且在调用构造方法的时候可以传参, 对成员属性进行赋值. 所以要想实例化对象, 就一定要调用构造方法.

于是我们可以理解为, 当构造方法调用完成之后, 对象才实际意义上的产生了.

同时我们可以看到, 构造方法是可以被重载的,


小结: 构造方法的特性:
1. 名字必须与类名相同
2. 没有返回值类型,设置为void也不行
3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
5. 如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。
注意:一旦用户定义,编译器则不再生成。
6. 构造方法中,可以通过this调用其他构造方法来简化代码
注意:
this(...)必须是构造方法中第一条语句
不能形成环
7. 绝大多数情况下使用public来修饰,特殊场景下会被private修饰(后序讲单例模式时会遇到)
// 关于构造方法中的 this 的使用
public Student() {// 调用 本类当中 其他的构造方法this("zhangsan", 23);   // 走到这里, 代码会调到Student(name, age)方法执行System.out.println("不带参数的构造方法");
}

相关文章:

Java —— 类和对象(一)

目录 1. 面向对象的初步认知 1.1 什么是面向对象 1.2 面向对象与面向过程 2. 类定义和使用 2.1 认识类 2.2 类的定义格式 3. 类的实例化(如何产生对象) 3.1 什么是实例化 3.2 访问对象的成员 3.3 类和对象的说明 4. this引用 4.1 为什么要有this引用 4.2 什么是this引用 4.3 th…...

RabbitMQ(高级特性)优先级队列

假设在电商系统中有一个订单催付的场景,即客户在一段时间内未付款会给用户推送一条短信提醒,但是系统中分为大型商家和小型商家。比如像苹果,小米这样大商家一年能给我们创造很大的利润,所以在订单量大时,他们的订单必…...

盘点苹果手机导出照片到电脑的3个方法!

大家都知道,手机中的照片是非常占用空间的。特别是对喜欢拍照的女生来说,每一张照片都很珍贵,并且也不舍得删除,所以想要将照片导出到电脑上进行保存。这样,也方便以后进行恢复与查看。 对于想要将苹果手机上的照片导…...

px、rpx、em以及rem的区别与用法

px和rpx是尺寸单位,在网页开发中常用,而em和rem是字体尺寸单位,在网页开发和移动端开发中常用,下面分别介绍一下它们的区别和用法: px:像素,是绝对单位,不会随字体大小变化而变化&am…...

类(class)

类是 C中一个非常重要的元素,可以说是 C的灵魂所在了,我们都知道 C说一种面向对象的编程语言,那么面向对象是一种什么概念呢?在 C程序设计中,所有一切东西都可以称之为对象,任何对象都应该具有属性和行为。…...

FPGA时序分析与约束(10)——生成时钟

一、概述 最复杂的设计往往需要多个时钟来完成相应的功能。当设计中存在多个时钟的时候,它们需要相互协作或各司其职。异步时钟是不能共享确定相位关系的时钟信号,当多个时钟域交互时,设计中只有异步时钟很难满足建立和保持要求。我们将在后面…...

A. Hit the Lottery

#include<bits/stdc.h> using namespace std; const int N1e55; int n,a[N],res; int main(){scanf("%d",&n);int an/100;n%100;int bn/20;n%20;int cn/10;n%10;int dn/5;n%5;int en;cout<<abcde;return 0; }...

mvn: Downloading from pluginRepository

场景 maven 项目打包 mvn package 报git地址错误&#xff08;有换新的git地址&#xff09; 检查了下 settting.xml的配置没问题。是新的git地址。 处理&#xff1a; 用命令&#xff1a; mvn -X [DEBUG] Message styles: debug info warning error success failure stron…...

docker相关知识

docker-compose https://www.runoob.com/docker/docker-compose.html Compose 使用的三个步骤&#xff1a; 使用 Dockerfile 定义应用程序的环境。 使用 docker-compose.yml 定义构成应用程序的服务&#xff0c;这样它们可以在隔离环境中一起运行。 最后&#xff0c;执行 …...

Springboot 集成 RocketMQ(进阶-消息)

0. 入门篇 Springboot 集成 RocketMq&#xff08;入门&#xff09;-CSDN博客 1. 异步消息 1.1 生产者 GetMapping("/send/async/{messageBody}")public String sendAsyncMsg(PathVariable("messageBody") String messageBody) {// 构建消息对象Message m…...

10 索引优化与查询优化

文章目录 索引失效案例关联查询优化对于左外连接对于内连接JOIN语句原理简单嵌套循环连接SNLJ索引嵌套循环连接INLJ块嵌套循环连接BNLJHash Join 子查询优化排序优化filesort算法&#xff1a;双路排序和单路排序 分组优化分页优化优先考虑覆盖索引索引下推ICP使用条件 其他查询…...

linux PVE安装

先下载安装包&#xff1a; ISO - Proxmox Virtual Environment 普通电脑主机的话&#xff0c;做个U盘启动盘&#xff0c;进行刷机即可。 如果还没制作U盘启动盘&#xff0c;建议用这个&#xff0c;方便多个镜像切换 Download . Ventoy 按照刷机提示页面一步步配置即可&#…...

ZZ038 物联网应用与服务赛题第J套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;J卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等&#xff1b; 2.竞赛任务中所使用…...

【寒武纪(3)】媒体处理系统的系统控制、视频输入和后处理子系统

系统控制 文章目录 系统控制1、配置视频缓存池Video Pool2、配置硬件IP为在线工作&#xff08;不通过DDR数据交互&#xff09;/ 离线工作&#xff08;写入DDR&#xff09;模式3、硬IP可以使用 非Video Block &#xff08;VB&#xff09;内存4、配置是否启动内存传递的压缩 视频…...

Linux下使用vscode编写Python项目

我此处是使用VScode远程连接的服务器&#xff0c;具体方法可看如下&#xff1a; 1、vscode中安装Python插件 按上面步骤安装好Python插件后&#xff0c;重启vscode&#xff1b; 2、选择Python解释器 创建Python项目结构&#xff1a; 按下F1&#xff0c;打开vscode命令栏&am…...

使用 curator 连接 zookeeper 集群 Invalid config event received

dubbo整合zookeeper 如图&#xff0c;错误日志 2023-11-04 21:16:18.699 ERROR 7459 [main-EventThread] org.apache.curator.framework.imps.EnsembleTracker Caller0 at org.apache.curator.framework.imps.EnsembleTracker.processConfigData(EnsembleTracker.java…...

大促期间也要做好低价治理

低价链接无处不在&#xff0c;对于品牌来说&#xff0c;日常治理低价是常规操作&#xff0c;那面对价格变化更快、促销信息更丰富的大促&#xff0c;对低价的治理要求会更高。否则容易被未授权在大促双十一、六一八期间分食流量。 力维网络有专业的团队为品牌提供低价治理服务&…...

【c++】——类和对象(中)——默认成员函数(上)

【学习目标】 1. 类的6个默认成员函数 2. 构造函数 3. 析构函数 4. 拷贝构造函数 目录 一.类的6个默认成员函数 二. 构造函数 2.1 概念 2.2.特性 三.析构函数 3.1.概念 3.2 特性 四.拷贝构造函数 4.1.概念 4.2.特性 一.类的6个默认成员函数 如果一个类中什么成员…...

钉钉企业微应用开发C#-HTTP回调接口

官方的STREAM回调推送的方式&#xff0c;试了几次都认证不过&#xff0c;就放弃了还是用HTTP的模式吧。 /// <summary>/// 应用回调/// </summary>/// <param name"model"></param>/// <returns></returns>public static Dictio…...

Rust编程基础之条件表达式和循环

1.if表达式 if 表达式允许根据条件执行不同的代码分支, 以下代码是一个典型的使用if表达式的例子: fn main() {let number 3; ​if number < 5 {println!("condition was true");} else {println!("condition was false");} } 所有的 if 表达式都以…...

MATLAB算法实战应用案例精讲-【人工智能】ROS机器人(补充篇)

目录 前言 ROS 机器人导航调参 1 速度和加速度 2 全局路径规划 3 局部路径规划...

基于8086汽车智能小车控制系统

**单片机设计介绍&#xff0c;基于8086汽车智能小车控制系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于 8086 的汽车智能小车控制系统是一种将微处理器技术应用于汽车控制的系统。下面是其主要的设计介绍&#xff1a; 硬…...

全光谱大面积氙光灯太阳光模拟器老化测试

氙灯光源太阳光模拟器广泛应用于光解水产氢、光化学催化、二氧化碳制甲醇、光化学合成、光降解污染物、 水污染处理、生物光照,光学检测、太阳能电池研究、荧光材料测试(透射、反射、吸收) 太阳能电池特性测试&#xff0c;光热转化&#xff0c;光电材料特性测试&#xff0c;生物…...

linux添加一条到中间路由器的路由

有时候需要配置一些明细路由&#xff0c;不能直接通过网关进行路由转发 配置示例 ip route add 10.0.12.0/24 via 10.0.41.1 dev bond0 这个命令是用于在Linux操作系统上配置IP路由的命令。具体来说&#xff0c;这个命令的含义是&#xff1a; ip route add: 这部分表示要添加…...

不同MySQL服务的表以及库的数据迁移(/备份)

目标&#xff1a; 将本地主机上usernameroot,passwordroot,port3307的MySQL服务中migration_one数据库的table_11数据表导出到本地的D:\start_java\XinQiUtilsOrDemo\testMigrationMySQL\table_11.bak注意&#xff1a;目前D:\start_java\XinQiUtilsOrDemo\testMigrationMySQL该…...

聊聊芯片超净间的颗粒(particle)

在芯片制造领域&#xff0c;颗粒的存在可能对生产过程产生巨大影响。其中&#xff0c;每个微小的颗粒&#xff0c;无论是来自人员、设备&#xff0c;还是自然环境&#xff0c;都有可能在制程中引发故障&#xff0c;从而对产品性能产生负面影响。这就是为什么在芯片厂中&#xf…...

服务器(windows Server 2019为例)中的日志中文乱码的解决办法

1. 首先&#xff0c;打开控制面板&#xff0c;找到区域&#xff08;Region&#xff09;&#xff0c;把Format设置为国语简体中文&#xff0c;点击高级(Administrative)后设置Current system locale为国语简体中文&#xff0c;按照图中步骤&#xff1a;...

Linux 学习(CentOS 7)

CentOS 7 学习 Linux系统内核作者: Linux内核版本 内核(kernel)是系统的心脏&#xff0c;是运行程序和管理像磁盘和打印机等硬件设备的核心程序&#xff0c;它提供了一个在裸设备与应用程序间的抽象层。 Linux内核版本又分为稳定版和开发版&#xff0c;两种版本是相互关联&am…...

架构决策记录 ADR

在项目和产品开发过程中&#xff0c;软件工程团队需要做出架构决策以实现其目标。这些决策可以是技术性的&#xff0c;也可以与流程相关。 技术决策&#xff1a;例如决定使用JBOSS Data Grid作为缓存解决方案还是选择Amazon Elasticache&#xff0c;或者决定使用AWS Network L…...

SSM之spring注解式缓存redis->redis整合,redis的注解式开发及应用场景,redis的击穿穿透雪崩

redis整合redis的注解式开发及应用场景redis的击穿穿透雪崩 1.redis整合 mysql整合 pom配置&#xff1b; String-fmybatis.xml --> mybatis.cfg.xml: 包扫描&#xff1b; 注册了一个jdbc.properties(url/password/username/...)&#xff1b; 配置数据源&#xff08;数据库连…...