Scala学习02——Scala类和对象

本文是Scala学习系列的第二篇,主要探讨Scala的数据类型、变量和常量声明,重点讲解类和对象的创建、伴生类与对象的概念以及构造函数的使用。通过学习,你可以理解Scala中类与对象的高级特性和实践应用。
摘要由CSDN通过智能技术生成

 前言

        此系列为scala学习文章,适用于为学spark而学习scala

        视频参考地址:Scala快速入门(适合为学Spark学习Scala的同学)

        系列文章如下:

        1. Scala学习01——Scala介绍

        2. Scala学习02——Scala类和对象

        3. Scala学习03——基础语法

        4. Scala学习04——Scala方法与函数

        5. Scala学习05——Scala集合

        6. Scala学习06——trait特性、模式匹配、偏函数、样例类

        7. Scala学习07——隐式转换

        资料下载地址:Scala课件资料.docx

目录

一、数据类型

二、变量和常量的声明

三、类和对象


一、数据类型

  • 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 单例对象中不可以传参
  * 如果在创建Object时传入参数,那么会自动根据参数的个数去Object中寻找相应的apply方法
  * 相当于重载方法,会自动根据调用方法的参数类型、个数寻找匹配的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)
  }
}
  • 伴生类和伴生对象
  • 伴生对象必须要和伴生类一样的名字;
  • 伴生对象和伴生类在同一个scala源文件中;
  • 伴生对象和伴生类可以互相访问private属性。
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 );
  }
}
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类的名称相同,则这个对象就是这个类的伴生对象,这个类就是这个对象的伴生类。可以互相访问私有变量。

参考链接

  1. Scala学习笔记——主构造器、辅助构造器与私有构造器
  2. ★ Scala ★——类和对象(伴生对象)大全细则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值