当前位置:网站首页 > Java基础 > 正文

scala java 基础



文章目录

  • 1. Scala
  • 2. Scala 基础概念
  • 2.1 开发和运行环境
  • 2.2 与Java相同之处
  • 2.3 变量
  • 2.3.1 内置类型
  • 2.3.1.1 BigInt和BigDecimal
  • 2.3.1.2 String和Char
  • 2.4 流程控制
  • 2.5 模式匹配
  • 2.6 异常捕获
  • 2.7 循环
  • 2.7.1 for 循环
  • 2.7.2 while 循环
  • 2.8 函数
  • 2.8.1 匿名方法
  • 2.9 集合类型
  • 2.9.1 List
  • 2.9.2 Map
  • 2.9.3 ArrayBuffer
  • 2.9.4 Vector
  • 2.9.5 Set
  • 2.9.6 Tuples
  • 2.9.7 常用的集合函数
  • 2.10 Class(类)
  • 2.10.1 构造函数
  • 2.10.2 this
  • 2.10.3 枚举类(trait)
  • 2.10.4 伴生对象(object)
  • 2.10.5 样例类(case)
  • 2.10.6 样例对象
  • 2.11 Traits
  • 2.11.1 trait
  • 2.11.2 抽象类
  • 2.12 函数式编程
  • 2.12.1 纯函数
  • 2.12.2 传递函数
  • 2.12.3 没有NULL值

1. Scala

Scala 是一种高级语言,其将【面向对象】和【函数式编程】相结合。

