scala复习(3)

1.面向对象类: class 关键字修饰的对象: object 关键字修饰的类的实例:new 类() 类的实例对象Scala的类与Java、C++的类比起来更简洁,学完之后你会更爱Scala!!!对象: 用object关键字修饰的结构类: 用class 关键字修饰的类的实例(对象): new class1.1.对象1.1.1.单例对象Scala中没有静态方法和静态字段,没有...
摘要由CSDN通过智能技术生成
1.面向对象
类: class 关键字修饰的
对象: object 关键字修饰的
类的实例:new 类()  类的实例对象

Scala的类与Java、C++的类比起来更简洁,学完之后你会更爱Scala!!!
对象: 用object关键字修饰的结构
类: 用class 关键字修饰的
类的实例(对象): new class
1.1.对象
1.1.1.单例对象
Scala中没有静态方法和静态字段,没有static,
java中,没有关键字修饰的方法,只能用new class().方法
so 对于一个class来说,所有的方法和成员变量在实例被 new 出来之前都无法访问
虽然可以在class中定义main方法,然并卵…
但是可以使用object这个语法结构来达到同样的目的
用object关键字修饰的对象是单例的,称为单例对象,静态对象。
 //单例对象
object ScalaSingleton {
    def saySomething(msg: String) = {
        println(msg)
    }
}
object test {
    def main(args: Array[String]): Unit = {
        ScalaSingleton.saySomething("singleton....")
        println(ScalaSingleton)
        println(ScalaSingleton)
        // 输出结果:
        // cn.demo.ScalaSingleton$@28f67ac7
        // cn.demo.ScalaSingleton$@28f67ac7
    }
}
1.1.2.伴生对象
伴生对象是一种特殊的单例对象。是一种相对概念,需要满足两个条件:
条件1:在同一个源文件中,
条件2:对象名和类名相同
这样的单例对象,被称作是这个类的伴生对象。类被称为是这个单例对象的伴生类。
结论:类和伴生对象之间可以相互访问私有的方法和属性
class Dog {
  val id = 1
  private var name = "xiaoqing"

  def printName(): Unit ={
    //在Dog类中可以访问伴生对象Dog的私有属性
    println(Dog.CONSTANT + name )
  }
}

/**
  * 伴生对象
  */
object Dog {

  //伴生对象中的私有属性
  private val CONSTANT = "汪汪汪 : "

  def main(args: Array[String]) {
    val p = new Dog
    //访问私有的字段name
    p.name = "123"
    p.printName()
  }
}
1.1.3.apply方法
通常我们会在类的伴生对象中定义apply方法,当遇到对象名(参数1,...参数n)时apply方法会被调用
正常情况下,对象调用时是不能带参数的,但是如果能找到对应的apply方法,就能调用成功。

当使用对象(参数列表)来调用对象时,会去对象中找对应参数的apply方法,如果找到就执行相应的逻辑,如果找不到,就报错。
注意:只能找到和参数列表对应的apply方法。
要和对象区分开来
ApplyDemo   // 对象
ApplyDemo() // ApplyDemo.apply()   方法
该语法的目的:不需通过new关键字,更方便的完成类和实例对象的初始化。
object ApplyDemo {
def apply(msg:String) = {
print(s"主食 油泼面,小菜:$msg")
}
def apply(i:Int):Int = {
i * i
}


  def main(args: Array[String]) {
    //调用了Array伴生对象的apply方法
    //def apply(x: Int, xs: Int*): Array[Int]
    //arr1中只有一个元素5
    val arr1 = Array(5)
    println(arr1.toBuffer)

    //new了一个长度为5的array,数组里面包含5个null
    var arr2 = new Array(5)

  println(ApplyDemo("海参炒面"))
    println(ApplyDemo.apply("油炸煎饼"))
println(ApplyDemo(1))
  }
}

1.1.4.IDEA调试程序
IDEA Debug  调试程序


Show Execution Point (Alt+F10)   显示断点位置
Step Over(F8)  下一步
Step Into (F7)   进入到代码,类似于eclipse中的F5
Force Step Into (Alt+Shift+F7)   强制进入代码,会走所有的代码流程(不常用)
Step out (Shift+F8)  跳出当前的方法(最后会回到原debug位置)
Drop Frame
Run to Cursor (Alt+F9)  调到下一个断点

1.1.5.应用程序对象
Scala程序都必须从一个对象的main方法开始,可以通过扩展App特质,不写main方法。
object AppObjectDemo extends App{
  //不用写main方法
  println("I love you Scala")
}
1.2.类
类和对象,应该怎么使用???
优先使用对象,如果需要构造器,那么只能使用类。
如果需要封装数据的时候,Person,需要使用到类。
object,class   伴生类

1.2.1.类的定义 
在Scala中,类并不用声明为public。
Scala源文件中可以包含多个类,所有这些类都具有公有可见性。
var 修饰的变量, 这个变量对外提供getter setter方法
val 修饰的变量,是只读属性 对外提供了getter方法,没有setter(相当于java中用final修饰的变量)
class Student {

  val id = 666

    // _ 表示一个占位符, 编译器会根据变量的具体类型赋予相应初始值
    // 注意: 使用_ 占位符是, 变量类型必须指定
    var name: String = _

  //用var修饰的变量既有getter又有setter
  var age: Int
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值