Scala学习笔记14: 模式匹配和样式类

目录

    • 第十四章 模式匹配和样式类
      • 1- 模式匹配
      • 2- 模式中的变量
      • 3- 类型模式
      • 4- 匹配数组、列表和元组等集合
      • 5- 样例类
      • 6- 守卫
      • 7- 提取器
      • 8- 变量声明中的模式
      • 9- for推导式中的模式
      • end

第十四章 模式匹配和样式类

在Scala中, 模式匹配和样例类是强大的功能, 用于处理复杂的数据结构和逻辑 ;

模式匹配是一种功能强大的机制, 可以根据数据的结构和属性进行匹配和处理 ;

样例类是一种特殊的类, 用于简化模式匹配和不可变性 .

1- 模式匹配

在Scala中, 模式匹配是一种强大的功能, 用于根据数据的结构和属性进行匹配和处理 ;

模式匹配类似于 switch 语句, 但更加灵活和功能丰富 ;

下面简单介绍Scala 中模式匹配的用法和特性 :

  1. 基本语法 :

    • Scala中的模式匹配使用 match 关键字, 结合 case 语句进行匹配

    • 示例:

    •     val x: Int = 2
          x match {
            case 1 => println("One")
            case 2 => println("Two")
            case _ => println("Other")
          }
          // 输出: Two
      
  2. 匹配类型 :

    • 可以根据数据类型进行匹配

    • 示例:

    •     // 匹配类型
          def matchType(x: Any): String = x match {
            case i: Int => s"Int: $i"
            case s: String => s"String: $s"
            case _ => "Other type"
          }
      
          println(matchType(1)) // 输出: Int: 1
          println(matchType("Hello")) // 输出: String: Hello
          println(matchType(true)) // 输出: Other type
      
  3. 匹配集合 :

    • 可以匹配集合中的元素

    • 示例:

    •     // 匹配集合
          val list = List(1, 2, 3, 4, 5)
          list match {
            case List(1, 2, 3, _, _) => println("List contains 1, 2, 3")
            case _ => println("Other list")
          }
          // 输出:List contains 1, 2, 3
      
  4. 匹配样例类 :

    • 可以使用样例类进行模式匹配

    • 示例:

    •     // 匹配样例类
          case class Person(name: String, age: Int)
          val person = Person("Tom", 18)
          val result = person match {
            case Person("Tom", 18) => "Tom is 18 years old"
            case _ => "unknown"
          }
      
          println(result) // 输出: Tom is 18 years old
      
          val result2 = person match {
            case Person(name, age) => s"$name is $age years old"
            case _ => "unknown"
          }
      
          println(result2) // 输出: Tom is 18 years old
      
  5. 模式守卫 :

    • 可以使用模式守卫 (pattern guards) 对匹配条件进行进一步的限制 ;

    • 示例:

    •     // 模式守卫
          val x: Int = 10
      
          val y = x match {
            case i if i > 5 => "bigger than 5"
            case i if i < 5 => "smaller than 5"
            case _ => "equal to 5"
          }
          println(y) // Output: bigger than 5
      
          val z = x match {
            case even if even % 2 == 0 => "even"
            case odd if odd % 2 != 0 => "odd"
            case _ => "neither even nor odd"
          }
          println(s"$x is $z!") // Output: 10 is even!
      

通过模式匹配, 你可以根据不同的情况处理数据, 使代码更加清晰和易于理解 ;

模式匹配是Scala中强大且常用的功能之一, 适用于各种场景下的数据处理和逻辑判断 .

2- 模式中的变量

在Scala模式中, 变量模式 (Variable pattern) 是一种特殊的模式, 用于捕获匹配的值并将其绑定到变量上 ;

变量模式以小写字母开头, 可以在模式匹配中使用, 允许在匹配成功时将匹配的值赋值给变量 ;

