一、初识Scala

1、语言介绍

  • 是多范式的编程语言,集成了面向对象和面向函数编程的各种特性
  • 运行在Java虚拟机上,并且兼容现在的Java代码
  • 源码被编译成Java字节码文件,可以调用Java的类库

    2、语言特点

  • 面向对象:一种纯面向对象的语言,每个值都是对象

  • 函数式编程:函数式语言,函数也可以当成值来使用,提供匿名函数和高阶函数。允许嵌套多层函数,支持柯里化。
  • 静态类型:通过编辑检查
  • 扩展性:可以以库的形式添加语言结构
  • 并发性:并没有在底层对并发性升级,使用actor作为并发模型

    二、Scala基础语法

    1、数据类型

    皆为对象属性,没有原生数据类型

  • Unit:为空或者无值,与void相似

  • Null:即为空
  • Nothing:是所有类型的子类型。
  • Any:是所有类型的父类(类似object)
  • AnyRef:是所有引用类型的父类
  • AnyVal:是所有值类型的父类,包括九个值类型。

Byte、short、int、long、double、float、char、String、boolean
图片.png

2、变量

常量:用 val 来声明常量。
例如 val name:string = “张三”
变量:用 var 来声明。
例如 var varstring:string = “name”

3、访问修饰符

scala的访问修饰符包括 private protected public,对象的访问默认级别都是public
private:仅在对象或类的内部可用

  1. class TestPrivate {
  2. class Persion{
  3. private def testPrivate(){
  4. println("private method");
  5. }
  6. def testpublic(): Unit ={
  7. println("public method")
  8. }
  9. class boy{
  10. testPrivate()
  11. testpublic()
  12. }
  13. }
  14. (new Persion()).testpublic();
  15. }

4、控制语句

  1. //if...else
  2. if (age<12){
  3. println("我没到12")
  4. }else{
  5. println("我大于12")
  6. }
  7. //while循环
  8. while (age<15){
  9. println(age)
  10. age+=1
  11. }
  12. //for循环
  13. for (a<- 0 to 10 by 2){
  14. println(a)
  15. }
  16. //集合循环
  17. var list = List("1","2","3","4")
  18. for (temp<-list){
  19. println(temp)
  20. }
  21. //循环中带过滤
  22. var list = List("1","2","3","4","5")
  23. for (temp<-list if(temp!="2")){
  24. println(temp)
  25. }
  26. //for 循环加入 yield 返回结果集合
  27. var reslist = for (temp<-list if(temp<"3")) yield temp
  28. for (temp1 <- reslist){
  29. println(temp1)
  30. }

5、方法与函数

1、两者的区别和联系

  • 在Scala中,绝大多数情况下是相同的
  • 方法是类的一部分,函数是一个对象,可以赋值给一个变量,在类中定义的函数即是方法
  • Scala中 val定义函数,def定义方法

    2、方法定义

    def functionName (参数列表):返回值类型{
    方法体
    }

    3、闭包

    概念:闭包是个函数。函数计算的过程依赖于声明在函数外部的一个或多个变量

    实例:

    ```scala def main(args: Array[String]): Unit = {
    1. println(fun02(2));
    } //闭包 var i = 1000; def fun02(a:Int):Int={ return a+i }
  1. <a name="PY9qV"></a>
  2. ## 6、字符串
  3. 在Scala中字符串的类型其实是Java string,它本身没有string类<br />不可变字符串创建:
  4. ```scala
  5. //不可变字符串创建实例
  6. var name = "苗宏凯";
  7. //可变字符串创建实例
  8. var str1 = new StringBuilder;
  9. str1.append("123")
  10. str1.append("444")
  11. str1.append("555")
  12. println(str1)
  13. 输出结果为123444555

字符串连接使用concat 或者 +

7、数组

1、概念:用来储存固定大小的同类元素,数据是通过索引访问的

2、数组的定义:

  1. //静态数组
  2. var arr1 = Array("111","222","123","7767","ddd")
  3. //动态数组
  4. var arr2 = new Array[String](3)
  5. arr2(0) = "888"
  6. arr2(1) = "222"
  7. arr2(2) = "900"
  8. for (temp4<- arr2){
  9. println(temp4)
  10. }

3、多维数组

多维数组即是数组的数组

  1. //多维数组
  2. var arr3 = Array.ofDim[Int](4,4)
  3. for (i <- 0 to 3) {
  4. for ( j <- 0 to 3) {
  5. arr3(i)(j) = j;
  6. }
  7. }
  8. //遍历多维数组
  9. for (i <- 0 to 3){
  10. for ( j <- 0 to 3) {
  11. println(arr3(i)(j))
  12. }
  13. }

数组合并用concat
生成区间数组.

  1. //生成区间数组
  2. var arr4 = Array.range(10,20,2)
  3. for (temp5<-arr4){
  4. println(temp5)
  5. }