Scala学习(除列表集合等)

Idea配置安装

 

进入idea后,选取file中的setting选项,在plugins中安装scala,之后重启idea。

 

右键点击项目,选取Add Framework Support,并选取对应的scala版本

 

 新建文件夹,并将文件夹改为source Root

 

之后,即可创建scala.class了

 

变量

变量声明时,类型可以省略,编译器可自动进行类型推导

 

字符串变量替换

Scala中基础的字符串插值就是在字符串前加字幕‘s’,然后在字符串中放入变量,每个变量都应以‘$’开头。

 

字符串多行输出

三引号表示字符串,保持多行字符串的原格式输出

 

文件读写

 

数据类型

Scala中数据分为两大类:数值类型和引用类型,他俩都是对象,都是Any的子类

 

StringOps是对Java中的String的增强

 

Unit:对应java中的void,用于方法返回值的位置,表示方法没有返回值。Unit是一个数据类型,只有一个对象就是();而void不是数据类型,它只是一个关键字

 

数值类型转换

1:自动提升原则:有多种类型的数据进行混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算

2:把精度大的数值类型赋值给精度小的数值类型时,就会报错,因此需要进行强转(精度可能会降低或溢出);反之就会进行自动类型转换

3:(byte、short)和 char 之间不会相互自动转换

4:byte,short,char三者可以计算,在计算时首先转换为int类型

 

流程控制

if拓展——三目运算符拓展

 

for循环——普通

 

for循环——range

 

循环守卫——代替java中的continue

 

 循环步长

 

循环中断

 

函数式编程

解决问题时,将问题分解成一个一个的步骤,将每个步骤进行封装(函数),通过调用这些封装好的步骤,解决问题

 

函数基础语法

 

scala自动将函数的最后一行的值作为返回值,省略return;{}中只有一行语句可省略{}

 

可变参数个数的函数定义

 

高阶函数

    /**
     * 高阶函数
     * 函数的参数是函数
     * 函数的返回值是函数
     */
    def fun1(a:Int, f:(Int,Int) => Int)= {
      var result = f(4, 4)
      print("----------")
      a * result
    }
    def sum(a:Int, b:Int): Int = {
      a + b
    }
    println(fun1(5, sum))   //--------40

    def fun3(a:Int, b:Int): (String, String)=>String = {
      def fun4(c: String, d: String) = {
        a + b + c + d
      }
      fun4
    }

    val function = fun3(1, 2)
    println(function("3", "4")) // 334

 

以下等同于fun4(_, _)(1,2)

 

对象

scala中没有public,一个.scala中可以写多个类

@BeanProperty——可自动生成Java中的get/set方法

 

访问权限

 

继承、多态——override

当一个类extends另外一个类的时候,override的规则基本如下:

  1:子类中的方法要覆盖父类中的方法,必须写override

  2:子类中的属性val要覆盖父类中的属性,必须写override

  3:父类中的变量不可以覆盖

 

抽象类不需要用override

 

特质

 

1:当一个类继承其它类,且具有某个特质时,若继承的类与特质中的变量有重复,则需要在该类中用override重写该变量

 

Trait函数多重叠加,会从后往前执行方法

object Test15_TraitOverlying {
  def main(args: Array[String]): Unit = {
    val student = new Student15
    student.increase()    // 输出knowledge increased
  }
}

trait KnowLedge15 {
  var amount: Int = 15
  def increase(): Unit = {
    println("knowledge increased")
  }
}

trait Telent15 {
  def singing(): Unit
  def dancing(): Unit
  def increase(): Unit = {
    println("talent increased")
  }
}

class Student15 extends Person13 with Telent15 with KnowLedge15 {
  override def dancing(): Unit = println("dancing")

  override def increase(): Unit = super.increase()

  override def singing(): Unit = println("singing")
}        

 

泛型

 

协变和逆变

class MyList[+T] // 协变

class MyList[-T] // 逆变

 

协变:Son是Father的子类,则MyList[Son]也作为MyList[Father]的“子类”

逆变:Son是Father的子类,则MyList[Son]作为MyList[Father]的“父类”

 

上下限

泛型上下限的作用是对传入的泛型进行限定

Class PersonList[T<:Person] // 泛型上限

Class PersonList[T>:Person] // 泛型下限

 

Class PersonList[T>:Person] // 泛型下限

posted @ 2022-11-27 22:18  天叔  阅读(25)  评论(0编辑  收藏  举报