如果关键字 case 后面跟着一个变量名, 那么匹配的表达式会被赋值给变量 ;

  1. 基本语法 :

    • 变量模式以小写字母开头, 用于捕获匹配的值 ;

    • 示例 :

    •     val x: Int = 22
          x match {
            case y => println(s"匹配到的值为: $y")
          }
          // Output: 匹配到的值为: 22
      
  2. 变量绑定 :

    • 变量模式还可以用于将匹配的值绑定到变量上, 以便后续使用 ;

    • 示例 :

    •     val x: Int = 6
      
          val result = x match {
            case z => z * 2
          }
          
          println(result) // Output: 12
      
  3. 使用场景 :

    • 变量模式适用于需要在模式匹配中捕获值并进行处理的情况 ;
    • 可以在模式匹配中使用变量模式来提取匹配值, 然后根据需要进行进一步的操作 ;

通过使用变量模式, 你可以在Scala模式匹配中灵活地捕获匹配的值并进行处理, 使得代码更加清晰和易于理解 ;

变量模式是模式匹配中常用且有用的一种模式, 适用于各种需要对匹配值进行操作的场景 .

3- 类型模式

在Scala中, 类型模式(type pattern) 是一种模式匹配的方式, 用于匹配特定的数据类型 ;

类型模式允许你根据数据的类型进行匹配, 并执行相应的操作 ;

  1. 基本语法 :

    • 类型模式用于匹配特定的数据类型, 通常与 case 语句结合使用 ;

    • 示例 :

    •     // 类型匹配
          def matchType(x: Any) = x match {
            case i: Int => s"int: $i"
            case s: String => s"string $s"
            case _ => "other"
          }
      
          println(matchType(1)) // int: 1
          println(matchType("a")) // string a
          println(matchType(true)) // other
          println(matchType(List(1, 2, 3))) // other
      
  2. 使用场景 :

    • 类型模式适用于需要根据数据类型进行不同处理的情况 ;
    • 可以根据数据的类型来选择不同的逻辑分支, 实现更灵活的数据处理 ;
  3. 类型擦除 :

    • 在Scala中, 由于类型擦除的存在, 有时候无法直接匹配泛型类型 ;
    • 可以使用类型擦除后的类型进行匹配, 或者通过 ClassTag 等方式来处理泛型类型 ;

通过使用类型模式, 你可以根据数据的类型进行精确的匹配和处理, 使得代码更加灵活和具有表现力 ;

类型模式是Scala模式匹配中常用的一种模式, 适用于需要根据数据类型进行不同处理的各种场景 .

4- 匹配数组、列表和元组等集合

在Scala中, 模式匹配可以用于匹配数组、列表和元组等集合类型 ;

  1. 匹配数组 :

    • 使用 Array 类型进行匹配 ;

    • 示例:

    •     // 匹配数组
          val arr = Array(1, 2, 3, 4, 5)
          val result = arr match {
            case Array(1, _, _, _, _) => "匹配到数组的第一个元素为1"
            case Array(_, 2, _, _, _) => "匹配到数组的第二个元素为2"
            case Array(_, _, 3, _, _) => "匹配到数组的第三个元素为3"
            case Array(_, _, _, 4, _) => "匹配到数组的第四个元素为4"
            case Array(_, _, _, _, 5) => "匹配到数组的第五个元素为5"
          }
          println(result) // Output: 匹配到数组的第一个元素为1
      
          val result2 = arr match {
            case Array(1, 2, 3, 4, 5) => "匹配到数组[1, 2, 3]"
            case _ => "其它数组"
          }
          println(result2) // Output: 匹配到数组[1, 2, 3]
      
  2. 匹配列表 :

    • 使用 List 类型进行匹配 ;

    • 示例:

    •     // 匹配列表
          val list = List(1, 2, 3, 4, 5)
          list match {
            case List(1, 2, 3, 4, 5) => println("匹配成功, 列表[1, 2, 3, 4, 5]")
            case _ => println("匹配失败")
          }
          // Output: 匹配成功, 列表[1, 2, 3, 4, 5]
      
  3. 匹配元组 :

    • 使用元组类型进行匹配 ;

    • 示例 :

    •     // 匹配元组
          val t1 = (1, "a", 3.14, "π")
          t1 match {
            case (1, "a", 3.14, "π") => println("匹配到元组(1, \"a\", 3.14, \"π\")")
            case _ => println("其它元组")
          }
          // Output: 匹配到元组(1, "a", 3.14, "π")
      
          val t = (1, 2, "v")
          t match {
            case (a, b, c) => println(a + b + c)
            case _ => println("default")
          }
          // Output: 3v
      

