声明: 1. 本文为我的个人复习总结, 并那种从零基础开始普及知识 内容详细全面, 言辞官方的文章
              2. 由于是个人总结, 所以用最精简的话语来写文章
              3. 若有错误不当之处, 请指出

变量和数据类型:

  • 变量声明时, 无论是val还是var 都必须要有初始值

    变量命名规则:

    1. 字母、数字、下划线的组合, 且数字不能作为开头
    2. 可以以操作符开头, 且只包含操作符(+ - * / # !等)
    3. 用反引号包含任何字符串作为变量, 即使是Scala关键字(39个)也可以

字符串:

  •   // * 用于将一个字符串复制多次并拼接println(name * 3)
    
  •   // 格式化模板字符串 f %2.2fprintln(f"The num is ${num}%2.2f")
    
  •   // 三引号表示字符串, 保持多行字符串的原格式输出val sql =s"""|select *|from|  student|where|  name = 张三|and|  age > 20|""".stripMargin
    

标准输入:

​ StdIn.readLine( )

​ StdIn.readInt( )

文件IO:

// 1. 从文件中读取数据
Source.fromFile("src/main/resources/test.txt").foreach(print)// 2. 将数据写入文件
val writer = new PrintWriter(new File("src/main/resources/output.txt"))
writer.write("hello scala from java writer")
writer.close( )

Scala真正做到了万物皆对象, 没有基本数据类型

数据类型:

Any -> AnyVal AnyRef
AnyVal 的子类Unit有唯一对象是 ( )
AnyRef 的子类Null有唯一对象是 null
最低级类为Nothing, 当返回抛出的异常时 就是返回Nothing类型, 可以被任何类型所接收

强制类型转换:

​ “123”.toByte, 123.toByte

运算符:

  • ==就是equals( )
  • 运算符的本质是一个方法, + 是 .+( )
  • Scala中没有++、–操作符
  • +=没有Java中的强转功能

流程控制:

if else:

// 没有三元运算符,但可以接收if else语句的返回值,{}加不加都行
// val res2 = if (age >= 18) "成年" else "未成年"

循环:

// 1. 范围遍历
for (i <- 1 to 10) {}
for (i: Int <- 1.to(10)) {}for (i <- Range(1, 10)) {}
for (i <- 1 until 10) {}// 2. 集合遍历
for (i <- Array(12, 34, 53)) {println(i)
}// 3. 循环守卫
for (i <- 1 to 10 if i != 5) {println(i)
}// 4. 循环步长
for (i <- 1 to 10 by 2) {println(i)
}
// 5. 反向打印
println("-------------------")
for (i <- 1 to 10 reverse) {println(i)
}// 5. 循环嵌套
for (i <- 1 to 4; j <- 1 to 5) {println("i = " + i + ", j = " + j)
}// 6. 循环引入变量for (i <- 1 to 10; j = 10 - i) {}for {i <- 1 to 10j = 10 - i
} {}// 7. 循环返回值
val b: immutable.IndexedSeq[Int] = for (i <- 1 to 10) yield i * i
// b = Vector(1, 4, 9, 16, 25, 36, 49, 64, 81, 100)
println("b = " + b)

跳出循环:

​ Scala没有break和continue, 想跳出循环, 需要:

  // 1. 使用Scala中的Breaks类的break方法, 实现异常的抛出和捕捉; Breaks类名可以省略Breaks.breakable(for (i <- 0 until 5) {if (i == 3)Breaks.break()println(i)})println("这是循环外的代码")// 2. 采用抛出异常的方式, 退出循环try {for (i <- 0 until 5) {if (i == 3)throw new RuntimeExceptionprintln(i)}} catch {case e: Exception =>             // 什么都不做, 只是退出循环}
}

面向对象:

伴生对象:

