快学Scala-第六章 对象】的更多相关文章

1. 编写一个Conversions对象,加入inchesToCentimeters.gallonsToLiters和milesToKilometers方法. object Conversions {     def main(args: Array[String]){         printf("1 inch = %g centimeters\n", inchesToCentimeters(1))         printf("2 gallons = %g liter…
类getter和setter 如果字段定义是private[this], 字段是私有的,但不生成getter和setter方法. class Counter { private[this] var value = 0 } 如果字段定义是私有的(private),则getter和setter方法也是私有的. class Counter { private var value = 0 } 如果字段定义没有修饰符, 则字段是私有的,getter和setter方法是共有的. class Counter…
1 简介 近期对Scala比较感兴趣,买了本<快学Scala>,感觉不错.比<Programming Scala:Tackle Multi-Core Complexity on the Java Virtual Machine>好很多. 是本不错的入门书.而且每个章节都设置了难度级别,每章有习题,可以巩固Scala语法. 本文的目的就是针对这些习题进行解答 2 基础  2.1 在Scala REPL中键入3,然后按Tab键.有哪些方法可以被应用? 这个....直接操作一遍就有结果了…
Robert Peng's Blog - https://mr-dai.github.io/ <快学Scala>Intro与第1章 - https://mr-dai.github.io/Scala-for-the-Impatient-1 <快学Scala>第2章(上):控制结构 - https://mr-dai.github.io/Scala-for-the-Impatient-2-1 <快学Scala>第2章(下):函数 - https://mr-dai.github…
trait的abstract override使用: 当我看到abstract override介绍的时候也是一脸懵逼,因为快学scala,只介绍了因为TimestampLogger中调用的super.log依旧是个abstract class,所以必须在方法前加上abstract和override.但是并没有具体介绍如何使用,然后查阅了其他文档,才明白使用方法. 下面的代码定义了超类LoggerEmpty,这个定义意味着该特质只能混入扩展LoggerEmpty的类中. 在特质中声明抽象方法中有…
Scala 类型层级: 对象相等性: 和Java一样要重写equals方法和hashcode方法 class Student(val id: Int, val name: String) { override def equals(other: Any) = { val that = other.asInstanceOf[Student] if (that == null) false else id == that.id && name == that.name } override d…
集合 13.1 集合的三大类 所有的集合都扩展Iterable特质.集合的三大集合为Seq, Set, Map Seq是一个有先后次序的值的序列,比如数组或列表.IndexSeq允许我们通过整型下表快速访问任意元素.但是链表不可以. Set是一组没有先后次序的值.SortedSet中,元素排过序. Map时一组(键,值)对.SortedMap按键排序 每一个Scala集合特质或类都有一个带有apply方法的伴生对象. 13.2 可变和不可变集合 13.3 序列Sequence 不可变序列:Ind…
Python第六章__class面向对象编程与异常处理 欢迎加入Linux_Python学习群  群号:478616847 目录: 面向对象的程序设计 类和对象 封装 继承与派生 多态与多态性 特性property 静态方法与类方法 异常处理 一.面向对象的程序设计 在Python中大家一定听过一句话,叫做一切皆对象,字典.序列.数字和字符串都是根据类来创建的,在python中面向对象(object)编程是python的 核心概念,类(class)最终解释了面向对象编程思想(OOP),同样类也是…
知识点: 1.单例对象 使用object语法结构达到静态方法和静态字段的目的,如下例,对象定义某个类的单个实例,包含想要的特性,对象的构造器在该对象第一次被使用时调用. object Account{ private var lastNumber = 0 def newUniqueNumber() = { lastNumber += 1; lastNumber} } 对象本质上可以拥有类的所有特性,除了不能提供构造器参数. 2.伴生对象 通过类和与类同名的"伴生"对象来达到基友实例方法…
4 映射和元组  4.1 设置一个映射,当中包括你想要的一些装备,以及它们的价格.然后构建还有一个映射.採用同一组键,可是价格上打9折 映射的简单操作  ,"gun"->18,"ipad"->1000)   , gun -> 18, ipad -> 1000)      scala> for((k,v) <- map) yield (k,v * 0.9)   res3: scala.collection.immutable.Map…
5 类  5.1 改进5.1节的Counter类,让它不要在Int.MaxValue时变成负数 class Count{ private var value = Int.MaxValue else value } def current = value } 5.2 编写一个BankAccount类,增加deposit和withdraw方法,和一个仅仅读的balance属性 ){ def deposit(){} def withdraw(){} } 5.3 编写一个Time类,增加仅仅读属性hou…
3 数组相关操作  3.1 编写一段代码.将a设置为一个n个随机整数的数组,要求随机数介于0(包括)和n(不包括)之间  random和yield的使用 import scala.math.random def randomArray(n:Int)={ until n) yield (random * n).toInt } ).mkString(",")) 3.2 编写一个循环,将整数数组中相邻的元素置换.比如,Array(1,2,3,4,5)经过置换后变为Array(2,1,4,3,…
Scala包定义: 嵌套式: package a1 { class a1Class{ val age = 10 } package a2 { class PackageTest { def main(args: Array[String]): Unit = { println(new a1Class().age) } } } } 串联式: package com.citi.packageUtil 包对象: 包对象被编译成带有静态方法和字段的JVM类,名为package.class,位于相应的包下…
Scala没有静态方法和静态字段, 你可以用object这个语法结构来达到同样的目的. 对象的构造器只有在第一次被使用时才调用. 伴生对象apply方法: 类和它的伴生对象可以互相访问私有特性,他们必须存在于同一个源文件. 类中要访问类的伴生对象中成员,需要通过类.成员调用. class Account private (val id: Int, initialBalance: Double){ } object Account { def apply(initialBalance: Doubl…
关于case class和普通class的区别,可以参考: https://www.iteblog.com/archives/1508.html…
shell调用:(管道符前加#号,执行shell用!) import sys.process._ "ls -al" #| "grep x" ! 正则表达式:(r表示正则表达式) val numPattern = """[0-9]+""".r for (matchString <- numPattern.findAllIn("99 bottles, 98 bottles")){ pr…
控制结构和函数 1.在Scala中,几乎所有构造出来的语法结构都有值.这个特性是为了使得程序更加精简,也更易读. (1)if表达式有值 (2)块也有值——是它最后一个表达式的值 (3)Scala的for循环就像是“增强版”的Java for循环 (4)分号(在绝大多数情况下)不是必须的 (5)void类型是Unit (6)避免在函数定义中使用return (7)注意别在函数式定义中漏掉了= (8)异常的工作方式和Java中基本一样,不同的是catch语句中使用“模式匹配” (9)Scala没有受…
第一章 基础 1.安装scala解释器 (1)scala-2.12.1.msi (2)配置环境变量:SCALA_HOME = D:\Program Files\scala Path= %SCALA_HOME%\bin;%SCALA_HOME%\jre\bin; ClassPath =.;%SCALA_HOME%\bin;%SCALA_HOME%\lib\dt.jar;%SCALA_HOME%\lib\tools.jar.; (3)验证解释器是否安装成功. 进入命令行键入scala看是否成功 如上…
Actor 通过尽可能避免锁和共享状态,actor使得我们能够容易地设计出正确.没有死锁或争用状况的程序. Scala类库提供了一个actor模型的简单实现.AKKA是更高级的actor类库. 19.1 发送消息 actor是一个处理异步消息的对象.消息可以是任何对象.一个好的做法是使用样例类作为消息,这样就可以使用模式匹配来处理消息. 消息的发送是异步的:“发完就忘”.消息被送往目标actor,当前线程继续运行. 19.2 接收消息 发送到actor的消息被存在“邮箱”中.receive方法从…
基础 1.1 声明值和变量 在Scala中,鼓励使用val; 不需要给出值或变量的类型,这个信息可以从初始化表达式推断出来.在必要的时候,可以指定类型. 在Scala中,仅当同一行代码中存在多条语句时才需要用分号隔开. 1.2 常用类型 Scala 7中数值类型:Byte, Char, Short, Int, Long, Float和Double,以及Boolean类型.跟Java不同的是,这些类型是类.可以对数值执行方法,1.toString() Scala不需要类型包装,类型之间的转换是Sc…
转载: 1.变量声明 val answer = 8 * 5 + 2; //常量 var counter = 0;    //变量 //在必要的时候 ,可以指定类型 val greeting:String = null val greeting:Any = "Hello" //可以将多个值或变量放在一起声明 val xmax, ymax = 100 //xmax 和 ymax设为100 var greeting, message:String = null // 都被设为字符串,被初始化…
条件表达式 在Scala中if/else表达式有值,这个值就是跟在if或else之后的表达式的值.例如: if (x > 0) 1 else -1 上述表达式的值是1或-1,具体是哪一个取决于x的值.你可以将if/else的值赋值给变量: val s = if (x > 0) 1 else -1 这与如下语句的效果一致: if (x > 0) s = 1 else s = -1 以上两个的区别在于:第一个可以用来初始化val:第二种s必须是var. 在Scala中每个表达式都有一个类型.…
声明值和变量 用val定义的值实际上是常量.用var定义的值是变量.在scala中鼓励使用val.不需要给出值或变量的类型,这个信息可以通过初始化的表达式推断出来.(声明值和变量但不做初始化会报错) 在Scala中,变量或函数的类型总是写在变量或函数名称的后面.如下: val greeting: String = null val greeting: Any = "Hello" 在Scala中,仅当同一行中存在多条语句是才需要使用分号隔开. 我们可以将多个值或变量放在一起声明,如下:…
scala 1.   scala的由来 scala是一门多范式的编程语言,一种类似java的编程语言[2] ,设计初衷是要集成面向对象编程和函数式编程的各种特性. java和c++的进化速度已经大不如从前,那么乐于使用更现代的语言特性的程序员们正在将眼光移向他处.scala是一个很有吸引力的选择:事实上,在我看来,对于想要突破和超越java或者c++的程序员而言,scala是最具吸引力的一个.scala的语法十分简洁,相比java的样板代码,scala让人耳目一新.scala运行于java虚拟机…
    ## 1. 继承 Scala语言通过 extends 关键字来继承类. 那么继承一个类有什么好处呢? 子类除了拥有继承自超类的方法和字段(即为val(常量), var(变量)所定义的), 还可以添加自己需要的新方法和新字段, 而且不但可以重写(override)超类的方法, 还可以重写超类的`字段`. ### final 关键字 在Scala中, 不仅可以将类声明为final, 而且可以将字段和方法声明为final 当类被声明为final时, 类不可以被继承; 当方法和字段被声明为fin…