通过以上示例, 你可以看到如何在Scala中使用模式匹配类匹配数组、列表和元组等集合类型 ;

模式匹配是Scala中强大且灵活的特性, 可以帮助你根据不同的数据结构进行精确的匹配和处理 .

5- 样例类

在Scala中 , 样例类 (case class) 是一种特殊的类, 用于表示不可变的数据结构 ;

样例类具有许多有用的特性, 使其在模式匹配和不可变数据建模方面非常有用 ;

  1. 定义样例类 :

    • 样例类使用 case class 关键字进行定义, 通常用于表示数据结构 ;

    • 示例 :

    • case class Person(name: String, age: Int)
      
  2. 特性 :

    • 样例类自动提供了 equalshashCodetoString 方法的实现 ;
    • 样例类的构造器参数默认是 val , 使其成为不可变的数据结构 ;
    • 可以使用模式匹配类处理样例类的实例 ;
  3. 模式匹配 :

    • 样例类子啊模式匹配中非常有用, 可以根据不同的样例类进行不同的处理 ;

    • 示例 :

    •     // 样例类 模式匹配
          case class Person(name: String, age: Int)
      
          val person = Person("zhangsan", 18)
          val result = person match {
            case Person("zhangsan", 18) => "zhangsan is 18"
            case Person("zhangsan", 19) => "zhangsan is 19"
            case _ => "other"
          }
          println(result) // Output: zhangsan is 18
      
          val result2 = person match {
            case Person(name, age) => s"$name is $age"
            case _ => "other"
          }
          println(result2) // Output: zhangsan is 18
      
  4. 不可变性 :

    • 样例类的实例时不可变的, 这意味着一旦创建就无法更改其内容 ;
    • 这种不可变性使得样例类在函数式编程和数据建模中非常有用 ;

通过使用样例类, 你可以轻松地表示不可变的数据结构, 并利用Scala强大的模式匹配功能来处理这些数据 ;

样例类是Scala中常用的概念, 用于简化数据建模和模式匹配的过程 .

6- 守卫

在Scala中, 模式匹配中的守卫 (guards) 是一种强大的机制, 允许在 scae 语句中添加布尔表达式作为额外条件, 以进一步细化匹配的逻辑 ;

当模式匹配遇到带有守卫的 case 语句时, 只有当守卫条件为真时, 才会执行该 case 语句 ;

这使得模式匹配更加灵活, 能够根据特定条件选择不同的分支逻辑 ;

  1. 基本语法 :

    • 守卫是在 case 语句后使用 if 关键字加上布尔表达式来定义的 ;

    • 示例 :

    •     val a: Int = 12
          a match {
            case even if a % 2 == 0 => println(s"$even 是偶数")
            case odd if a % 2 == 1 =>  println(s"$odd 是奇数")
          }
          // Output: 12 是偶数
      
  2. 使用场景 :

    • 守卫允许根据更复杂的条件进行模式匹配, 例如数值的特定属性或范围 ;
    • 可以在模式匹配中结合守卫实现更精细的逻辑控制, 避免冗长的嵌套 if-else 语句 ;
  3. 灵活性 :

    • 守卫条件可以是任何布尔表达式, 可以包含逻辑运算、比较操作等 ;
    • 守卫使得模式匹配更具表现力和可读性, 能够处理更多复杂的匹配情况 ;

通过使用守卫, 你可以根据额外的条件对模式匹配进行细致化的控制, 使得代码更加清晰和易于维护 ;

守卫是Scala模式匹配中的重要特性 , 为处理各种匹配情况提供了更多的灵活性和表达能力 .

7- 提取器

在Scala中, 提取器 (Extractor) 是一种用于模式匹配的对象, 它定义了从输入中提取出构造参数的逻辑;

提取器通常用于将对象分解为其组成部分, 以便在模式匹配中使用 ;

