前言

此系列为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 = 18def 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 = xnameval age = xagevar 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 = xnamevar age = xagevar 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 ★——类和对象(伴生对象)大全细则

Scala学习02——Scala类和对象相关推荐

  1. C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)

    C++引用详情(引用的基本语法,注意事项,做函数的参数以及引用的本质,常量引用) 函数高级C++(函数的默认参数,函数的占位参数,函数重载的基本语法以及注意事项) C++类和对象-封装(属性和行为作为 ...

  2. Python学习笔记 (类与对象)

    Python学习笔记 (类与对象) 1.类与对象 面向对象编程语言类: 一个模板, (人类)-是一个抽象的, 没有实体的对象: (eg: 张三, 李四) 属性: (表示这类东西的特征, 眼睛, 嘴巴, ...

  3. Scala学习(一)--Scala基础学习

    Scala基础学习 摘要: 在篇主要内容:如何把Scala当做工业级的便携计算器使用,如何用Scala处理数字以及其他算术操作.在这个过程中,我们将介绍一系列重要的Scala概念和惯用法.同时你还将学 ...

  4. Scala学习--《Scala编程》

    2019独角兽企业重金招聘Python工程师标准>>> Scala学习手册--可伸缩的语言(随着使用者的需求而成长)  第一章:基本概念 Scala=FP+OO.静态语言 兼容性.简 ...

  5. scala学习之scala中一些集合的常用函数

    scala学习 集合常用函数 集合的基本属性与常用操作 长度.大小.循环遍历.迭代器.生成字符串.是否有包含等 object TestSetFunction {def main(args: Array ...

  6. Java学习笔记_类和对象

    ·类:是一组相关属性和行为的集合,可以看成是一类事务的模板,使用事物的属性特征和行为特征来描述该类事物. ·属性:该事物的状态信息 ·行为:就是该事物能够做什么 ·对象:一类事物的具体体现,对象是类的 ...

  7. python学习之【类和对象】

    前言 五一快乐! 上一篇文章python学习--[第八弹]中,给大家介绍了python中的函数,这篇文章接着学习python中的类和对象. 我们知道,python中一切皆对象.在这篇文章开始之前,我们 ...

  8. 一个编程小白的Java SE学习日志 V——类、对象【极客BOY-米奇】

    文章目录 前言(转载请说明作者!)3.18~3.25编写 观看前自问 面向对象实现过程 面向对象三大特性 封装 继承 多态 如何理解类与对象(实例)的关系? 现实理解 如何理解对象? 现实理解 任务导 ...

  9. 冰冰学习笔记:类与对象(上)

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

  10. 冰冰学习笔记:类与对象(下)

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

最新文章

  1. opengl模板测试实例
  2. superset可视化-Bar Chart
  3. 产品经理怎么管理项目进度?
  4. 2.【sheel学习】数组
  5. JAVA EE 6 jar包集合_Java EE6将JSF facelets(xhtml)和ManagedBeans打包成JAR
  6. 负载均衡和反向代理的通俗理解
  7. Julia: MFDCCA和MFCCA算法代码
  8. 进销存excel_EXCEL也能连接扫码枪?商品扫码入库,免费进销存自由修改功能
  9. switch【耀西的手工世界xic】破解xic文件下载
  10. html渐变编织背景,CSS hover背景/文字渐变效果
  11. C语言根据国家英文首字母进行排序
  12. 简单的哈夫曼树程序实现
  13. 【Python】Pandas实用技能,数据筛选query函数详细介绍
  14. SpringBoot整合GraphQL第(一)章节
  15. 【20220114】【信号处理】什么是基线漂移/趋势项?如何消除?
  16. 新氧服务C端、赋能B端,驱动医美行业健康发展
  17. 独立站社交媒体运营策略
  18. 植物大战僵尸的一些魔改
  19. Django web 框架学习之旅(3)
  20. vue学习笔记2-数据绑定

热门文章

  1. CVPR2022 Oral | CosFace、ArcFace的大统一升级,AdaFace解决低质量图像人脸识
  2. 综述 | 基于特征的视觉同步定位和建图
  3. 检测精度大幅提升!移动端实时的NanoDet升级版NanoDet-Plus来了!
  4. WPF的DataGrid的某个列绑定数据的三种方法(Binding、Converter、DataTrigger)
  5. spark记录(7)SparkCore的调优之数据倾斜调优
  6. 第二次作业:硬币游戏——代码分析与改进
  7. Linux服务器安全登录设置
  8. Linux的sleep()和usleep()的使用和区别
  9. 控制台应用程序转成MFC程序错误—OcrRec.exe触发一个触点,原因可能是堆被破坏
  10. Python获取指定目录下文件数量及总大小