scala 代码和 java 代码不一样:编译器做了很多事情

  • java 中变量类型需要明文给出
  • scala 中可以对变量类型进行推断(防止运行期报错

Scala的六大特性:

  • 开发环境:JDK + SDK(编译器)
  • 运行环境:JDK + JRE

注释、命名(驼峰标识)、输出(简化为:println、print)等

只有两种变量类型:

  • val:表示一种不可变变量,类似于 Java 中的 final,在 scala 中推荐使用该变量
  • var:表示一种可变变量,建议在有特定需要的情况下使用

 
 

Scala 中的数据类型都是对象,而不是基本类型,内置的数据类型有(、、、、、、、、,其中

Int

Double

是默认的类型),以下是特殊类型的介绍。

2.3.1.1 BigInt和BigDecimal

blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;">

对于大数字,可以使用 BigInt 和 BigDecimal 类型

/blockquote>

举例:

 
 

2.3.1.2 String和Char

blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;">

使用双引号括住字符串,使用单引号括住字符:

/blockquote>

 
 

字符串合并

(连接符号、字符串插值):

 
 

其它

  • 在字符串前加上字母 ‘f’,就可以在字符串内部使用 printf 样式的格式设置
  • raw 插值不会执行字符串中的转义字符
  • 可以自定义字符串插值…

blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;">

【面向表达式编程】当编写的每个表达式都返回一个值时,这种风格被称为面向表达式的编程或 EOP。相反,不返回值的代码被称为语句,用于产生其他效果。

/blockquote>

Scala

的控制结构类似于

Java

中的 。if 结构总是会返回一个结果,这个结果可以选择忽略,也可以将结果赋给一个变量,写作三元运算符:

 
 

Scala

中有

match

表达式,类似于中的 语句。不过scala更强,支持任何数据类型、表达式可以有返回值以及强大的模式匹配(感觉有点类似于自然语言了)。

 
 

Scala

的异常捕获由 结构完成:

 
 

Scala

中的循环用来迭代集合中的元素,通常这样写:

 
 

 
 

函数的定义方式:

  • def 是用来定义函数的关键字
  • sum 是函数名
  • 输入参数 a 的类型是 Int
  • 输入参数 b 的类型是 Int
  • Int 是函数的返回值类型
  • = 左侧是函数名和函数签名
  • = 右侧是函数体

 
 

  • 匿名函数可以作为代码段编写
  • 匿名函数经常和集合中的 map、filter 等方法一起使用

 
 

blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;">

Map 和 Set 都有可变和不可变两种版本

/blockquote>

scala java 基础

List

是一个线性的、不可变的序列,即一个无法修改的链表,想要添加或删除 List 元素时,都要从现有 List 中创建一个新 List。

 

 

Map

是由键和值组成的可迭代序列。Scala 中的 Map 类似于 Java 的 HashMap。

 

 

ArrayBuffer

是一个可变序列,可以使用它的方法来修改它的内容:

 

 

Vector

是一个索引的、不可变序列,索引意味着可以通过索引值快速访问,其他方面与 List 类似:

 

Set

是一个没有重复元素的可迭代集合。同时拥有可变和不可变的 Set 类,默认是不可变的。

可变Set:

 

 

 

 

 

foreach

:该函数对列表进行遍历操作,同时可以传入函数参数,对每个元素执行该函数

 

filter

:该函数用于对列表元素进行过滤

 

map

:将传入的函数作用于列表中的每个元素,为每个元素返回一个新的、转换后的值

 

head

:返回第一个元素

 

tail

:返回 head 元素之后的每一个元素

 

take

:将元素从集合中提取出来

 

takeWhile

:将符合条件的元素从集合中提取出来

 

drop

:将指定元素之外的元素从集合中提取出来

 

dropWhile

:将条件之外的元素从集合中提取出

 

reduce

:接收一个函数,并将函数作用于集合的后续元素

 

foldLeft

:支持传入一个种子值,然后在其基础上进行计算操作

 

注意:不需要创建"get"和"set"方法来访问类中的字符

 

在 Scala 中,一个类的主构造函数是以下的组合

  • 构造函数参数

  • 类主体中调用的函数

  • 类主体中执行的语句和表达式

  •  

  • 上面代码中两个字段都定义为

    var

    字段,所以是可变的,如果没有手动指定,那么默认是

    val

    字段,且默认是

    private

  • 有类名构造函数中的参数可以设置为

    var

    ,其他函数中的参数都是

    val

    类型。

  •  

    声明的字段

    类似于 Java 静态代码块,在类首次实例化时分配:

     

     

  • 每个辅助构造函数必须具有不同的函数签名(不同的参数列表)

  • 每个构造函数必须调用之前定义的构造函数之一

  •  

     

  • 伴生对象及其类可以访问彼此的私有成员(字段和函数)

  • 当在伴生对象中定义一个 apply 函数后,可以无需使用 new 关键字即可创建类的实例,实际是 apply 方法充当了工厂方法。

  •  

     

  • 默认情况下,

    样例类的构造参数是公共 val 字段

    ,每个参数会生成访问方法;

  • apply 方法是在类的伴生对象中创建的,所以不需要使用 new 关键字创建实例

  • unapply 方法对实例进行解耦

  • 类中会生成一个 copy 方法,在克隆对象或克隆过程中更新字段时非常有用

  •  

  • 可以序列化

  • 有一个默认的 hashcode 实现

  • 有一个 toString 实现

  •  

     

     

     

     

     

     

  • 希望创建一个需要构造函数参数的基类

  • Scala 代码将被 Java 代码调用

  •  

     

    纯函数应该有以下特点:

  • 函数的输出只取决于它的输入变量

  • 函数不会改变任何隐藏状态

  • 函数没有任何“后门”:不从外部世界(控制台、Web服务、数据库、文件等)读取数据,也不向外部世界写出数据

  • Scala 中 "scala.math._package"中的如下方法都是纯函数:

  • abs

  • ceil

  • max

  • min

  • 当然,Scala 中有很多非纯函数,如 foreach:

  • 集合类的 foreach 函数是不纯粹的,它具有其副作用,如打印到 STDOUT

  • 它的方法签名声明了返回 Unit 类型,类似的,任何返回 Unit 的函数都是一个不纯函数

  • 非纯函数通常有以下特点:

  • 读取隐藏的输入,即访问没有显示传递到函数中作为输入参数的变量和数据

  • 写出隐藏输出

  • 修改给定的参数

  • 对外部世界执行某种I/O

  •  

    Option/Some/Nothing

    这样的结构进行处理。

  • Some 和 Nothing 是 Option 的子类

  • 通常声明一个函数返回一个 Option 类型

  • 接收到可以处理的参数则返回 Some

  • 接收到无法处理的参数则返回 Nothing

  •  

  • 上一篇: 基础必学java
  • 下一篇: java核心基础75讲
  • 版权声明


    相关文章:

  • 基础必学java2025-04-26 21:50:04
  • java集合基础入门2025-04-26 21:50:04
  • java 数据库基础2025-04-26 21:50:04
  • java基础文档下载2025-04-26 21:50:04
  • 只会java基础知识2025-04-26 21:50:04
  • java核心基础75讲2025-04-26 21:50:04
  • java从零基础到精通2025-04-26 21:50:04
  • java基础加强方法2025-04-26 21:50:04
  • java基础和项目经历2025-04-26 21:50:04
  • java 基础 实例 代码2025-04-26 21:50:04