Scala基础知识有哪些

发布时间:2021-12-08 14:43:26 作者:iii
来源:亿速云 阅读:116

本篇内容主要讲解“Scala基础知识有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Scala基础知识有哪些”吧!

Scala运行于Java平台(JVM)上,兼容现有的Java程序,Scala代码可以调用Java方法,访问Java字段,继承Java类和实现Java接口。但是Scala也拥有像 Java 类似的特性,它集合了面向对象编程思想与函数式编程思想。

scala具有如下几个特点:

1 基础知识

基本数据类型

Scala的基本数据类型包括:Byte、Char、Short、Int、Long、Float、Double和Boolean,虽然是基本数据类型,但是由于scala中每个值都是对象,所以这些数据类型都是一个类。在Scala中,除了String是使用了java.lang.String,其余的基本类型都是scala中的,比如 Int 的全名是 scala.Int。

基本数据类型描述
Byte8位有符号补码整数。数值区间为 [-27, 27-1]
Short16位有符号补码整数。数值区间为 [-215, 215-1]
Int32位有符号补码整数。数值区间为 [-231, 231-1]
Long64位有符号补码整数。数值区间为 [-263, 263-1]
Float32 位, IEEE 754 标准的单精度浮点数
Double64 位, IEEE 754 标准的双精度浮点数
Char16位无符号Unicode字符, 数值区间为 [0, 216-1]
String字符序列
Booleantrue, false

字面量

字面量分为整数字面量、浮点数字面量、布尔型字面量、字符及字符串字面量和Unit字面量。

val i = 1  //1就是整数字面量val i = 9.9 //9.9就是浮点数字面量val i = true //true就是布尔型字面量val i = 'A' //'A'就是字符字面量val i = "Hello World!" //"Hello World!"就是字符串字面量

Unit字面量只有一个唯一的值,表示为()。

操作符

Scala的操作符与Java的基本一致,但Scala的操作符实际上是方法,也就是说操作符只是方法的另一种形式。

比如:5 + 4 等价于 5.+(4) ,实际上 “+” 是Int类里的一个方法。

对于基本类型的操作,scala还提供了许多常用的方法,这些方法被封装在每个类对应的富包装类中,上文提到的九个基本类型都有其对应的富包装类,比如,Int类型对应的富包装类为RichInt类。

富包装类位于包scala.runtime中,当一个对象调用了富包装类中的方法,scala会自动通过隐式转换将该对象转换为富包装类对象。

变量

scala只有两种类型的变量,用val和var来声明。它们之间的区别在于:

val 声明的变量不可变,val声明时必须初始化变量,且初始化后不再赋新值;

var声明的变量可变,即它可以被多次赋值。

输入/输出 (I/O)

控制结构

  1. if 条件表达式

    if结构与Java的相同。比如:

    val x = 3if (x=0) {     println("1")} else if (x>0) {     println("2")} else {     println("3")}


  2. while 循环

    while循环的格式与Java中也完全相同。

    val x = 10while (x>0) {     println("hello")x-=1}


  3. for 循环

    这是一个很简单的for循环实例:

    for (i <- 1 to 5) println(i)


    它遍历1到5的所有整数值并打印输出,这里的语法跟Java中就不太一样了。那么1 to 5是什么呢?

    现在我们运行scala的REPL模式,输入语句: 1 to 5,得到的是一个Range类型的对象,它是一个序列,它可以表示为(1,2,3,4,5)。

    scala> 1 to 5val res0: scala.collection.immutable.Range.Inclusive = Range 1 to 5


    在执行for循环时,我们经常会用到数值序列,比如,i的值从1循环到5,这时就可以采用Range来实现。Range可以支持创建不同数据类型的数值序列,包括Int、Long、Float、Double、Char、BigInt和BigDecimal等。

  4. 对循环的控制

    scala中没有Java中的break,continue关键字,因为

  5. 异常处理结构

    scala的异常处理不会像Java中那样使用throw将异常抛出,它只使用try-catch结构对异常进行捕获。这是因为scala中将所有异常都当作非检查型,不支持Java中的检查型异常。

    检查型异常(Checked Exception)与非检查型异常(Unchecked Exception)

    检查型异常(编译期异常)就是编译器检查了你的代码之后发现的异常,它强制开发者必须处理这些异常之后才能通过编译。Java中可以通过throw/throws/try-catch来处理这种异常。

    非检查型异常就是编译器不强制检查的那一类异常,Java中所有继承自RuntimeException的异常都属于非检查型异常(运行期异常),这种异常往往可以避免,也可以进行异常处理。如果不进行异常处理,那么如果有异常产生,则异常将由JVM进行处理,这也会导致程序的执行中断。

