Scala编程(第四章:类和对象)

1.类、字段和方法

类定义

class CheckSumAccumulator {
     //这里是类定义
     var sum=0
}

就可以如下这样创建CheckSumAccumulator的对象:

new CheckSumAccumulator

实例化对象:

val acc = new CheckSumAccumulator

给sum赋值:

acc.sum=3

要将某个字段声明为私有,可以在字段前加 private 这个访问修饰符,如:

class CheckSumAccumulator {
     //这里是类定义
     private var sum=0
}

有了 private ,任何试图通过外部访问sum的操作都会失败:

val acc=new CheckSumAccumulator
acc.sum=5//不能编译,因为sum是私有的

注意:在Scala中,使得成员允许公共访问(public)的方式是不在成员前面显式地给出任何修饰符。

 由于sum是私有的,唯一能访问sum的代码都定义在类自己里面:

class CheckSumAccumulator {
  private var sum=0

  def add(b:Byte):Unit={
   sum+=b
  }

  def checkSum():Int={
  return ~(sum&0xFF)+1
  }
}

Scala方法参数的一个重要特征是它们都是val而不是var。如果对入参重新赋值会报错:

def add(b:Byte):Unit={
b=1    //不能编译,因为b是一个val
sum+=b
}

更精简的CheckSumAccumulator:

class CheckSumAccumulator {
   private  var sum=0
   def add(b:Byte):Unit={sum+=b}
   def checkSum():Int= ~(sum&0xFF)+1
}

 

2.分号推断:在Scala中,每条语句最后的分号通常是可选的。如果同一行包含多条语句,需要分号:

val s = "hello";println(s)

在不该断句的地方断句: 

x
+y

这段代码会被解析成两条语句x和+y。希望解析成单条语句x+y,可以包在圆括号里:

(x
+y)

或者也可以将+放在行尾:

x+
y

分号推断的规则:除非以下任意一条符合,否则行尾就会被当作分号处理:

  1. 当前行以一个不能作为语句结尾的词结尾,比如英文句点或中缀操作符
  2. 下一行以一个不能作为语句开头的词开头
  3. 当前行的行尾出现在圆括号(...)或方括号[...]内,因为再怎么说圆括号和方括号也不能(直接)包含多条语句

 

3.单例对象

因为Scala不允许有静态(static)成员,Scala提供了单例对象。单例对象的定义看上去和类定义很像,只不过class关键字被换成了object关键字。当单例对象跟某个类共用同一个名字时,它被称作这个类的伴生对象,这个类又叫作这个单例对象的伴生类,但必须在同一个源码文件中定义类和类的伴生对象。类和它的伴生对象可以互相访问对方的私有成员:

class CheakSum {

  private val sum=0

  def getSum():Int=sum
  def prtObject=CheakSum.a
}

object CheakSum {
  private val a=3
  val dd=new CheakSum
  def prtClass= dd.sum

如果你是Java程序员,可以把单例对象当作是用于安置那些用Java时打算编写的静态方法。可以用类似方式访问单例对象的方法:

CheakSum.prtClass

类和单例对象的一个区别是单例对象不接收参数,而类可以。单例对象在有代码首次访问时才被初始化。没有同名的伴生类的单例对象称为 孤立对象(standalone object)。

 

4.Scala应用程序:要运行一个Scala程序,必须提供一个独立对象的名称。这个独立对象需要包含一个main方法,该方法接收一个Array[String]作为参数,结果类型为Unit。任何带有满足正确签名的main方法的独立对象都能被用作应用程序的入口,如:

object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("Hello World!")
  }
}

注意:Scala在每一个Scala源码文件都隐式地引入了java.lang和scala包的成员,以及名为Predef的单例对象的所有成员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值