1.Scala与Java的关系java
Scala与Java的关系很是紧密,由于Scala是基于Java虚拟机,也就是JVM的一门编程语言。全部Scala的代码,都须要通过编译为字节码,而后交由Java虚拟机来运行,因此Scala和Java是能够无缝互操做的。Scala能够任意调用Java的代码。编程
2.变量声明数组
声明val常量:能够声明val变量来存放表达式的计算结果。网络
例如,val result = 1 + 1,后续这些常量是能够继续使用的,例如,2 * result。app
可是常量声明后,是没法改变它的值的,例如,result = 1,会返回error: reassignment to val的错误信息。编程语言
声明var变量:若是要声明值能够改变的引用,可使用var变量。
例如,val myresult = 1,myresult = 2
可是在scala程序中,一般建议使用val,也就是常量,所以好比相似于spark的大型复杂系统中,须要大量的网络传输数据,若是使用var,可能会担忧值被错误的更改。
在Java的大型复杂系统的设计和开发中,也使用了相似的特性,咱们一般会将传递给其余模块 / 组件 / 服务的对象,设计成不可变类(Immutable Class)。在里面也会使用java的常量定义,好比final,阻止变量的值被改变。
指定类型:不管声明val变量,仍是声明var变量,均可以手动指定其类型,若是不指定的话,scala会自动根据值,进行类型的推断。
例如,val name: String = null
例如,val name: Any = "zhang3f"
声明多个变量:能够将多个变量放在一块儿进行声明。
例如,val name1, name2:String = null
例如,val num1, num2 = 100函数
3.数据类型与操做符spa
基本数据类型:Byte、Char、Short、Int、Long、Float、Double、Boolean。
乍一看与Java的基本数据类型的包装类型相同,可是scala没有基本数据类型与包装类型的概念,统一都是类。scala本身会负责基本数据类型和引用类型的转换操做。
使用以上类型,直接就能够调用大量的函数,例如,1.toString(),1.to(10)。
类型的增强版类型:scala使用不少增强类给数据类型增长了上百种加强的功能或函数。
例如,String类经过StringOps类加强了大量的函数,"Hello".intersect(" World")。
例如,Scala还提供了RichInt、RichDouble、RichChar等类型,RichInt就提供了to函数,1.to(10),此处Int先隐式转换为RichInt,而后再调用其to函数
基本操做符:scala的算术操做符与java的算术操做符也没有什么区别,好比+、-、*、/、%等,以及&、|、^、>>、<<等。
可是,在scala中,这些操做符实际上是数据类型的函数,好比1 + 1,能够写作1.+(1)
例如,1.to(10),又能够写作1 to 10
scala中没有提供++、--操做符,咱们只能使用+和-,好比counter = 1,counter++是错误的,必须写作counter += 1.scala
4.函数调用与apply函数设计
函数调用方式:在scala中,函数调用也很简单。
例如,import scala.math._,sqrt(2),pow(2, 4),min(3, Pi)。
不一样的一点是,若是调用函数时,不须要传递参数,则scala容许调用函数时省略括号的,例如,"Hello World".distinct
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类的实例,也就是一个数组。