Scala与Java的关系
- scala与java的关系是非常紧密的!!!
- 因为scala是基于java虚拟机,也就是JVM的一门编程语言。所有scala的代码,都需要经过编译为字节码,然后交由java虚拟机来运行。
- 所有java和scala是可以无缝互操作的。scala可以任意调用java的代码,所以scala与java的关系是非常非常紧密的。
Scala解释器的使用
- REPL:Read(取值)-> Evaluation(求值)-> Print(打印)-> Loop(循环)。scala解释器也被称为 REPL,会快速编译成字节码,然后交由JVM来执行。
- 计算表达式:在scala> 命令行内,键入scala代码,解释器会直接显示结果给你。如果你没有指定变量来存放这个值,那么默认的名称为res,而且会显示结果的数据类型,比如Int,Double,String等等。
例如: - 内置变量:在后面可以继续使用这个变量,以及存放它的值。
例如:
- 自动补全:在scala命令行内,可以使用tab键进行补全。
例如:输入res2.to,敲击tab键,解释器会显示出以下选项,toCharArray,toLowerCase,toString,toUpperCase
声明变量
- 声明val变量:可以声明val变量来存放表达式的结果,但是常量声明后,是无法改变它的值的,改变可以使用var变量。
2. 声明var变量:如果想要声明值可以改变的引用,改变可以使用var变量。
例如:
3. 指定类型:无论声明val变量,无论声明var变量,都可以手动指定类型,如果不指定的话,scala会自动根据值,进行类型的推断。
4. 声明多个变量:可以将多个变量放在一起进行声明
数据类型与操作符
- 基本数据类型:Byte Char Short Int Long Float Double Boolean 乍一看与java的包装类型相同,但是scala没有包装数据类型与基本数据类型的概念,统一都是类。
- 类型的加强板类型:
(1)String 类通过StringOps类增强了大量的函数,“Hello”.intersect(“World”)。
(2)scala还提供了RichInt、RiDouble、RiChar等类型 - 基本操作符:没有++ 、–
例如:1+1,可以写成1.+(1) 、 1.to(10)可以写成1 to 10
函数调用与apply()函数
- 函数调用方式:在scala中,函数调用也很简单。
例如,import scala.math._,sqrt(2),pow(2, 4),min(3, Pi)。
不同的一点是,如果调用函数时,不需要传递参数,则scala允许调用函数时省略括号的,例如,“Hello World”.distinct
2.apply函数
Scala中的apply函数是非常特殊的一种函数,在Scala的object中,可以声明apply函数。而使用“类名()”的形式,其实就是“类名.apply()”的一种缩写。通常使用这种方式来构造类的对象,而不是使用“new 类名()”的方式。
例如,“Hello World”(6),因为在StringOps类中有def apply(n: Int): Char的函数定义,所以"Hello World"(6),实际上是"Hello World".apply(6)的缩写。
例如,Array(1, 2, 3, 4),实际上是用Array object的apply()函数来创建Array类的实例,也就是一个数组。