Features 特性
1、基于JVM,完全兼容Java
2、同样具有跨平台,可移植,垃圾回收
3、比Java更加的面向对象【完全面向对象】
4、函数式编程
5、面向大数据处理,对集合容器框架有一定的增强
6、是Spark的底层
History 发展历史
Pizza & Scala
JDK1.5 的泛型、增强FOR、自动类型转换
JDK8.0 类型推断、Lambda表达式
Download 下载
官网下载地址:
https://www.scala-lang.org/download/
现在是分了3和2两种大版本,我看的教程都是讲2的
所以这里找到是2版本:
点进去之后拉到最下面才是安装包的下载地址(总是放在一些你看不到的位置):
Installation 安装
MSI安装版直接无脑下一步就行, 我这里下的是解压版,还需要自己手动配置环境变量
然后在Path变量里面追加一个:
%SCALA_HOME%in
保存关闭之后,在Win + R打开cmd,输入命令scala。
如果开启了SHELL模式,这样就行了
C:UsersAdministrator>scala Welcome to Scala 2.13.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_291). Type in expressions for evaluation. Or try :help. scala>
With IntelliJ IDEA 与IDEA的配置:
首先IDEA需要安装支持Scala的一个插件工具
搜索插件市场可以直接找到,下载安装
然后在创建项目的时候,对项目名称右键添加框架,选择Scala框架:
首次安装需要让IDEA知道SDK在哪,SDK就是我们下载的Scala包,这里要提供给IDEA路径位置
如果没有,IDEA也提供下载来实现
Scala独有的程序单元:
编写一个Hello.scala(选择Object创建)
object Hello { def main(args : Array[String]) : Unit = { println("Hello Scala") } }
Scala支持原生Java语法
object Hello { def main(args : Array[String]) : Unit = { println("Hello Scala") System.out.println("Hello Scala By Origin Java Syntax") } }
笔记:
/** * 关键字 object 声明一个单例对象 通过一个HelloScala的派生类创建的实例 * main 从外部可以直接调用的方法 * def 方法名称(参数名称: 参数类型):返回类型 = {方法体} * */ object HelloScala { def main(args: Array[String]): Unit = { println("hello scala") } }
反引号修饰变量名:
/** * 或者是使用反引号处理 * 这样定义允许声明任意字符 */ val `hero-name` = "asdas" // 调用的时候也需要加上反引号 println(`hero-name`)
操作符声明:
/** * 可以支持以操作符的变量声明 * 但是操作符不可以和数字字符结合声明 */ val -+%#@ = "asadas"
支持模版语法和格式化组合处理:
/** * 支持模版语法和格式化输出同时结合使用 */ val π = 3.14 print(f"the π is ${π}%2.4f")
打印结果:
the π is 3.1400
Syntax Of Scala Scala语法
声明变量
Java语法:
int val = 100;
Scala语法:
var val:Int = 100
变量和常量:
Java:
int a = 100; // 变量 final int b = 200; // 常量
Scala:
var a:Int = 120 \ 变量
val b:Int = 130 \ 常量
注意是【var】和【val】
自动类型推导:
类似JavaScript,声明只需要知道常量变量和字面值是什么即可
var num = 100
常量和引用问题:
object Hello { def main(args : Array[String]) : Unit = { val p = new P // p = null // × 常量p不能改变引用 p.name = "others value" // √ p指向的对象的其他属性允许改变 } } class P { var name : String = "none" }
多行字符串的处理:
object Hello { def main(args : Array[String]) : Unit = { var sql = """ | SELECT | A.columnName1, | A.columnName2, | B.columnName3 | FROM | tableName1 A | JOIN tableName2 ON A.columnName1 = B.columnName2 | AND associateCondition1 | AND associateCondition1 | WHERE | 1 = 1 | AND condition 1 | AND condition 2 |""".stripMargin } }
支持模板语法:
注意前面要加一个s
object Hello { def main(args : Array[String]) : Unit = { val name = "小明" val age = 29 var sql = s""" | SELECT | A.columnName1, | A.columnName2, | B.columnName3 | FROM | tableName1 A | JOIN tableName2 ON A.columnName1 = B.columnName2 | AND associateCondition1 | AND associateCondition1 | WHERE | 1 = 1 | AND condition 1 | AND condition 2 | AND name = "$name" | AND age = "$age" |""".stripMargin } }
数据类型:
Scala脱离C的影子,完全由对象支配
scala.Any 等同于 java.lang.Object,是所有数据类型的基类
子类划分为AnyVal(任意字面值)和 AnyRef(任意引用)
特殊类型:
Unit:
print(Unit)
`Unit` companion object is not allowed in source; instead, use `()` for the unit value print(Unit)
按照提示的意思,更换成空括号就能打印这个空实例了
print(())
Null:
Nothing:
2、一些不同
public 修饰符 scala中没有public关键字,如果不声明访问权限,那么就是公共的
static 修饰符 scala中没有静态语法,所以不存在static关键字
void 类型,Java中表示空,没有返回值,在scala中改用Unit来表示
方法声明需要在方法前缀def
方法的实现赋值给方法声明,所以需要等号连接
Scala是Full Complete OOP,全面向对象语言,没有静态语法
如果要调用静态语法,使用【半对象单例】来调用
读写文件操作
// 读取操作 // 调用scala.io.Source类的fromFile方法 ,入参文件路径 val bufferedSource = Source.fromFile("C:/Users/Administrator/Desktop/SqlTemplate.sql") // 逐行遍历打印内容 bufferedSource.foreach(print) // 写入文件操作 val writer = new PrintWriter(new File("C:/Users/Administrator/Desktop/ScalaWriteTest.sql")); writer.write("testing for scala write files") writer.close()
数据类型强转:
val aaa : Int = 2.5.toInt
三元运算操作:
val res = if(a) "res1" else "res2"
范围遍历:
// 范围遍历 for(i <- 1 to 100) { println(1) }