/*object: 单例对象(伴生对象, 即代替了static)。子类对非抽象类子类 的对非抽象属性重写, 父类非抽象属性只支持 val 类型, 而不支持 var。*/
object HelloWorld {/*def 方法名称(参数名称: 参数类型): 返回值类型 = { 方法体 }*/def main(args: Array[String]): Unit = {println("hello world")System.out.println("hello scala from java")}
}
  • Scala中属性也可以重写

  • Scala中属性和方法都是动态绑定, 而 Java 中只有方法为动态绑定

  • 重写非抽象方法需要用 override 修饰, 重写抽象方法则可以不加 override

  • 特质=抽象类+接口

  • 导包:

    • 通配符导入: import java.util._
    • 可以局部导入, 不必非得写在最开头
    • _root_是最顶级隐式的包
  • Bean属性(@BeanPropetry), 可以自动生成规范的set/get方法

  • 权限:

    • Scala里没有public关键字, 因为默认就是public权限

    • private为私有权限, 只在类的内部和伴生对象中可用

    • protected 同类、子类可以访问, 同包无法访问

    • private[包名]增加包访问权限, 包名下的其他类也可以使用

  • 语法示例:

    • 定义变量: private var name: String = “xxx”
    • 定义方法: def main(args: Array[String]): Unit = { }
  • 构造器:

    1. 主构造器: class 类名(形参列表) { }
    2. 辅助构造器: def this(形参列表) { }

    辅助构造器必须通过主构造器来new 对象

    构造器调用其他另外的构造器时 要求 被调用构造器 必须提前声明

  • 方法参数:

    1. 未用任何修饰符修饰, 局部变量
    2. var修饰, 作为类的成员属性使用
    3. val修饰, 作为类的成员属性使用
  • 创建对象的方式:

    1. new 构造器
    2. 伴生对象的apply方法
  • 使用type关键字可以给数据数据类型起别名, 类似于C语言的typedef

  • isInstanceOf[T] 和 asInstanceOf[T]

函数式编程:

闭包: 一个函数访问到了它的外部的局部变量的值

函数柯里化: 把一个参数列表的多个参数, 变成多个参数列表

类中的函数称之方法

函数没有重载和重写的概念

函数可以作为值进行传递

函数可以作为参数进行传递

函数可以作为函数返回值返回

集合:

三大类: Seq, Set, Map

不可变集合:scala.collection.immutable(每次修改都会返回一个新的对象)
可变集合: scala.collection.mutable(对原对象进行修改)

不可变数组: Array

可变数组: ArrayBuffer

Nil是空集合的意思

元组: 即元素的组合, 数据类型可以不同; 元组比较大小时, 是从前到后依次比较

模式匹配:

类似于Java中的switch语法; 不需要使用break语句, 它自动中断case

var result = myChar match {case '+' => a + bcase '-' => a - bcase '*' => a * bcase '/' => a / bcase _ => "illegal"
}

模式守卫:

如果想要表达匹配某个范围的数据, 就需要用条件守卫

case i: Int if i >= 0 => i
case j: Int if j < 0 => -j

匹配类型:

case i: Int => "Int"
case s: String => "String hello"

匹配数组:

case Array(0, _*) => "以0开头的数组"

隐式转换:

当编译器第一次编译失败的时候, 会在当前的环境中查找能让代码编译通过的方法, 用于将类型进行转换, 实现二次编译

使用implicit关键字

异常:

