- 第一课 尚硅谷Scala语言学习-变量和数据类型
- 第一节 Scala背景介绍
- 1.1 Scala介绍
- 1.2 Scala和 Java以及jvm的关系
- 1.3 Scala 语言的特点
- 1.4 Scala 环境搭建
- 第二节 Scala开发工具
- 2.1 idea中Scala 插件安装
- 2.2 Scala程序的执行流程
- 2.3 Scala 程序开发注意事项(重点)
- 2.4 Scala语言输出的三种方式
- 2.5. Scala 源码的查看的关联
- 第三节 变量和数据类型
- 3.1 变量和常量
- 3.2 字符串输出和键盘输入
- 3.3 数据类型
- 3.4 常用类型
- 3.4 类型转换
- 第四节 运算符
- Spark—新一代内存级大数据计算框架,是大数据的重要内容。Spark就是使用Scala编写的。因此为了更好的学习Spark, 需要掌握Scala这门语言。
- Scala 是 Scalable Language 的简写,是一门多范式(范式/编程方式[面向对象/函数式编程])的编程语言
- 联邦理工学院洛桑(EPFL)的Martin Odersky于2001年开始设计Scala。
- Spark的兴起,带动Scala语言的发展!
- 创始人马丁·奥德斯基(Martin Odersky)是编译器及编程的狂热爱好者,长时间的编程之后,希望发明一语言,能够让写程序这样的基础工作变得高效,简单。所以当接触到JAVA语言后,对JAVA这门便携式,运行在网络,且存在垃圾回收的语言产生了极大的兴趣,所以决定将函数式编程语言的特点融合到JAVA中,由此发明了两种语言(Pizza & Scala)。
- jdk5.0 的泛型,for循环增强, 自动类型转换等,都是从Pizza 引入的新特性。
- jdk8.0 的类型推断,Lambda表达式就是从scala引入的特性。
- 且现在主流JVM的javac编译器就是马丁·奥德斯基编写出来的。Jdk5.0 Jdk8.0的编译器就是马丁·奥德斯基写的,因此马丁·奥德斯基 一个人的战斗力抵得上一个Java开发团队。
- 一般来说,学Scala的人,都会Java,而Scala是基于Java的,因此我们需要将Scala和Java以及JVM之间的关系搞清楚,否则学习Scala会蒙圈。
// 1. 能够继续使用java的语法(部分)
System.out.Println("hello") [ok]
HashMap hm = new HashMap() [不ok]
//2. sacla特有语法(举例)
val tuple = (1, 20, "hello", 23.9) //元组
val map = Map(("no",10), ("no2", 40)) // map
//3. 增加功能,比如 函数式编程
//(1) 偏函数
// (2) 函数的柯里化
// (3) 高阶函数。。。
// (4) 将函数作为参数传递
//4. 从形式上看,是scala 的类,但是这个类是对java的类/接口进行包装,比如
var arr = new Array[Int](10)
// 表示我定义了一个数组,该数组存放Int, 10个元素
1.3 Scala 语言的特点
- Scala 是一门以 java 虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言。
- Scala 是一门多范式 (multi-paradigm) 的编程语言,Scala 支持面向对象和函数式编程。
- Scala 源代码(.scala)会被编译成 Java 字节码(.class),然后运行于 JVM 之上,并可以调用现有的Java 类库,实现两种语言的无缝对接。
- scala 单作为一门语言来看, 非常的简洁高效 (三元运算, ++ , --)
- Scala 在设计时,马丁·奥德斯基 是参考了 Java 的设计思想,可以说 Scala 是源于 java,同时马丁·奥德斯基 也加入了自己的思想,将函数式编程语言的特点融合到 JAVA 中, 因此,对于学习过Java 的同学,只要在学习 Scala 的过程中,搞清楚 Scala 和 java 相同点和不同点,就可以快速的掌握Scala 这门语言。、
- 快速有效掌握 Scala 的三点建议
- 学习 scala 法 的特有的语法。
- 区别 scala 和 Java 。
- 如何规范使用 scala。
- Windows下搭建Scala开发环境。首先把 jdk1.8 安装, 下载对应的 scala 安装文件 scala-2.11.8.zip
# 配置 scala 的环境变量 SCALA_HOME D:Toolsscala-2.12.11 # 测试一下, 输入 scala 的指令看看效果: scala
- Linux下搭建Scala开发环境。 在实际开发中,我们的项目是部署到 linux,因此,我们需要在 Linux 下搭建 scala 的环境。具体的步骤如下:
- 下载对应的 scala 的安装软件scala-2.11.8.tgz
- 通过远程登录工具,将安装软件上传到对应的Linux 系统/opt/software目录下
# 将安装文件解压,并且移动到 /opt/module下 tar -zxvf scala-2.11.8.tgz -C /opt/module # 配置环境变量 `vim /etc/profile` export SCALA_HOME=/opt/module/scala-2.11.8 export PATH=$PATH:$SCALA_HOME/bin source /etc/profile # 测试一下, 输入 scala 的指令看看效果: scala
- 上面打开的 scala 命令行窗口,我们称之为 REPL,是指:Read->Evaluation->Print->Loop,也称之为交互式解释器。
- 在命令行窗口中输入 scala 指令代码时,解释器会读取指令代码®并计算对应的值(E),然后将结果打印出来§,接着循环等待用户输入指令(L)。从技术上讲,这里其实并不是一个解释器,而是指令代码被快速的编译成 Java 字节码并被 JVM 加载执行。最终将执行结果输出到命令行中。
-
同Java开发一样先创建一个Maven工程。IDEA中引入全局类库。
-
默认下IDEA不支持 scala 的开发,先安装Scala插件,然后引入 scala 框架:右键项目点击-> add framework support在下图选择 scala。
-
创建项目的源文件目录:右键 main 目录->创建一个 diretory -> 写个名字(比如 scala)-> 右键 scala 目录->mark directory -> 选择 source root 即可。
package chapter01
object HelloWorld {
def main(args: Array[String]): Unit = {
println("hello world")
System.out.println("hello scala from java")
}
}
2.2 Scala程序的执行流程
package chapter01
class Student(name: String, var age: Int) {
def printInfo(): Unit = {
println(name + " " + age + " " + Student.school)
}
}
// 引入伴生对象
object Student{
val school: String = "atguigu"
def main(args: Array[String]): Unit = {
val alice = new Student("alice", 20)
val bob = new Student("bob", 23)
alice.printInfo()
bob.printInfo()
}
}
- 使用反编译工具jd-gui.exe,对编译后的文件反编译为java代码。实际上scala 程序的执行流程如下:
- object 在底层会生成两个类 Student , Student$
- StudentScala 中有个 main 函数,调用 Hello$ 类的一个静态对象 MODULES$
- 反编译后的Student.class,伴生类都在这里。
package chapter01; import scala.Predef.; import scala.reflect.ScalaSignature; @ScalaSignature(bytes=" 06 01 353A! 04b 01#!A 01 04 01B 01B 03% 21 04 03 05% 01t 05r 21" 01&


