Scala总结(一)

这篇博客主要介绍了Scala的一些核心概念,包括无参函数的调用、try-catch-finally语句块的特殊用法、元组的创建和遍历、数组与映射的操作、文件与网页内容的读取、函数作为参数传递、递归函数、lazy变量、类型推断、Array与ArrayBuffer的区别、获取Tuple元素的方法、Array操作、zip函数的应用以及Scala类和字段的访问控制等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、无参函数调用时可以直接使用函数名调用,而不必须带后面的括号(通常不带函数名后面的括号)。

2、scala中得try-catch-finally语句块跟java有点区别,catch语句里面用case语句来区分不同类型的异常,catch语句是用{}包裹。

def exFunction(): Unit = {
  val n = 99
  try {
    val half = if (n % 2 == 0) n / 2 else throw new RuntimeException("N must be event")
  } catch {
    case e : Exception => println("The exception is :" + e.getMessage)
  } finally {
    println("execute finally")
  }
}

3、元组(tuple)可以容纳不同类型的对象,当一个函数有多个返回值时可以用元组返回。tuple的遍历。注意tuple构造方法。

val  triple = (50, "Scala", "java")
triple.productIterator.foreach(i => println(i))

4、数组(Array),构造数组对象及遍历数组。

val arr = Array(1, 2, 3, 4)
for (i <- arr) {
  println(i)
}

5、映射(Map)构造方法及遍历。遍历Map时可以使用元组来接收k、v,不需要取值的可以使用占位符来替代。

val infos = Map("xiaoming" -> 23, "xiaobai" -> 26)
for ((k, v) <- infos) {
  println(k + ":" + v)
}
for ((k, _) <- infos) {
  println("key:" + k)
}

6、读文件与读取网页内容

//    val file = Source.fromFile("D:\\hello.txt")
    val file = Source.fromURL("http://www.yiibai.com/scala/scala_collections.html")
    for (line <- file.getLines()) {
      println(line)
    }

7、scala中函数就是一个值,所以可以把函数作为参数传递给另一个函数。通过=>来指定匿名函数的实现,匿名函数在spark中应用很多,如map和flatMap函数等

8、递归函数一定得指定返回值类型。不指定会报错。

def factorial(n : BigInt) : BigInt = {
  if (n <= 1)
    1
  else
    n * factorial(n - 1)
}

9、lazy修饰变量实现延迟加载。lazy修饰的变量,只有在变量第一次被使用时才会被实例化。

lazy val file = Source.fromFile("D:\\hello.txt")

10、scala和java一样也支持可变参数。可变参数需要在函数参数的末尾加*

def sum(args : Int*): Unit = {
  var result = 0
  for (i <- args) result += i
  println("result = " + result)
}

11、scala具有强大的类型推断能力。如果声明和初始化是在一步完成则不需要指定数据类型,可由编译器自行推断出数据类型。如果只是声明而没有初始化,则需要指定数据类型。

val nums = new Array[Int](10)
val a = new Array[String](10)
val s = Array("hello", "world")

12、scala中的Array和ArrayBuffer。Array是定长数组,ArrayBuffer是可变数组。

13、根据下标取Tuple里面的某个元素的三种方法。

val tuple = (3, 4, 5, "java", "scala")
val (first, second, third, fourth, _) = tuple   //模式匹配,可以“_”来占位
val third = tuple._3
val three = tuple _3

14、根据条件对Array中每个元素进行处理的三种操作方式。

val c = Array(2, 3, 5, 7, 11)
for (elem <- c if elem % 2 == 0) yield 2 * elem
c.filter(_ % 2 == 0).map(_ * 3)
c.filter(elem => elem % 2 == 0).map(x => x * 5)

15、zip函数用来关联两个两个数组。

val sysmbols = Array("<", "-", ">")
val nums = Array(1, 3, 5)
val pairs = sysmbols.zip(nums)
for ((x,y) <- pairs) print(x + y)

16、scala源文件中可以有多个public类,java一个源文件中只能有一个public类(内部类除外)。scala中class如果不带权限修饰符则默认是public类型的。

17、scala类中声明一个字段,默认是private的,并且scala编译器会默认生成getter、setter方法。而java中需要手动声明为private并且添加getter、setter方法。

18、var声明的字段会带有getter、setter,而val声明的对象只生成getter方法,没有setter方法。private[this] var gender = 0 这样的语法是scala特有的,对象私有属性,这种属性只有本对象可以访问,该类的其他对象不能访问。通过这种机制实现实例成员的隔离。

19、一个类中使用var声明一个字段,默认提供getter、setter方法。前面加上修饰符private则默认不提供getter、setter方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值