def main(args: Array[String]): Unit = {try {var n= 10 / 0}catch {case ex: ArithmeticException=>{//发生算术异常println("发生了算术异常")}case ex: Exception=>{// 对异常处理println("发生了异常")}}finally {println("finally")}
}

泛型:

  1. 泛型上限为Person

    Class PersonList[T <: Person]{ }

  2. 泛型下限为Person

    Class PersonList[T >: Person]{ }

Scala基础知识(个人总结)相关推荐

  1. 23篇大数据系列(二)scala基础知识全集(史上最全,建议收藏)

    作者简介: 蓝桥签约作者.大数据&Python领域优质创作者.管理多个大数据技术群,帮助大学生就业和初级程序员解决工作难题. 我的使命与愿景:持续稳定输出,赋能中国技术社区蓬勃发展! 大数据系 ...

  2. (数据科学学习手札45)Scala基础知识

    一.简介 由于Spark主要是由Scala编写的,虽然Python和R也各自有对Spark的支撑包,但支持程度远不及Scala,所以要想更好的学习Spark,就必须熟练掌握Scala编程语言,Scal ...

  3. Scala基础知识笔记2

    1 类 1.1 定义一个简单的类 1.2 field的getter 和 setter方法 感觉成员变量定义成  var 属性名=属性值即可,  不需要定义成 val 或者 private就行, // ...

  4. 最通俗易懂的Scala初级知识

    为什么要学习scala? 什么是scala? 实战初级scala 唯一的目的就是:能够看懂Spark源码; 学习新的一门编程语言(第二门):是很快的;(类比着学,所有的编程语言都是思路相通的)只不过语 ...

  5. scala函数式编程(二) scala基础语法介绍

    上次我们介绍了函数式编程的好处,并使用scala写了一个小小的例子帮助大家理解,从这里开始我将真正开始介绍scala编程的一些内容. 这里会先重点介绍scala的一些语法.当然,这里是假设你有一些ja ...

  6. Spark基础知识解答

    Spark基础知识解答 一. Spark基础知识 1. Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架. Spark基于mapred ...

  7. 最全的spark基础知识解答

    原文:http://www.36dsj.com/archives/61155 一. Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduc ...

  8. 大数据入门培训之大数据开发基础知识学习

    在目前相信大多数IT开发人员对于人工智能+大数据并不陌生,使用的场景也越来越广,日常开发中前端同学也逐渐接触了更多与大数据相关的开发需求.因此对大数据知识也有必要进行一些学习理解,带大家来学习了解一下 ...

  9. 考试备战系列--软考--02基础知识复习

    这部分主要是计算机基础知识的概念介绍,相关系列文章如下所示. 考试备战系列--软考--01基础架构概念 考试备战系列--软考--02基础知识复习 考试备战系列--软考--03综合知识复习 考试备战系列 ...

最新文章

  1. Selenium3自动化测试——9.多窗口切换
  2. 外包网络推广公司探索出高排名网站优化的技巧!
  3. python中的模块和包
  4. C++中使用random头文件
  5. 应用DOM操作文档的一个实用例子
  6. css3小球坠落,CSS3 圆球体内的小球碰撞运动
  7. Pytorch的C++接口实践
  8. WebApiClient与Asp.net core DI的结合
  9. Android自定义事件总线,android事件总线EventBus3.0使用方法详解
  10. 山东传媒职业学院计算机专业,山东传媒职业学院计算机多媒体技术专业2017年在内蒙古文科高考录取最低分数线...
  11. spring与struts2 mvc共存web.xml简单配置
  12. 【软件工程导论】软件工程学概述
  13. 数据库系列学习(三)-数据的增、删、改
  14. 程序员之路:python3+PyQt5+pycharm桌面GUI开发
  15. poco mysql 安装_linux 下 POCO 安装
  16. 求助一维光子晶体的FDTD代码!万分感谢
  17. 工厂软件支持及测试是什么,软件工厂
  18. Win10页面缓冲池剧增占用内存解决方案
  19. 被低估的.net(中) - 广州.net俱乐部2019年纲领
  20. Sophie Zelmani 苏菲·珊曼妮

热门文章

  1. Directx11进阶教程之Tiled Based Deffered Shading
  2. ~杂记(3):los_dispatch.s和startup.s的作用分析
  3. 180度舵机使用经验
  4. 全局样式覆盖vant样式的方法
  5. python+ opencv实现摄像头实时人脸识别并实现汉字标框
  6. 设计模式 — 抽象工厂模式
  7. 项目无法识别 ?. 语法,导致报错Module parse failed: Unexpected token
  8. 手把手教你快速入门 APP 的开发
  9. 51单片机自学--交通红绿灯模拟
  10. 基于android的单词记忆英语考试系统app