今日学习:scala
惰性函数:在调用的时候才会分配资源,非调用情况下不会执行
package com.chapter01.hanshu object trylazy { def main(args: Array[String]): Unit = { val tre = sum(5, 6) //lazy不能修饰var类型变量 lazy val res = sum(10, 20) println("====================") println("res=" + res) } def sum(n1:Int,n2:Int): Int ={ println("sum函数已被执行 " + "n1=" + n1 + " n2=" + n2) return n1 + n2 } }
需要使用lazy进行声明,不可修饰var类型变量
异常处理
第一种是try catch处理:
package com.chapter01.hanshu object ExceptionDemo { def main(args: Array[String]): Unit = { try { var res = 10 / 0 }catch { case ex: ArithmeticException=>println("捕获了除数为0的算数异常") case ex: Exception=>println("捕获了异常") }finally { println("scala finally") } println("继续执行") } }
第二种是throw处理
package com.chapter01.hanshu object ThrowDemo { def main(args: Array[String]): Unit = { // var res = test() // println(res.toString) //如果希望test()后程序继续执行,还是要引入try catch try { test() } catch { case ex: Exception => println("输出异常信息:" + ex.getMessage) case ex: ArithmeticException => println("算数异常!") } println("继续执行") } def test(): Nothing = { throw new ArithmeticException("捕获No1异常!") } }
这里也可以看出scala中try catch处理异常使用了case进行抛出处理,case的话是按顺序执行的,因此在之后编写代码的过程中,越详细的异常处理要往前放,越笼统的往后放。
第三种是注释处理:
package com.chapter01.hanshu object ThrowsComment { def main(args: Array[String]): Unit = { f11() } @throws(classOf[NumberFormatException])//等同于NumberFormatException.class def f11()={ "abc".toInt } }