数据结构

数组 Array

Scala 语言中提供的数组是一种可变的、可索引的、元素具有相同类型的数据集合。数组一般包括定长数组和变长数组。

数组的实例化:

val intArr = new Array[Int](3)      //长度为3的Int型数组val strArr = Array("hello","world","!")

上面第2行的代码也实例化了一个数组对象,实际上这里隐式调用了Array的伴生对象的apply方法(在之后的面向对象编程思想部分会介绍)。

数组元素的赋值:

intArr(0) = 12intArr(1) = 1intArr(2) = 90

和Java不一样的地方在于scala使用圆括号()进行元素的索引,而java使用的是方括号[]

元组 Tuple

scala元组和数组其实很相似,只不过元组中的元素可以是不同类型的,而数组中只能存储相同类型的元素。

scala中提供了TupleN(N的范围为1~22),用于创建一个包含N个元素的元组。

元组的好处在于:如果想要在方法里返回多个不同类型的对象,就可以将它们封装在元组中,省去了重新定义一个类然后封装返回值的步骤,元组是Java中不具有的。

元组的实例化:

val tuple = ("hello","world",123)

元素的访问:

tuple._(1)   //通过 ._(索引) 的方式访问元素,索引从1开始

以上代码访问的元素为"hello"。

容器 Collection

scala定义了容器库(Collection),包含序列(Seq),映射(Map),集合(Set)等数据结构。

scala用了三个包来组织不同类别的容器类,分别是 scala.collection ,scala.collection.mutable,scala.collection.immutable。

这个包中定义了元素可变的容器。

这个包中定义了元素可变和元素不可变的容器的超类或特质 (相当于Java的接口,将在面向对象编程部分介绍)。

容器的宏观层级关系

Scala基础知识有哪些

序列

序列是指元素可以安按照特定的顺序来访问的容器。所有类型的序列都具有collection.Seq 特质,包括了可变对象和不可变对象的抽象。

Seq中常用的实现如下图:

Scala基础知识有哪些

包括List在内的所有容器类型,若没有显式指定元素类型,scala会选择所有初始值的最近公共类型来作为容器元素的类型,比如:

val cList = List("hello",3.14,22)

cList的类型则被指定为Any (所有类的父类)。因为Any是String, Dounle和Int这三个类型的最近公共类型。

Vector

  1. :+:向序列的尾端添加元素

  2. +::向序列的前端添加元素

    +=与+:的区别:+=会修改当前序列,+: 只是将序列修改后的结果赋给新的序列,对原序列不做修改。

    List 和Vector的可变版本分别为 ListBuffer和ArrayBuffer,位于scala.collection.mutable中。

集合

集合中没有重复的元素。集合包括可变集合和不可变集合,分别位于scala.collection.mutable 和scala.collection.immutable中。默认情况下创建的是不可变集

集合中的元素并不按插入顺序排列,而是通过hash 的方法来组织元素。

映射

映射中的元素是一个个的键值对,在一个映射中只存在唯一的键。映射包括可变映射和不可变映射。

迭代器 Iterator

迭代器可以按顺序访问容器元素。迭代器是“一次性”使用的,它不支持随机访问,只能按照从前往后的顺序访问元素,每访问完一个元素就将其从迭代器中删除,直至迭代器中没有元素为止。所以在遍历完所有元素后再次使用该迭代器就会报错。

常用方法 (与Java中相同):

到此,相信大家对“Scala基础知识有哪些”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. 为Play初学者准备的Scala基础知识
  2. Scala基本语法有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

scala

上一篇:天兔监控SQL Azure报错的解决方法是什么

下一篇:HBase快照有什么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》