栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Scala学习02——Scala类和对象

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Scala学习02——Scala类和对象

Scala快速入门(适合为学Spark学习Scala的同学)

目录

一、数据类型

二、变量和常量的声明

三、类和对象


一、数据类型
  • Scala数据类型,首字母大写
  • Any是所有类型的超类,其父类为Object,AnyRef与AnyVal为Any类型的子类
  • Nothing类型表示不赋类型时,系统默认的类型,无实例值,为所有类型的子类

二、变量和常量的声明
  • 常量赋值:val
  • 变量赋值:var
  • 定义变量/常量时,也可以写上指定类型,一般Scala可以自动识别,因此省略,如:val a:Int = 10
var name = "zhangsan"
println(name)
name ="lisi"
println(name)
//name 是变量,可以再赋值

val gender = "m"
//gender = "f"//错误,不能给常量再赋值
  • 用表达式赋值
val x=1
val y=if(1>0) 1 else -1
val p=if (x>5) 1

三、类和对象
  • 创建类
class Person{
  val name = "zhangsan"
  val age = 18

  def sayName() = {
    "my name is "+ name
  }
}
  • 创建对象
object Lesson_Class {
   //定义主方法
   def main(args: Array[String]): Unit = {

    val person = new Person()
    
    // 可以直接引用该类中的属性
    println(person.age);
    println(person.sayName())
  }
}
  • 对象中的apply方法
  • object中不可以传参,当创建一个object时,如果传入参数,那么会自动寻找object中的相应参数个数的apply方法。
  object Lesson_ObjectWithParam {
  
  def apply(s:String) = {
    println("name is "+s)
  }

  def apply(s:String,age:Int) = {
    println("name is "+s+",age = "+age)
  }

  def main(args: Array[String]): Unit = {
    // 传入1个参数 ,自动寻找调用第一个apply方法
    Lesson_ObjectWithParam("zhangsang")
    // 传入2个参数 ,自动寻找调用第二个apply方法
    Lesson_ObjectWithParam("lisi",18)
  }
}
  • 伴生类和伴生对象
class Person(xname :String , xage :Int){
  // case1   伴生类,可以直接调用其伴生对象的变量  值为"zhangsanfeng"
  var name = Person.name 
  // case2   私有变量 name,若object名字不与当前类名一致,则在对象main方法中调用person.name会报错
  private  val name = xname
  val age = xage
  var gender = "m"

}


object Person {
  val name = "zhangsanfeng"

  def main(args: Array[String]): Unit = {

    val person = new Person("wagnwu",10,"f")
    println(person.name );
  }
}
  • 构造函数this
  • scala中的class类默认可以传参数,默认的传参数就是默认的构造函数。
  • 重写构造函数的时候,this函数第一行必须要调用默认的构造函数
  • 构造函数更多详见:Scala学习笔记——主构造器、辅助构造器与私有构造器
class Persom(xname:String,xage:Int){
  val name = xname
  var age = xage
  var gender = 'M'
  //new该class时,会执行该语句
  println("*****************")

  //new该class时,会执行该语句,因为是构造函数
  def this(yname:String,yage:Int,ysex:Char){
    //第一行调用默认的构造函数
    this(yname,yage)
    this.gender = ysex
  }

  //new该class时,不执行该语句,只在调用时执行
  def setName()={
    println("name is .." + lesson_ClassAndObj.name)
  }

 //new该class时,会执行该语句
 println("===============")
}

object lesson_ClassAndObj {
  val name = "wangwu"

  def main(args: Array[String]): Unit = {
    val p = new Persom("ssss",20)
    val p1 = new Persom("xxxx",20,'F')
  }
}

总结注意:

  1. 建议类名首字母大写 ,方法首字母小写,类和方法命名建议符合驼峰命名法。
  2. scala 中的object是单例对象,相当于java中的工具类,可以看成是定义静态的方法的类。object不可以传参数。另:Trait不可以传参数
  3. scala中的class类默认可以传参数,默认的传参数就是默认的构造函数。
  4. class 类属性自带getter ,setter方法。
  5. 使用object时,不用new,使用class时要new ,并且new的时候,class中除了方法不执行(不包括构造),其他都执行。
  6. 如果在同一个文件中,object对象和class类的名称相同,则这个对象就是这个类的伴生对象,这个类就是这个对象的伴生类。可以互相访问私有变量。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644616.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号