目录
一、 Scala简介
Scala是由瑞士洛桑联邦理工学院的Martin Odersky教授,于2001年基于Funnel的工作开始设计的。Scala是一门类Java的多范式语言,它整合了面向对象编程和函数式编程的最佳特性。具体而言:
- Scala运行于java虚拟机发(JVM)之上,并且兼容现有的java程序,可以与java类进行工作,包括调用java方法、创建java对象、继承java类和实现java接口。
- Scala是一门纯粹的面向对象的语言。在Scala语言中,每个都是对象,每个操作都是方法调用。对象的数据类型以及行为由类和特质描述。类抽象机制的扩展有两种途径,一种途径是继承,另一种是灵活的混入(Mixin)机制,这两种途径能 避免多重继承的诸多问题。
- Scala也是一门函数式语言。在Scala中,每一个函数都是一个对象,并且和其他类型(如整数形、字符串形等)的值处于同一地位。Scala提供了轻量级的语法用以定义匿名函数,同时支持高阶函数的,允许嵌套多层函数,并支持柯里化。
二、Scala安装
a、Scala环境配置
Scala下载:Scala:https://www.scala-lang.org/download/2.12.12.html(可以根据更改版本号下载自己对应的)
环境安装:
解压安装包->复制路径->右击此电脑->高级系统设置->环境变量->新建
变量名 | SCALA_HOME |
变量值 | D:\hadoop学习资料\scala\软件\软件\scala-2.12.12\scala-2.12.12 |
->找到PATH新建:
%SCALA_HOME%\bin |
->依次确定->搜索cmd->输入
scala |
->显示:
即为成功;
b、IDEA中的Scala配置
在插件中搜索Scala,下载插件(这里我已经下载过了)
下载完成后重启即可;在插件中也可以搜索中文,可以安装中文汉化包。。。
三、Hello World案例
- 打开 IDEA->点击左侧的 文件->选择 新建->选择 项目。
- 创建一个maven工程,并点击下一步。
- (注意存储路径一定不要有中文和空格。)
- 默认下,Maven 不支持 Scala 的开发,需要引入 Scala 框架。右击项目名->添加框架支持->找到Scala配置好路径后确定。(注意:如果是第一次引入框架,Use libary 看不到,需要选择你的 Scala 安装目录,然 后工具就会自动识别,就会显示 user libary。)
- 创建项目的源文件目录
- 右键点击main目录->新建->目录->写个名字(比如Scala)
- 右键点击Scala目录->将目录标记为->源根
- 在Scala下创建一个包和类
- 右键点击 scala 目录->新建->包->输入 chapter01->点击 OK。
- 右键点击 chapter01->新建->Scala Class->Kind 项选择 Object->Name 项输入 Hello。
- 编写出hello scala案列
- 在类中输入mian,然后回车可以快速生成mian方法。
- 在mian方法中输入println("hello word")。
- 也可使用Java中的方法System.out.println("hello scala")。
运行后,观察控制台打印输出:
hello word hello scala ;
四、scala语言的注意事项
- Scala object 相当于java中的单列,object中定义的全是静态的。
- Scala 中定义变量使用的var,定义常量使用的是val,变量可变,常量不可变,类型会自己推断。注意:能用常量的地方不用变量。
- scala中每行后来的分号推断机制,不用显示写出“;”。
- 建议使用骆峰命名法(骆峰式命名法就是当变量名或函式名是由一个或多个单字连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;第二个单词的首字母大写或每一个单词的首字母都采用大写字母。)
- Scala类可以传参,有了这个参数就有了默认的构造,传参一定要指定类型。类中的属性默认有getter和setter方法。
- 类中重写构造时,构造中的第一行不执行,其他的都执行。
- scala中新建 class时,类中除了方法不执行,其他的都执行。
- 在同一个scala文件中.class名称和object名称一样时,这个类叫做对象的伴生类,这个对象叫做这个类的伴生对象。
五、Scala变量和数据类型
a、注释
Scala注释使用和Java完全一样。基本语法:
(1)单行注释:// |
(2)多行注释:/* */ |
(3)文档注释:/** * */ |
b、代码规范
(1)使用一次 tab 操作,实现缩进,默认整体向右边移动,用 shift+tab 整体向左移 |
(2)或者使用 ctrl + alt + L 来进行格式化 |
(3)运算符两边习惯性各加一个空格。比如:2 + 4 * 5。 |
(4)一行最长不超过 80 个字符,超过的请使用换行展示,尽量保持格式优雅 |
c、变量和常量
常量:在执行中不会改变的量。
在JAVA中:
变量类型 变量名称 = 初始值 | int a = 10 |
final 常量类型 常量名称 = 初始值 | final int b = 10 |
在SCALA中:
var 变量名 [: 变量类型] = 初始值 | var i:Int = 10 |
val 常量名 [: 常量类型] = 初始值 | val j:Int = 10 |
注意:
|
d、标识符的命令规范
Scala中的标识符声明,基本和Java是一致的,但是细节上会有所变化,有以下三种规则:
- 以字母或者下划线开头,后接字母、数字、下划线
- 以操作符开头,且只包含操作符(+ - * / # !等)
- 用反引号`....`包括的任意字符串,即使是 Scala 关键字(39 个)也可以
e、字符串输出
- 基本语法
- 字符串,通过+号连接
- printf 用法:字符串,通过%传值。如:%d,%c……
- 字符串模板(插值字符串):通过$获取变量值,如:
val s1 = s""" |select | name, | age |from user |where name="$name" and age=${age+2} """.stripMargin println(s1)
;
-
键盘输入
-
基本语法
StdIn.readLine()、StdIn.readShort()、StdIn.readDouble() ;
-
列:
println("请输入你的姓名:") val name = StdIn.readLine() println(name)
结果
-
f、数据类型
在Java中:
Java基本类型:char、byte、short、int、long、float、double、boolean
Java引用类型:(对象类型) 由于Java有基本类型,而且基本类型不是真正意义的对象,即使后面产生了基本类型的包装类,但是仍 然存在基本数据类型,所以Java语言并不是真正意思的面向对象。
Java基本类型的包装类:Character、Byte、Short、Integer、Long、Float、Double、Boolean
注意:Java中基本类型和引用类型没有共同的祖先。
在scala中:
- Scala中一切数据都是对象,都是Any的子类。
- Scala中数据类型分为两大类:数值类型(AnyVal)、 引用类型(AnyRef),不管是值类型还是引用类型都是 对象。
- Scala数据类型仍然遵守,低精度的值类型向高精 度值类型,自动转换(隐式转换)。
- Scala中的StringOps是对Java中的String增强。
- Unit:对应Java中的void,用于方法返回值的位置,表 示方法没有返回值。Unit是 一个数据类型,只有一个对象 就是()。Void不是数据类型,只是一个关键字。
- Null是一个类型,只 有一个对 象就 是null。它是 所有引用类型(AnyRef)的子类。
- Nothing,是所有数据类型的子类,主要用在一个函数没有明确返回值时使 用,因为这样我们可以把抛出的返回值,返回给任何的变量或者函数。
1)scala的基本数据类型
类型 | 范围 |
Byte | 8位有符号的补码整数,数值区间为 -128 到 127 |
Short | 16 位有符号补码整数。数值区间为 -32768 到 32767 |
int | 32 位有符号补码整数。数值区间为 -2147483648 到 2147483647 |
Long | 64 位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807 = 2 的(64-1)次方-1 |
Char | 16位无符号的Unicode字符 |
String | 字符串 |
Float | 32 位, IEEE 754 标准的单精度浮点数 |
Double | 64 位 IEEE 754 标准的双精度浮点数 |
Boolean | 占 1 个字节 |
字面量
字面量时直接在源码李书写常量值的一种方式。不同类型的字面量书写方法如下:
- 整数字面量
整数字面量有两种格式:十进制和十六进制。十进制开始于非零数字,十六进制开始于0x或0X前缀。需要注意的是,不论用什么进制的字面量进行初始化时,Scala的shell始终打印输出10进制的整数值。整型字面量被编译器解释为Int型,如果需要表示成Long,需要在数字后面添加大写字母的L或者小写字母的l作为后缀。 。
-
浮点类型字面量
浮点数字面量是由十进制数字、小数点和可选的E或e及指数部分组成。如歌以F或f结尾会被编译器解释为float型,否则就是Double类型。
。
-
布尔类型字面量
布尔类型只有:true和false两种字面量 。
-
字符及字符串字面量
字符字面量实在半角单引号之间的Unicode字符,还可以用反斜杠'\'表示转义字符串字面量用半角双引号包括一系列字符表示,如果需要表示多行文本则用三个引号 。
2)Unit 类型、Null 类型和 Nothing 类型
数据类型 | 描述 |
Unit | 表示无值,和其他语言中 void 等同。用作不返回任何结果的方法的结果 类型。Unit 只有一个实例值,写成()。 |
Null | null , Null 类型只有一个实例值 null |
Nothing | Nothing 类型在 Scala 的类层级最低端;它是任何其他类型的子类型。 当一个函数,我们确定没有正常的返回值,可以用 Nothing 来指定返回类 型,这样有一个好处,就是我们可以把返回的值(异常)赋给其它的函数 或者变量(兼容性) |
- Unit 类型用来标识过程,也就是没有明确返回值的函数。
- Null 类只有一个实例对象,Null 类似于 Java 中的 null 引用。Null 可以赋值给任 意引用类型(AnyRef),但是不能赋值给值类型(AnyVal)
- Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方 法不会正常返回,而且由于 Nothing 是其他任意类型的子类,他还能跟要求返回值的方法兼 容。