参看博客:https://www.cnblogs.com/spring87/p/4947871.html
https://www.cnblogs.com/spring87/p/4947871.html
package lyzx.com.basic.day01
class T2 {
/**
* name和age是参数列表
* f1是函数名
* 参数列表的括号后的String表示返回值
* @param name
* @param age
* @return
*/
def f1(name:String,age:Int):String ={
if(age >= 18)
name+",你"+age+"岁了,是一个成年人了"
else
name+",你才是一个"+age+"岁的小屁孩"
}
/**
* 返回值可以省略不写
* @param info
* @return
*/
def f2(info:String)={
"你好,"+info
}
/**
* 如果是递归函数则必须手动指定返回值类型
* @param init
* @return
*/
def f3(init:Int): Int ={
if(init <= 1)
1
else
init * f3(init-1)
}
/**
*带有默认值的函数
*/
def f4(first:String="lady",second:String="gaga"):String ={
first+","+second
}
//*代表可变参
def f5(args:Int*):Int ={
println(args.getClass.getName)
var sum = 0
for(item <- args){
sum += item
}
sum
}
/**
* 但是在调用变长参数函数时,并不能直接使用Seq类型的参数。要将一个Seq类型打散成单个的参数序列,使用 : _*
* @param args
* @return
*/
def f6(args:Int*):Int ={
if(args.length == 0 ) 1
else
args.head * f6(args.tail:_*)
}
//没有返回值的函数就是过程,通常调用过程只是为了副作用例如只是为了改变某个集合里面的值
def f7(procedure:String){
println("hello,"+procedure+" i am a procedure")
}
//使用lazy 实现懒加载
def f8(): Unit ={
lazy val f = 123
println(f)
}
//Scala中异常机制与Java和C++中一样。但Scala中并没有受检异常,也就是不需要说明函数方法可能会抛出什么异常。
//使用throw来抛出一个异常。throw表达式的类型是Nothing。
def f9(): Unit ={
try{
// new URL("https://www.baidu.com/fred-tiny.gif")
println("程序开始")
val r = 10 /0
println("程序结束")
}catch {
case _ : MalformedURLException =>{
println("错误的url")
}
case ex: IOException => {
println("io异常")
ex.printStackTrace()
}
case ex1:Exception=>{
println("未知异常:::")
ex1.printStackTrace()
}
}
}
}
object T2{
def main(args: Array[String]): Unit = {
val t = new T2
// println(t.f1("lyh",2))
// println(t.f2("索尔"))
//
// println(t.f3(5))
//
// println(t.f4("lyh"))
//
// //调用时可以不按照函数定义时的参数顺序
// println(t.f4(second = "yaohui",first = "li"))
//
// println(t.f5(1,2,3,4,5))
//
// println(t.f6(1,2,3,4,5))
//
// //1 to 10 => 通过:_* 将集合其转换为序列
// println(t.f6(1 to 10 :_*))
//
// t.f7("过程")
println("=================================================")
t.f8()
t.f9()
}
}