scala异常处理、提取器(Extractor)、文件IO

本文深入讲解Scala异常处理机制,包括抛出与捕获异常的方法,以及如何使用finally语句确保代码执行。同时,介绍了Scala提取器(Extractor)的使用,展示如何通过apply和unapply方法构造和解析对象。此外,还提供了Scala文件I/O操作的基本示例。

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

一、Scala 异常处理

Scala 的异常处理类似与其他语言

  • Scala 的方法可以通过抛出异常的方法的方式来终止相关代码的运行,不必通过返回值。

抛出异常

  • scala使用throw方法抛出异常,eg:抛出一个新的参数异常--->throw new IllegalArgumentException

捕获异常

  • 异常捕捉机制:若有异常发生,catch字句是按次序捕捉的。因此,在catch字句中,越具体的异常越要靠前,越普遍的异常越要靠后。如果抛出的异常不在catch字句中,该异常则无法处理,会被升级到调用者处。

捕获异常的catch字句,语法跟其他语言不太一样。

  • 在scala中,借用了模式匹配的思想来做异常的匹配,因此在catch的代码里,是一系列case字句。

       

  • catch字句里的内容跟match里的case是完全一样的。
  • 由于异常捕捉是按次序的,若最普遍的异常Throwable写在最前面,则在它后面的case都捕捉不到,因此需要将它写在最后面。

finally语句

  • finally 语句:不管是正常处理还是有异常发生时都将执行

       

二、提取器(Extractor)

提取器是从传递给它的对象中提取出构造该对象的参数。

Scala 标准库包含了一些预定义的提取器

  • Scala 提取器是一个带有unapply方法的对象。unapply方法算是apply方法的反向操作:unapply接受一个对象,然后从对象中提取值,提取的值通常是用来构造该对象的值。
object Test {
  /*
  通过apply方法,无需使用new操作即可创建对象。
  所以可以通过语句Test("Zara", "gmail.com") 来构造一个字符串 "Zara@gmail.com"
   */
  //注入方法(可选)
  def apply(user:String,domain:String) = {
    user+"@"+domain
  }
  /*
  使用 Unapply 方法从对象中提取用户名和邮件地址的后缀。
  unapply 方法在传入的字符串不是邮箱地址时返回 None。
   */
  //提取方法
  def unapply(str: String): Option[(String,String)] = {
    val parts = str split "@"
    if (parts.length == 2){
      Some(parts(0),parts(1))
    }else{
      None
    }
  }
  def main(args: Array[String]){
    println("Apply方法:"+apply("Zara","gmail.com"))
    println("Unapply方法:"+unapply("Zara@gmail.com"))
    println("Unapply方法:"+unapply("Zara Ali"))
  }
}

运行结果:

Apply方法:Zara@gmail.com
Unapply方法:Some((Zara,gmail.com))
Unapply方法:None

提取器使用模式匹配

实例化一个类时,可以带上0个或者多个参数,编译器在实例化时会调用 apply 方法。

可以在类和对象中都定义 apply 方法。

unapply 用于提取我们指定查找的值,它与 apply 的操作相反。

当我们在提取器对象中使用 match 语句是,unapply 将自动执行

   

三、Scala 文件 I/O

Scala 进行文件写操作,直接用的都是 java中 的 I/O 类 (java.io.File):

import java.io._

object Test {
  def main(args: Array[String]){
    val writer = new PrintWriter(new File("test.txt"))
    writer.write("离殇")
    writer.close()
  }
}

执行上述代码,会在当前目录下产生一个 test.txt 文件,文件内容为"离殇"

从屏幕上读取用户输入

接收用户在屏幕输入的指令来处理程序。

     

Scala2.11 后的版本 Console.readLine 已废弃,使用 scala.io.StdIn.readLine() 方法代替。

从文件上读取内容

可以使用 Scala 的 Source 类及伴生对象来读取文件。

eg:从 "test.txt"(之前已创建过) 文件中读取内容


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值