scala之class、singleton object
来源:互联网 发布:如何提升淘宝转化率 编辑:程序博客网 时间:2024/06/05 11:03
类和对象
- 了解scala class、field、method,interface
- 了解 singleton object
- 了解怎么去写、运行Scala程序
class、field、method
- Scala默认访问级别是public
- private关键字隐藏field
- method参数都是val类型
默认返回
def checkSum() : Int = { return ~(sum & 0xFF) + 1 }
等价于
def checkSum() : Int = { ~(sum & 0xFF) + 1 }
- 有返回值时,若没有显式return,则会返回方法体中计算出的最后一个值
- 推荐方式:避免使用显式return、多个return,保持方法足够精简
Singleton Object
scala类中没有static方法
伴随类,伴随对象
Single object和class同名时,两则互为伴随类和伴随对象。
import scala.collection.mutable//类class CheckSumAccumulator { private var sum = 0 def add(b: Byte) : Unit = { sum += b } def checkSum() : Int = { ~(sum & 0xFF) + 1 }}//对象object CheckSumAccumulator { private val cache = mutable.Map.empty[String, Int] def calculate(s : String) : Int = { if (cache.contains(s)) { cache(s) } else { val acc = new CheckSumAccumulator for (c <- s) { acc.add(c.toByte) } val v = acc.checkSum() cache += (s -> v) v } }}
调用: println(CheckSumAccumulator.calculate(“hello world”))
- 伴随类和对象存在时,必须在同一个源文件中定义
- 伴随类和对象可以互相访问对象的私有成员
- singleton object有些类似java中包含static方法的类,区别是singleton object的名字是一个对象的名称标记
- singleton object不是一种类型,不能执行new操作,它是对伴随类的扩展
- 通过类型访问singletong object的方法
- singleton object本质是静态引用,指向一个合成类对象,跟java static成员具有相同的初始化过程
- 通常singleton object初始化发生在第一次被调用时
scala application
运行scala程序
编写程序
- singleton object
- main函数
object ScalaTest { def test(acc : CheckSumAccumulator) : Int = { acc.checkSum() } def main(args : Array[String]) : Unit = { println(CheckSumAccumulator.calculate("hello world")) }}
- 默认引入java.lang包和scala包的所有成员
- 默认引入singleton object Predef的所有成员
- println、assert都是Predef的成员
- 与java不同的是:scala的源文件名可以和包含的类名不同,但这种方式不推荐
编译
$ scalac CheckSumAccumulator.scala ScalaTest.scala
或者
$ fsc CheckSumAccumulator.scala ScalaTest.scala
- scalac是scala编译器
- 编译时需要将依赖类一起编译,否则找不到类
- fsc (fast scala compiler), 在第一次启动时会创建一个本地服务器,接收待编译的文件,进行编译
- 关闭fsc: fsc -shutdown
scalac: 每次编译时都会先扫描依赖的jar包,做一些初始化工作,比较耗时。
fsc: 仅在第一次编译时会创建本地服务器,等待接收编译请求,后面接收到编译请求后会立即进行编译。
运行
$ scala ScalaTest
app trait
程序
object ScalaAppTest extends App { for (arg <- args) { println(CheckSumAccumulator.calculate(arg)) }}
编译
$ scalac CheckSumAccumulator.scala ScalaAppTest.scala
运行
$ scala ScalaAppTest hello world-20-40
- scala.App允许直接把main方法中的方法体写入到{ }内
- 通过args,可以直接访问传入的参数
总结
本节主要简单讲了scala的class的特性、single object、怎么编写编译和运行scala程序及scala App。
阅读全文
0 0
- scala之class、singleton object
- Scala 之 object 和class
- Scala 学习之 Class,Object, Trait
- Scala之旅-class和object详解
- Scala之旅-class和object详解
- Scala之旅-class和object详解
- scala之case class 和case object
- Scala之旅-class和object详解
- Scala之旅-class和object详解
- scala中的object和class
- scala中class与Object
- scala中的object和class
- Scala关键字class和object
- Scala之Case Class
- scala中 object 和 class的区别
- Scala的object和class的区别
- scala class和object的区别
- 5-Scala对象(Class)和类(Object)
- 测试
- web学习笔记21-jQuery学习-1(选择器)
- 根据JSON数据,自动生成Table
- 爬去淘宝青岛啤酒的信息
- bzoj 1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富(DP)
- scala之class、singleton object
- JD笔试
- usb的设置
- Retrofit2.0的使用之自定义CallAdapter.Factory
- python Day6
- HTML-css样式的创建
- [leetcode]591. Tag Validator
- C# DataTable 和List之间相互转换的方法
- 求相反数。