01-Scala-入门:
spark大数据重要内容,是scalc编写的
Scala和Java及JVM关系图
Scala的特点:
(1)运行在 JVM 和 JavaScript 之上的语言
Scala运行在JVM上,兼容现有的Java程序,集成面向对象编程和函数式编程的各种特性,轻松实现和丰富的 Java 类库互联互通。Scala 不仅利用了 JVM 的高性能以及最优化性,Java 丰富的工具及类库生态系统也为其所用。不过 Scala 并不是只能运行在 JVM 之上。
(2)静态类型
在 Scala 语言中,静态类型(static typing)是构建健壮应用系统的一个工具。Scala 修正了 Java 类型系统中的一些缺陷,此外通过类型推演(type inference)也免除了大量的冗余代码。
(3)混合式编程范式——面向对象编程
Scala 完全支持面向对象编程(OOP)。Scala 引入特征(trait)改进了 Java 的对象模型。trait 能通过使用混合结构(mixin composition)简洁地实现新的类型。在 Scala 中,一切都是对象,即使是数值类型。
(4)混合式编程范式——函数式编程
Scala 完全支持函数式编程(FP),函数式编程已经被视为解决并发、大数据以及代码正确性问题的最佳工具。使用不可变值、被视为一等公民的函数、无副作用的函数、高阶函数以及函数集合,有助于编写出简洁、强大而又正确的代码。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型。
(5)复杂的类型系统
Scala 对 Java 类型系统进行了扩展,提供了更灵活的泛型以及一些有助于提高代码正确性的改进。通过使用类型推演,Scala 编写的代码能够和动态类型语言编写的代码一样精简。
(6)简洁、优雅、灵活的语法
使用 Scala 之后,Java 中冗长的表达式不见了,取而代之的是简洁的 Scala 方言。Scala提供了一些工具,这些工具可用于构建领域特定语言(DSL),以及对用户友好的 API接口。
比如:【三元运算符, ++ --】
(7)可扩展的架构
使用 Scala,能编写出简短的解释性脚本,并将其粘合成大型的分布式应用。
Scala 环境搭建
1)安装步骤
(1)首先确保 JDK1.8 安装成功
(2)下载对应的 Scala 安装文件 scala-2.12.11.zip
(3)解压 scala-2.12.11.zip,我这里解压到 D:\Tools
(4)配置 Scala 的环境变量
SCALA_HOME:D:\Software\ALL\scala-2.12.11
path添加%SCALA_HOME%\bin;
注意 1:解压路径不能有任何中文路径,最好不要有空格。
注意 2:环境变量要大写 SCALA_HOME
测试:
编写HelloScala.scala
object HelloScala{
def main(args: Array[String]): Unit={
println("hello aaa scala")
}
}
反编译scala,了解
import scala.reflect.ScalaSignature;
@ScalaSignature(bytes="\006\001%:Q\001B.......")
public final class HelloScala
{
public static void main(String[] paramArrayOfString)
{
HelloScala..MODULE$.main(paramArrayOfString);
}
}
idea配置,安装scala插件,创建maven项目,项目右键 Add Framework Support…,添加scala版本,创建scala包,make root变蓝,创建scala文件测试。
变量和常量(重点)
1、
var i:Int = 10 常量 val j:Int = 20 变量 注意:能用常量的地方不用变量
var常量,可修改。val变量,不可修改,但是对象的属性可修改,取决于属性是常量还是变量
2、标识符:凡自己命名的都叫标识符。
(1)以字母或者下划线开头,后接字母、数字、下划线 , _不行 _ab可以
(2)以操作符开头,且只包含操作符(+ - * / # !等) +-/#!可以 +-/#!1不可以
(3)用反引号....
包括的任意字符串,即使是 Scala 关键字(39 个)也可以,if
可以 if不可以
3、字符串,拼接,%s等占位,println(s" a g e 岁 的 {age}岁的 age岁的{name}在吃饭"),“”“保持原样输出
4、键盘输入,StdIn.readLine()、StdIn.readShort()、StdIn.readDouble()
数据类型(重点)
1)一切对象的父类都是Any,所有数据都是对象。
2)数据类型有:数值类型(AnyVal)、引用类型(AnyRef),所有类型皆为对象。
3)数据类型同java一样仍然遵守,低精度的值类型向高精度值类型,自动转换(隐式转换)
4)Scala中的StringOps是对Java中的String增强
5)Unit:对应Java中的void,用于方法返回值的位置,表示方法没有返回值。Unit是 一个数据类型,只有一个对象就是()。Void不是数据类型,只是一个关键字
6)Null是一个类型,只有一个对象就 是null。它是所有引用类型(AnyRef)的子类。
7)Nothing,是所有数据类型的子类,主要用在一个函数没有明确返回值时使用,因为这样我们可以把抛出的返回值,返回给任何的变量或者函数。
Unit 类型、Null 类型和 Nothing 类型(重点)
数据类型 | 描述 |
---|---|
Unit | 表示空值,和其他语言中 void 等同。用作不返回任何结果的方法的结果类型。Unit 只有一个实例值,写成()。 |
Null | 表示空引用, Null 类型只有一个实例值 null |
Nothing | 无返回,有错误的时候。兼容。Nothing 类型是任何其他类型的子类型。当一个函数,我们确定没有正常的返回值,可以用 Nothing 或者变量(兼容性),未理解,返回异常使用,异常又会抛出。。。。???? |
1、数值类型自动转换,从小到大,和java基本一致。强制类型转换(高转低)使用api,toInt等
运算符
本质:对象的方法的调用
val test01:Int=32
val test02:Int=32
println(test01.+(test02))
1、算术运算符+ - * \ %
2、关系运算符< > <= >= (java中是地址值和内容,scala中和equals都是内容,eq指引用地址)
3、逻辑运算符&& || !
4、赋值运算符= += -= *= /= %= <<=(左移后赋值) >>=(右移后赋值) &=(按位于后赋值c&=2 c=c&2) ^= |=
5、位运算符& | ^ ~ << >> >>>
流程控制
1、分支控制if-else if-elseif-else for (无switch,使用模式匹配)
三元运算符 java a ? b : c scala val res:Any = if (age < 18) “童年” else “成年”
注意点:1)可接收Scala 中 if else 表达式其实是有返回值的val result :String =if(){}
2、范围循环
for(i <- 1 to 3) i 表示循环的变量,<- 规定 to 。 i 将会从 1-3 循环,前后闭合
for(i <- 1 until 3) i 前闭合后开,即等同于for(i <- Range(1,10)),until对range的调用
3、循环守卫 for(i <- 1 to 3 if i != 2)(if条件可加,和写for里面一样)
4、循环步长for (i <- 1 to 10 by 2)
5、嵌套循环for(i <- 1 to 3; j <- 1 to 3)
6、遍历集合for(i <- Array/Set/List(12,32,4))
7、引入变量for(i <- 1 to 3; j = 4 - i) j和i管理,j随i变化而变化
8、循环返回值,基本不用,了解
val result01 = for(i <- 1 to 10) yield i * 2
println(result01)
9、循环翻转for(i <- 1 to 10 reverse)
10、while do…while
11、循环中断,使用throw exception或Breaks.breakable或
学习路径:https://space.bilibili.com/302417610/,如有侵权,请联系q进行删除:3623472230