Scala 类认识

环境: CentOS 6.3, eclipse

定义类:

我们先看如何定义一个实现‘字节校验和’类定义代码:

package scala
import scala.collection.mutable.Map

class ChecksumAccumulator {
  private var sum = 0;
  def add(b: Byte) = sum += b
  def checksum() = ~(sum & 0xFF) + 1
}

如何运行程序:

错误方式:

根据Java经验,加入main 方法,无法运行。

package scala
import scala.collection.mutable.Map

class ChecksumAccumulator {
  private var sum = 0;
  def add(b: Byte) = { sum += b }
  def checksum() = ~(sum & 0xFF) + 1

  def main(args: Array[String]) {
    for (arg <- args) {
      arg.foreach(c => add(c.toByte))
      println(checksum())
    }

  }
}
正确方式1:

把程序定义成object。

package scala

object Summer {
  def main(args: Array[String]) {
    val ck = new ChecksumAccumulator()
    for (arg <- args) {
      arg.foreach(c => ck.add(c.toByte))
      println(ck.checksum())
    }
  }
}
正确方式2:

定义一个新的object, 生成ChecksumAccumulator 类对象并使用。

package scala
import scala.collection.mutable.Map

object ChecksumAccumulator {
  private var sum = 0;
  def add(b: Byte) = { sum += b }
  def checksum() = ~(sum & 0xFF) + 1

  def main(args: Array[String]) {
    for (arg <- args) {
      arg.foreach(c => add(c.toByte))
      println(checksum())
    }

  }
}

class 和 object 的区别:

class 定义类,就像对象的模子。object 在scala里面叫单例对象,不可以通过new 方式生成新的对象,因此object定义的就是个对象。

如果object名字与某个class名字一样,object 就叫做class的伴生对象,class叫做object的伴生类。因此单例对象可以没有相对应的伴生类。

下一篇将通过例子具体了解。

Scala 类认识

时间: 2024-10-10 23:15:37

Scala 类认识的相关文章

Scala类

要点 类中的字段自动带有getter方法和setter方法 可以用定制的getter/setter方法替换掉字段的定义,而不必修改使用类的客户端----这就是"统一访问原则" 用@BeanProperty注解来生成JavaBeans的getXxx/setXxx方法 每个类都有一个主要的构造器,这个构造器和类定义"交织"在一起.它的参数直接成为类的字段,主构造器执行类体中所有的语句. 辅助构造器是可选的,它们叫做this 在Scala源文件中,可以包含多个类,所有这些

Scala入门到精通——第十节 Scala类层次结构、Traits初步

本节主要内容 Scala类层次结构总览 Scala中原生类型的实现方式解析 Nothing.Null类型解析 Traits简介 Traits几种不同使用方式 1 Scala类层次结构 Scala中的类层次结构图如下: 来源:Programming in Scala 从上面的类层次结构图中可以看到,处于继承层次最顶层的是Any类,它是scala继承的根类,scala中所有的类都是它的子类 Any类中定义了下面几个方法: //==与!=被声明为final,它们不能被子类重写 final def ==

Scala 类

class 1>scala 类通过new A () 2>辅助构造函数 用 this() 并且必须调用构造函数.并且第一行就要调用. 3> 构造函数写法  和java 不同 class Person(name: String, age: Int) {}? 创建类同时定义构造函数. 4>主要构造函数的方法体? 除了成员变量 和方法外全是 object ??static??,objec实现Singleton以及static相似的静态方法 相当于java静态方法抽取. 1>有时叫做半

【scala】 scala 类 (五)

1.scala类 1.class 关键字 2.var 属性 默认生成getter/setter 方法 3.val 属性 默认生成getter 方法 4. 自定义getter /setter 方法 , property 和 proeprty_ 方法来表示 getter 和setter方法 5. 主构造函数 和辅构造函数的定义使用 6.使用 @BeanProperty 来生成 getter/setter方法 7. 重写toString 方法 ,利用scala字符串插值来格式化输出 import sc

Scala类与对象

Scala类与对象 类简介 简介 类是对象的蓝图.一旦你定义了类,就可以用关键字new根据类的蓝图创建对象.在类的定义里,可以放置字段和方法,这些被笼统地称为成员.对于字段,不管是val还是var定义的,都是指向对象的变量.对于方法,用def定义,包含了可执行代码.字段保留了对象的状态或数据,而方法使用这些数据执行对象的运算工作.当类被实例化的时候,运行时环境会预留一些内存来保留对象的状态映像--即变量的内容. 示例 创建类示例: class SumAccumulator { var sum =

scala 基础九 scala 类的扩展和继承extends override

1.scala 类的继承 package smart.iot //父类 animal 有三个参数 class animal(var name:String,var age:Int,var eat:String) { } //子类 panda 继承父类 animal class Panda( name:String, age:Int, eat:String,var blackeye:String) extends animal(name,age,eat) { } object load { def

DT大数据梦工厂第7讲-Scala类属性

学习了王家林老师的scala类属性的视频讲座,总结如下: var变量有默认的类似于java的get和set方法,不需要显示的声明:val变量有默认get方法 package com.fish.scala /** * @author fish * @description life is short ,you need spark! * 大数据架构咨询,欢迎联系@qq 16616365 */ class ClassAttr { var name  = "yxg"             

Scala类中的get与set

在scala类中get和set使用有以下几种: 1. var foo: Scala自动合成一个getter和一个setter 2. val foo: Scala自动合成一个getter scala中var用于定义一个可变量, val定义一个常量. 所以在1中,当我们定义1个变量foo时候,会自动有一个默认的get和set方法. 在2中,由于val是常量,所以只有一个get方法, val常量在定义的时候需要赋值,并且不可更改. 3. 人工定义foo和foo_=方法 在scala中get和set的定

Scala类的构造器与访问器

1.构造器 在Scala中,每个类都有一个主构造器.主构造器与类的定义交织在一起,如下: class Person ( private var _name: String, private var _age: Int) 主构造器会执行类定义中的所有语句.如下,println语句是主构造器的一部分,当类被实例化时,println语句会立即执行. class Person private( private var _name: String, private var _age: Int){ prin