一、初识Scala
1、语言介绍
- 是多范式的编程语言,集成了面向对象和面向函数编程的各种特性
- 运行在Java虚拟机上,并且兼容现在的Java代码
-
2、语言特点
面向对象:一种纯面向对象的语言,每个值都是对象
- 函数式编程:函数式语言,函数也可以当成值来使用,提供匿名函数和高阶函数。允许嵌套多层函数,支持柯里化。
- 静态类型:通过编辑检查
- 扩展性:可以以库的形式添加语言结构
并发性:并没有在底层对并发性升级,使用actor作为并发模型
二、Scala基础语法
1、数据类型
皆为对象属性,没有原生数据类型
Unit:为空或者无值,与void相似
- Null:即为空
- Nothing:是所有类型的子类型。
- Any:是所有类型的父类(类似object)
- AnyRef:是所有引用类型的父类
- AnyVal:是所有值类型的父类,包括九个值类型。
Byte、short、int、long、double、float、char、String、boolean
2、变量
常量:用 val 来声明常量。
例如 val name:string = “张三”
变量:用 var 来声明。
例如 var varstring:string = “name”
3、访问修饰符
scala的访问修饰符包括 private protected public,对象的访问默认级别都是public
private:仅在对象或类的内部可用
class TestPrivate {class Persion{private def testPrivate(){println("private method");}def testpublic(): Unit ={println("public method")}class boy{testPrivate()testpublic()}}(new Persion()).testpublic();}
4、控制语句
//if...elseif (age<12){println("我没到12")}else{println("我大于12")}//while循环while (age<15){println(age)age+=1}//for循环for (a<- 0 to 10 by 2){println(a)}//集合循环var list = List("1","2","3","4")for (temp<-list){println(temp)}//循环中带过滤var list = List("1","2","3","4","5")for (temp<-list if(temp!="2")){println(temp)}//for 循环加入 yield 返回结果集合var reslist = for (temp<-list if(temp<"3")) yield tempfor (temp1 <- reslist){println(temp1)}
5、方法与函数
1、两者的区别和联系
- 在Scala中,绝大多数情况下是相同的
- 方法是类的一部分,函数是一个对象,可以赋值给一个变量,在类中定义的函数即是方法
- Scala中 val定义函数,def定义方法
2、方法定义
def functionName (参数列表):返回值类型{
方法体
}3、闭包
概念:闭包是个函数。函数计算的过程依赖于声明在函数外部的一个或多个变量
实例:
```scala def main(args: Array[String]): Unit = {
} //闭包 var i = 1000; def fun02(a:Int):Int={ return a+i }println(fun02(2));
<a name="PY9qV"></a>## 6、字符串在Scala中字符串的类型其实是Java string,它本身没有string类<br />不可变字符串创建:```scala//不可变字符串创建实例var name = "苗宏凯";//可变字符串创建实例var str1 = new StringBuilder;str1.append("123")str1.append("444")str1.append("555")println(str1)输出结果为123444555
7、数组
1、概念:用来储存固定大小的同类元素,数据是通过索引访问的
2、数组的定义:
//静态数组var arr1 = Array("111","222","123","7767","ddd")//动态数组var arr2 = new Array[String](3)arr2(0) = "888"arr2(1) = "222"arr2(2) = "900"for (temp4<- arr2){println(temp4)}
3、多维数组
多维数组即是数组的数组
//多维数组var arr3 = Array.ofDim[Int](4,4)for (i <- 0 to 3) {for ( j <- 0 to 3) {arr3(i)(j) = j;}}//遍历多维数组for (i <- 0 to 3){for ( j <- 0 to 3) {println(arr3(i)(j))}}
数组合并用concat
生成区间数组.
//生成区间数组var arr4 = Array.range(10,20,2)for (temp5<-arr4){println(temp5)}
