Scala 知识点总结

1.什么是scala语言?
函数式编程语言
Scala 官网:https://www.scala-lang.org/

Scala 是一种多范式的编程语言,其设计的初衷是要集成面向 对象编程和函数式编程的各种特性。Scala 运行于 Java 平台 (Java 虚拟机),并兼容现有的 Java 程序。

Scala(Scalable Language 的简称)语言是一种能够运行于 JVM 和.Net 平台之上的通用编程语言,既可用于大规模应用程序开 发,也可用于脚本编程,它由由 Martin Odersky 于 2001 开发, 2004 年开始程序运行在 JVM 与.Net 平台之上,由于其简洁、 优雅、类型安全的编程模式而受到关注。

2.Scala 特性?
Scala是一种纯面向对象的语言,每一个值都是对象。对象的数据类型以及行为由类和特征(Trait)描述。类抽象机制的扩展有两种途径。一种途径是子类继承,另一种途径是灵活的混入(Mixin)机制。这两种途径能避免多重继承的种种问题。
面向对象特性
函数式编程
静态类型
扩展性
使用Scala的框架
3.函数式编程特点?
泛型类 T
协变和逆变 : 向上转型 向下转型
标注
类型参数的上下限约束 : 上边界和下边界
把类别和抽象类型作为对象成员
复合类型
引用自己时显式指定类型
视图:视图界定 int --> richInt – > comparable Ordered
多态方法

4.scala 数据类型?
Byte 8位有符号补码整数。数值区间为 -128 到 127
Short 16位有符号补码整数。数值区间为 -32768 到 32767
Int 32位有符号补码整数。数值区间为 -2147483648 到 2147483647
Long 64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807
Float 32 位, IEEE 754 标准的单精度浮点数
Double 64 位 IEEE 754 标准的双精度浮点数
Char 16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF
String 字符序列
Boolean true或false
Unit 表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
Null null 或空引用
Nothing Nothing类型在Scala的类层级的最底端;它是任何其他类型的子类型。
Any Any是所有其他类的超类
AnyRef AnyRef类是Scala里所有引用类(reference class)的基类

5.scala 变量声明,使用?区别?

val : val 标识了该变量是一个不可变量,相当于 java 中加了 const 限定词的作用。

var : var 表示该变量是一个可变变量,可以对变量的值进行修改

6.块语句有什么特点?
{} 把最后一个值或者表达式 当做返回值

7.scala break怎么使用?
先导包,在创建对象
Scala 语言中默认是没有 break 语句,但是你在 Scala 2.8 版本后可以使用另外一种方式来实现 break 语句。当在循环中使用 break 语句,在执行到该语句时,就会中断循环并执行循环体之后的代码块。

( java 中 break return ?)

扫描二维码关注公众号,回复: 11544820 查看本文章

8.方法和函数有什么区别?
1.方法不能作为单独的表达式而存在(参数为空的方法除外),而函数可以。
2.函数必须要有参数列表,而方法可以没有参数列表
3.方法名是方法调用,而函数名只是代表函数对象本身
(函数是头等公民)

9.lazy 特点?
懒加载,延迟操作, 只有被调用的时候才会被执行
Scala中使用关键字lazy来定义惰性变量,实现延迟加载(懒加载)。
惰性变量只能是不可变变量,并且只有在调用惰性变量时,才会去实例化这个变量。
10.数组可变不可变? 数组的长度
在scala中数组分为不可变长数组(在immutable包下)和可变长数组(在mutable包下)
不可变长数组指的是长度不可变,但是数组中角标对应的元素的值是可变的
可变数组指的是长度和数组中角标对应的元素都是可变的。
Array
ArrayBuffer

11.list 可变不可变? 里面的元素 scala.collections.multiple.ListBuffer

list
listBuffer

list 添加元素: ++ :+ +: :: .+: .+: :::
左边添加:
右边添加:

scala 的集合有哪些? list set map seq

12.map 可变不可变? K V 值能不能被改变
创建的方式: 映射 -> 元组(,)

13.zip 操作? 拉链操作
14.tuple 元组? tuple 特殊元组:对偶元组 ,只有两个元素的元组
15.hashSet hashMap


16.Option 有两个子类? map

get(key) getOrElse(key,默认值)

Some(vaule) get
None

17.scala 访问修饰符? 作用域?

public
private
protect
private[this]
protect[this]

18.scala 如何访问内部类? 1. 外部类暴露内部类对象 2.new 外部类对象.内部类

19.伴生类和伴生对象? 3个要点

20.App特质? scala的一个特质 可以代替main方法 作为程序的入口

21.scala 构造器? 主构造器,辅助构造器 辅助构造器第一句必须要调用主构造器

22.scala object类型?
scala 没有静态类型 static
object 里面的属性和方法都是静态的
object 修饰的 都是单例的

23.apply应用?
apply 可以自己使用,不需要new
在伴生对象里面 定义apply方法

Array(1,2,3,4) new Array[Int]

24.子类继承父类? extents with

25.类型检查和类型转换?

isInstanceof
精确检查
getClass == classOf

asInstanceof

26.scala 的特质? trait 类似于java interface

27.Nil tail head? list 集合 List(1,2,3,4)
Nil: 表示一个空的集合 ()
tail:表示一个除去第一个元素的集合 (2,3,4)
head:表示集合的第一个元素 1

28.样例类? case class

29.偏函数 柯里化 闭包 泛型
偏函数 partialFunciton[A,B]

{
case xxx => xxx
}

fun(a,b) => func(a)(b)

引入函数外部变量

T

30.上边界 下边界 视图界定
上边界:传入的参数只能本身或者是子类 <:

视图界定 : <% 将不是他的子类通过视图界定间接的转换成它的子类

31.隐式转换? 值 参数 方法
implicit 使用之前必须要导包

会在可见的区域 自动导入隐士值

32.异常

try{
}
catch{
//偏函数
case e:Exception => {}
}
finally{
}

33.协变和逆变
34.call by name / call by value

call by name: 传递的是函数本身,函数没有进行计算
call by value:传递的是函数的返回值

35.Actor 接收消息的方式?

scala 并发

自带actor
整合到Akka

receive
react:性能要比receive高,会复用线程

36.actor 发送消息?

! 发送异步消息 没有返回值
!! 发送异步消息,有返回值 Future
!? 发送同步消息,等待返回值 返回是Any 如果没有返回值,线程处于阻塞状态

猜你喜欢

转载自blog.csdn.net/Aying_seeyou/article/details/104364009
今日推荐