提取器对象必须包含 unapply 方法, 用于从输入中提取值 ;

  1. 基本语法 :

    • 提取器对象通常包含 unapply 方法, 用于提取值并返回一个 Option 类型的结果 ;

    • 示例 :

    •     object Email {
            def unapply(email: String): Option[(String, String)] = {
              val parts = email.split("@")
              if (parts.length == 2) {
                Some(parts(0), parts(1))
              } else {
                None
              }
            }
          }
      
          val email = "zhangsan@163.com"
          val Email(name, domain) = email
          println(name) // Output: zhangsan
          println(domain) // Output: 163.com
      
  2. 模式匹配中的应用 :

    • 提取器通常与模式匹配结合使用, 允许从对象中提取数据并进行匹配 ;

    • 示例 :

    •     object Email {
            def unapply(email: String): Option[(String, String)] = {
              val parts = email.split("@")
              if (parts.length == 2) {
                Some(parts(0), parts(1))
              } else {
                None
              }
            }
          }
      
          // 模式匹配中使用 提取器
          val email = "john.doe@gmail.com"
          email match {
            case Email(name, domain) => println(s"Name: $name, Domain: $domain")
            case _ => println("Invalid email format!")
          }
          // Output: Name: john.doe, Domain: gmail.com
      
  3. 提取器对象 :

    • 提取器对象可以定义多个 unapply 方法重载, 以适应不同的匹配情况 ;
    • 提取器对象还可定义 unapplySeq 方法用于提取序列类型的值 ;

通过使用提取器, 你可以在Scala中更加灵活地进行模式匹配, 从复杂的数据结构中提取所需的信息 ;

提取器是Scala模式匹配的重要组成部分, 使得代码更具表现力和可读性 .

8- 变量声明中的模式

在Scala中, 变量声明中的模式 (pattern) 允许你在声明变量时使用模式匹配的方式 ;

这种模式匹配的变量声明方式可以帮助你从复杂的数据结构中提取所需的部分, 并将其赋值给变量 ;

  1. 基本语法 :

    • 在变量声明时, 可以使用模式匹配的方式来提取数据并赋值给变量 ;

    • 示例 :

    •     val (x, y) = (1, 2) // 将元组(1, 2) 赋值给变量 x, y
          println(x) // Output: 1
          println(y) // Output: 2
      
  2. 匹配复杂数据结构 :

    • 变量声明中的模式允许你从各种数据结构中提取数据, 如元组、列表、样例类等 ;

    • 示例 :

    •     val List(a, b, c) = List(1, 2, 3)
          println(a) // Output: 1
          println(b) // Output: 2
          println(c) // Output: 3
      
  3. 匹配嵌套结构 :

    • 可以在变量声明中使用模式匹配来处理嵌套的数据结构, 如元组中包含元组的情况 ;

    • 示例 :

    •     val ((x, y), z) = ((1, 2), 3) // 从嵌套的元组中提取值并赋给变量 x y z
          println(x) // Output: 1
          println(y) // Output: 2
          println(z) // Output: 3
      

通过在变量声明中使用模式, 你可以更加灵活地从数据结构中提取所需的部分, 并将其赋值给变量, 使得代码更具表现力和简洁性 ;

这种模式匹配的变量声明方式在处理复杂数据结构时非常有用 .

9- for推导式中的模式

在Scala中, for 推导式中的模式匹配是一种强大的功能, 允许你在遍历集合或序列时使用模式匹配来接受元素并提取所需的部分 ;

  1. 基本语法 :

    • for 推导式中, 可以使用模式匹配来接受集合中的元素, 并将匹配的部分赋值给变量 ;

    • 示例 :

    •     val list = List((1, "one"), (2, "two"), (3, "three"))
          for (elem <- list) {
            val (num, str) = elem
            println(s"num: $num, str: $str")
          }
          /*
          num: 1, str: one
          num: 2, str: two
          num: 3, str: three
           */
      
  2. 匹配嵌套结构 :

    • 你可以在 for 推到式中使用模式匹配来处理嵌套的数据结构, 如元组中包含元组的情况 ;

    • 示例 :

    •     val nestList = List((1, "one", true), (2, "two", false), (3, "three", true))
          for (
            (num, str, bool) <- nestList
          ) {
            println(s"Number: $num, Name: $str, Flage: $bool")
          }
          /*
          Number: 1, Name: one, Flage: true
          Number: 2, Name: two, Flage: false
          Number: 3, Name: three, Flage: true
           */
      
  3. 过滤条件 :

    • 可以结合模式匹配和条件表达式来过滤元素, 只处理符合条件的部分 ;

    • 示例 :

    •     val nestList = List((1, "one", true), (2, "two", false), (3, "three", true))
          for (
            (num, str, bool) <- nestList if bool == true
          ) {
            println(s"Number: $num, Name: $str, Flage: $bool")
          }
          /*
          Number: 1, Name: one, Flage: true
          Number: 3, Name: three, Flage: true
           */
      

