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
scala复习(3)
最新推荐文章于 2022-07-10 15:11:08 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)