Scala 流程空间,函数,异常处理
- 1,)首先留意一下下边的代码块,他是怎么运行的,貌似在c#中他是出错的,不应该出现这样的写法的,但在scala中侧不然:
package com.dt.study /**
* The package path is com.dt.study.
* Created by tommy duan on 2015/11/16.
*/
object HelloScala {
var line = ""
do {
line = readLine()
if (!line.isEmpty) println("Read line is:"+line)
} while (line != "") def main(args: Array[String]): Unit = {
println("Hello Scala!!!")
}
}
运行起来后,会等待输入文字,知道输入空位置,直接走入main函数。
- 2,)object 在scala中是一个对象,对象声明同类一样,是不需要public修饰的,默认就是public
- 3,)scala object对象内部的函数都是静态的:访问方式为 HelloScala.
HelloScalaClass
package com.dt.study /**
* The package path is com.dt.study.
* Created by tommy duan on 2015/11/16.
*/
class HelloScalaClass {
def sayHello(line:String)={
println(line)
}
}
HelloScalaObject
package com.dt.study /**
* The package path is com.dt.study.
* Created by tommy duan on 2015/11/16.
*/
object HelloScalaObject {
var line=""
def sayHello(line:String):Unit={
println(line)
}
}
class 与 object调用
package com.dt.study /**
* The package path is com.dt.study.
* Created by tommy duan on 2015/11/16.
*/
object HelloScala {
def main(args: Array[String]): Unit = {
println("Hello Scala!!!") HelloScalaObject.sayHello("Hello scala object")
var scalaCls=new HelloScalaClass();
scalaCls.sayHello("Hello scala class")
}
}
同样object对象内部的属性对象也是静态的,且内部字段默认scala会给其实现get.set函数(但不考虑var类型,private类型)
- 4,)val 与var类型
package com.dt.study /**
* The package path is com.dt.study.
* Created by tommy duan on 2015/11/16.
*/
object HelloScala {
def main(args: Array[String]): Unit = {
println("Hello Scala!!!") var line=""
line="hello"
println(line) val lineVal="hello"
println(lineVal)
lineVal="test"
}
}
在idea编译器中17 lineVal="test" 会报错误,编译不通过。
原因,val是不可以变类型,一旦设置了值后,就不可以更改变量值;而var是可变变量,可以改变值。val像是java中被final修改的变量。
- scala类和对象中字段的隐藏get set函数实现
package com.dt.study /**
* The package path is com.dt.study.
* Created by tommy duan on 2015/11/16.
*/
object HelloScala {
def main(args: Array[String]): Unit = {
println("Hello Scala!!!") println(HelloScalaObject.line)
HelloScalaObject.line="sss" }
}
请留意:
11 println(HelloScalaObject.line)
12 HelloScalaObject.line="sss"
这两行代码,第11行代码隐含了几层含义:
1,)line是一个public变量;
2,)调用了HelloScalaObject对象的隐藏line var的get函数;
第12行除了上边1,)外还有一层含义:调用了HelloScalaObject对象的隐藏line var的set函数;
函数返回值问题
package com.dtgroup.study
object HelloStduy {
def main(args: Array[String]): Unit = {
println("Hello Scala")
var files = (new java.io.File(".")).listFiles()
for (file <- files) println(file)
val filePath = "spark.txt"
try {
if (!filePath.isEmpty())
throw new RuntimeException("An error thrown.")
} catch {
case e: Exception => println(e.getMessage())
} finally {
}
println(returnWithSomething)
}
def returnWithSomething():String={
var result=""
var items=new Array[String]()
for(i<- to ) items(i)=i.toString
result=items.mkString(",")
result
}
}
输出内容:
Hello Scala
.\.cache-main
.\.classpath
.\.project
.\.settings
.\bin
.\src
An error thrown.
0,1,2,3,4,5,6,7,8,9
我们先不看上边的结果为什么,单想象returnWithSomeThing这是个什么?
1,)它在scala中是一个函数,函数一般都是使用def来声明;
2,)在这里它是一个静态函数;
3,)它的返回值类型为String;
4,)该函数的最后一行默认就是返回值,这是规定,也是规范;
5,)def main(args: Array[String]): Unit ,它的返回值类型为Unit,在scala中Unit为空,表示不返回任何类型,同时这里的main函数也是可以不写返回Unit的,格式为:
def main(args: Array[String])={
println("hello main")
}
6,)函数的调用,如果不需要参数可以省略掉();
7,)try{}catch{}finally{} catch中的处理可以使用case来区分不同的错误信息,针对不同的错误类型做出不同的日志记录等处理;
8,)def main(args: Array[String]): Unit中,参数是一个字符数组,参数个的格式就是这样传递的;
9,)参数传递支持多个参数,同时也支持多个参数返回。
传递多参数,返回多参数示例:
package com.dtgroup.study
object HelloStduy {
def main(args: Array[String]): Unit = {
println("Hello Scala")
var result0 = returnWithSomething("", )
println(result0._1)
// for (item <- result0._2) println(item)
println(result0._2.mkString(","))
var result1 = returnWithSomething("mmmmm", )
println(result1._1)
// for(item <- result1._2) println(item)
println(result1._2.mkString(","))
}
def returnWithSomething(arg0: String, arg1: Int*): (Int, Array[String]) = {
var result0 =
var result1 = new Array[String]()
for (i <- to ) result1(i) = (i + ).toString()
try {
result0 = arg0.toInt
} catch {
case e: Exception => {
result0 =
println("Fail convert to int")
}
} finally {
}
(result0, result1)
}
}
输出结果:
Hello Scala
1111
1,2,3,4,5,6,7,8,9,10,11
Fail convert to int
2
1,2,3,4,5,6,7,8,9,10,11
Scala 流程空间,函数,异常处理的更多相关文章
- Scala深入浅出实战经典-----002Scala函数定义、流程控制、异常处理入门实战
002-Scala函数定义.流程控制.异常处理入门实战 Scala函数定义 语句结束无分号 定义无参函数 def 函数名称(参数名称:参数类型)[:Unit=]{ 函数体 } 老师的代码 我的实际代码 ...
- 2.scala控制结构、函数、异常处理
2.scala控制结构.函数.异常处理---小书匠,在线编辑器,MARKDOWN,Evernote,文件版本 a:focus { outline: thin dotted #333; outline: ...
- scala流程控制语句以及方法和函数
1.if else表达式 scala中没有三目运算符,因为根本不需要.scala中if else表达式是有返回值的,如果if或者else返回的类型不一样,就返回Any类型(所有类型的公共超类型). 例 ...
- Dream------scala--函数定义、流程控制、异常处理
Dream------scala--函数定义.流程控制.异常处理 一.函数的定义 1.新建工程
- 【GoLang】GoLang 的流程与函数
003.GO流程与函数 1 概述 1.1 Go中流程控制分三大类:条件判断,循环控制和无条件跳转 2 流程 2.1 if 2.1.1 if条件判断语句中不需要括号 2.1.2 条件判断语句里面允许声明 ...
- Scala 深入浅出实战经典 第42讲:scala 泛型类,泛型函数,泛型在spark中的广泛应用
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- 【Scala篇】--Scala中的函数
一.前述 Scala中的函数还是比较重要的,所以本文章把Scala中可能用到的函数列举如下,并做详细说明. 二.具体函数 1.Scala函数的定义 def fun (a: Int , b: Int ) ...
- Scala 方法与函数
Scala 方法与函数:http://www.runoob.com/scala/scala-functions.html Scala 有方法与函数,二者在语义上的区别很小.Scala 方法是类的一部分 ...
- Scala 方法和函数
package com.bigdata // /** Scala 方法和函数:Scala中既有函数也有方法,大多数情况下我们都可以不去理会他们之间的区别. * * 方法:Scala 中的方法跟 Jav ...
随机推荐
- Java_Servlet 中文乱码问题及解决方案剖析
一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得 ...
- MAT(Memory Analyzer Tool)工具入门介绍
1.MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速.功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗 ...
- [CareerCup] 16.2 Measure Time in a Context Switch 测量上下文转换的时间
16.2 How would you measure the time spent in a context switch? 上下文转换发生在两个进程之间,比如让一个等待进程进入执行和让一个运行进程进 ...
- Linux_几个常用的命令
一.基本命令 查看当前路径:pwd 切换文件夹:cd 查看当前用户: who/whoami 取文件前3行:head -3 文件 取文件尾3行:tail -3 文件 切换用户: su - [用户名] 查 ...
- QQ中打开链接不是默认浏览器
电脑上装了搜狗和Chrome,Chrome为默认浏览器.但QQ中不论点什么都是以搜狗打开,解决办法: 1.设置, 2. 安全设置-->安全推荐-->使用搜狗打开链接增强安全性.去掉勾勾就行 ...
- ThinkPHP的URL优化
在刚刚安装好tp框架时,我们的路径一般是这样的: http://localhost/index.php/Home/Index/index?name=cly 我们可以通过下面一步步的步骤来优化这个路径 ...
- Thinkphp框架感悟(一)
一.assign() /** * 分析: * 此处是Controller类里面的assign方法,我们一般写的控制器所调用的assign方法就是调的这个. * 而这个方法就干了三件事:1.获取传过来的 ...
- HDU1051 贪心
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- c#语句 类
知识点: 1.string类 2.Math类 3.DateTime 获取时间 for穷举 1.羽毛球拍15元,球3元,水2元.现有200元,每种至少买一个,共有多少种可能.
- Hibernate saveOrUpdate方法到底是怎么执行的?
saveOrUpdate方法,如果传入的对象有主键就执行更新,没有就执行新增.这句话误导了很多人. 究竟是执行新增还是更新,是要有上下文环境的.这个环境就是主键策略的选择. 主键生成方式为 手动设置: ...