通过在 for 推导式中使用模式匹配, 可以更加灵活地处理集合中的元素, 从而简化代码并提高可读性 ;

模式匹配在 for 循环中的应用使得处理复杂数据结构变得更加方便和直观 .

end

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】数据类型和表的约束

1. 数据类型 分类数据类型解释数值类型BIT (M)位类型。M位数&#xff0c;默认为1范围1-64BOOL01表示真假TINYINT [UNSIGNED]8位整型SMALLINT [UNDIGNED]16位短整型INT [UNSIGNED]32位整型BIGINT [UNSIGNED]64位长整型小数类型FLOAT [ (M, D) ] [UNSIGNED]32位浮点类型&#xf…

【机器学习】机器学习重要方法——深度学习:理论、算法与实践

文章目录 引言第一章 深度学习的基本概念1.1 什么是深度学习1.2 深度学习的历史发展1.3 深度学习的关键组成部分 第二章 深度学习的核心算法2.1 反向传播算法2.2 卷积神经网络&#xff08;CNN&#xff09;2.3 循环神经网络&#xff08;RNN&#xff09; 第三章 深度学习的应用实…

群晖NAS部署VoceChat私人聊天系统并一键发布公网分享好友访问

文章目录 前言1. 拉取Vocechat2. 运行Vocechat3. 本地局域网访问4. 群晖安装Cpolar5. 配置公网地址6. 公网访问小结 7. 固定公网地址 前言 本文主要介绍如何在本地群晖NAS搭建一个自己的聊天服务Vocechat&#xff0c;并结合内网穿透工具实现使用任意浏览器远程访问进行智能聊天…

android adb常用命令集

1、系统调试 #adb shell&#xff1a;进入设备的 shell 命令行界面&#xff0c;可以在此执行各种 Linux 命令和特定的 Android 命令。 #adb shell dumpsys&#xff1a;提供关于系统服务和其状态的详细信息。 #adb logcat&#xff1a;实时查看设备的日志信息。可以使用过滤条件来…

浅析Vite本地构建原理

前言 随着Vue3的逐渐普及以及Vite的逐渐成熟&#xff0c;我们有必要来了解一下关于vite的本地构建原理。 对于webpack打包的核心流程是通过分析JS文件中引用关系&#xff0c;通过递归得到整个项目的依赖关系&#xff0c;并且对于非JS类型的资源&#xff0c;通过调用对应的loade…

使用 Reqable 在 MuMu 模拟器进行App抓包(https)

1、为什么要抓包&#xff1f; 用开发手机应用时&#xff0c;查看接口数据不能像在浏览器中可以直接通过network查看&#xff0c;只能借助抓包工具来抓包&#xff0c;还有一些线上应用我们也只能通过抓包来排查具体的问题。 2、抓包工具 实现抓包&#xff0c;需要一个抓包工具…

Java8使用Stream流实现List列表查询、统计、排序、分组、合并

Java8使用Stream流实现List列表查询、统计、排序以及分组 目录 一、查询方法1.1 forEach1.2 filter(T -> boolean)1.3 filterAny() 和 filterFirst()1.4 map(T -> R) 和 flatMap(T -> Stream)1.5 distinct()1.6 limit(long n) 和 skip(long n) 二、判断方法2.1 anyMa…

G7 - Semi-Supervised GAN 理论与实战

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 理论知识模型实现引用、配置参数初始化权重定义算法模型模型配置模型训练训练模型 模型效果总结与心得体会 理论知识 在条件GAN中&#xff0c;判别器只用…

轻松搞定数据可视化配色,这份指南助你一臂之力!

配色是数据可视化图表的主要因素。一组合适的配色可以表达数据的重点和趋势&#xff0c;而不良的配色会削弱可视化表达的有效性。在本文中&#xff0c;我将梳理数据可视化中使用的配色板类型&#xff0c;通过案例揭示数据可视化配色技巧&#xff0c;并介绍可生成配色板的插件&a…

