Scala 中类的认知

来源:互联网 发布:java定义数组函数 编辑:程序博客网 时间:2024/05/29 12:13
===================================================
scala里面的类:
1、属性默认是public的;
2、设置私有,加上private;
3、函数中传入的参数是val类型的;


Scala比Java更面向对象的一个方面是Scala没有静态成员。替代品是,Scala有单例对象:singleton object
单例对象的类型是由单例对象的伴生类定义的。然而,单例对象扩展了超类并可以混入特质。由于每个单例对象都是超类的实例并混入了特质,你可以通过这些类型调用它的方法,用这些类型的变量指代它,并把它传递给需要这些类型的方法。


==================================================


单例对象的使用就是采用伴生类来实现的, 就是同一个类中即有class,也有object
就像这样
class SwitchTryCatch {


  def useSwitch(): Unit ={
    val inpara = "a"
    inpara match {
      case "a" => println(" just match please quit")
      case "b" => print("just ok")
      case "c" => "c"
    }
  }


  def useTryCatch(): String ={
    val a = 10
    val b = 11
    if(a>b) {
      throw new RuntimeException("you are wrong")
    }else {
      b+""    // this as a return
    }
  }
}


object SwitcchTryCatchTest extends Application{
  var stc = new SwitchTryCatch
  var rest = stc.useTryCatch()
  print(rest)
}


==========================================================
Application特质
//继承自application之后, 可以直接在{}之间运行代码。
import ChecksumAccumulator.calculate 
object FallWinterSpringSummer extends Application 

for (season <- List("fall", "winter", "spring")) 
println(season +": "+ calculate(season)) 



继承自Application比写个显式的main方法要短,不过它也有些缺点。首先,如果想访问命令行参数的话就不能用它,因为args数组不可访问。比如,因为Summer程序使用了命令行参数,所以它必须带有显式的main方法,如代码4.3所示。第二,因为某些JVM线程模型里的局限,如果你的程序是多线程的就需要显式的main方法。最后,某些JVM的实现没有优化被Application特质执行的对象的初始化代码。因此只有当你的程序相对简单和单线程情况下你才可以继承Application特质。 








0 0
原创粉丝点击