Day 32:503. 下一个更大的元素Ⅱ

Leetcode 503. 下一个更大的元素Ⅱ 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#xff0c;这个数字之后的第一个比它…

嵌入式实验---实验七 SPI通信实验

一、实验目的 1、掌握STM32F103SPI通信程序设计流程&#xff1b; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、使用STM32F103R6通过74HC595控制一位LID数码管&#xff0c;实现以下两个要求&#xff1a; &#xff08;1&#xff09;数码管从0到9循环显示&#xff1b; …

[leetcode]add-strings 字符串相加

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:string addStrings(string num1, string num2) {int i num1.length() - 1, j num2.length() - 1, add 0;string ans "";while (i > 0 || j > 0 || add ! 0) {int x i > 0 ? num1[i…

[word] word 如何在文档中进行分栏排版? #媒体#其他#媒体

word 如何在文档中进行分栏排版&#xff1f; 目标效果 将唐代诗人李白的组诗作品《清平调词》进行分栏排版&#xff0c;共分三栏&#xff0c;每一首诗作为一栏&#xff0c;参考效果如下图。

基于STM32的智能健康监测手表

目录 引言环境准备智能健康监测手表系统基础代码实现&#xff1a;实现智能健康监测手表系统 4.1 数据采集模块4.2 数据处理与分析4.3 通信模块实现4.4 用户界面与数据可视化应用场景&#xff1a;健康监测与管理问题解决方案与优化收尾与总结 1. 引言 智能健康监测手表通过使…

ONLYOFFICE 8.1版本桌面编辑器深度体验:创新功能与卓越性能的结合

ONLYOFFICE 8.1版本桌面编辑器深度体验&#xff1a;创新功能与卓越性能的结合 随着数字化办公的日益普及&#xff0c;一款高效、功能丰富的办公软件成为了职场人士的必备工具。ONLYOFFICE团队一直致力于为用户提供全面而先进的办公解决方案。最新推出的ONLYOFFICE 8.1版本桌面编…

【Mysql】数据库事务-手动提交

数据库事务 ** 什么是事务** 事务是一个整体,由一条或者多条SQL 语句组成,这些SQL语句要么都执行成功,要么都执行失败, 只要有一条SQL出现异常,整个操作就会回滚,整个业务执行失败。 比如: 银行的转账业务,张三给李四转账500元 , 至少要操作两次数据库, 张三 -500, 李四 50…

国产的浏览器我就喜爱这一款,它比微软的edge更让人喜爱

小编最近在用Yandex搜索引擎&#xff0c;这个基本上追剧找资料&#xff0c;看漫画什么的都是用到它&#xff08;dddd&#xff09; 有小伙伴就说了&#xff0c;这搜索引擎确实好用&#xff0c;但是不够方便呀&#xff0c;就很多浏览器都不能将它设置为默认引擎进行使用&#xf…

【ONLYOFFICE深度探索】:ONLYOFFICE桌面编辑器8.1震撼发布,打造高效办公新境界

文章目录 一、功能完善的PDF编辑器&#xff1a;解锁文档处理新维度二、幻灯片版式设计&#xff1a;释放创意&#xff0c;打造专业演示三、改进从右至左显示&#xff1a;尊重多元文化&#xff0c;优化阅读体验四、新增本地化选项&#xff1a;连接全球用户&#xff0c;跨越语言障…

详解Spring AOP(一)

目录 1. AOP概述 2.Spring AOP快速入门 2.1引入AOP依赖 2.2编写AOP程序 3.Spring AOP核心概念 3.1切点&#xff08;PointCut&#xff09; 3.2连接点&#xff08;Join Point&#xff09; 3.3通知&#xff08;Advice&#xff09; 3.4切面&#xff08;Aspect&#xff09; …

JDBC的概念 ,核心API的介绍 , 注册驱动介绍

第一章 JDBC 1、JDBC的概念 目标 能够掌握JDBC的概念能够理解JDBC的作用 讲解 客户端操作MySQL数据库的方式 使用第三方客户端来访问MySQL&#xff1a;SQLyog、Navicat 使用MySQL自带的命令行方式 通过Java来访问MySQL数据库&#xff0c;今天要学习的内容 如何通过Java代…