文章目录
Scala入门01-概述及基础语法
1.Scala概述
Scala是可扩展语言的缩写,是一种混合功能编程语言。Scala顺利整合面向对象和函数式语言功能的功能。Scala被编译后在java虚拟机上运行。
(1)Scala是面向对象语言
Scala是一种纯粹的现象对象语言,每一个值都是一个对象,对象的类型和行为由类和特质描述;
类通过子类化和基于灵活的基于混合组合机制进行扩展,作为多重继承的替代。
(2)Scala是函数式编程语言
Scala也是一种函数式编程语言,每一个函数都是一个值,每一个值都是一个对象,所以每一个函数都是一个对象,Scala提供了一个轻量级的语法来定义匿名函数,它支持高阶函数,它允许函数嵌套。
(3)Scala是静态类型的
Scala和其他静态类型语言(C、Pascal,Rust等)不同,它不提供冗余类型信息。
(4)Scala运行在JVM上
Scala代码被编译成由Java虚拟机(JVM)执行的字节码,这意味着Scala和Java具有通用的运行时平台。因此,可以轻松地从Java迁移到Scala,Scala编译器将Scala代码编译成Java字节码,然后可以通过scala命令执行。scala命令类似于Java命令,因为它执行Scala代码。
(5)Scala可以执行Java代码
Scala能够使用Java SDK 的所有类以及自定义Java类,或你最喜欢的Java开源项目。
(6)Scala可以做并发和同步处理
Scala允许你以有效的方式表达一般的编程模式。它减少了线路数量,并帮助程序员以类型安全的方式进行编码,它允许你以不变的方式编写代码,这使得应用并发和并行性变得容易。
2.Scala基本语法
- 对象:对象由状态和行为。一个对象是类的一个实例。
- 类:可以将类定义为描述和该类相关的行为/状态的模板/蓝图。
- 方法:一个方法基本是一种行为。一个类可以包含很多方法。将逻辑代码写入方法中,数据在方法中操纵并且执行所有的动作。
- 字段:每个对象都有其唯一的一组实例变量,称为字段,对象的状态是由分配给这些字段的值类创建。
- 闭包:闭包是一个函数,其返回值取决于在此函数之外声明的一个或多个变量的值。
- 特质:特质(Traits)封装了方法和字段定义,然后可以通过将它们混合到类中来重用他们,特质(Traits)用于通过指定支持的方法的签名来定义对象类型
2.1第一个Scala程序
package com.nike.demo01
/**
* 第一个scala程序
*/
object Test01 {
def main(args: Array[String]): Unit = {
println("Hello,World!")
}
}
Scala编程中的基本语法和编码约定
(1)Scala是区分大小写的;
(2)类名称遵从大驼峰写法,标识符和方法名遵从小驼峰写法;
2.2Scala标识符
所有Scala组件都需要名称。用于对象,类,变量和方法名的名称成为标识符,关键字不能用作标识符,标识符不区分大小写,Scala支持4种类型的标识符:
1.字母数字标识符
字母数字标识符以字母或下划线开头,后面可以有更多的字母,数字或下划线。 $字符是Scala中的保留关键字,不应在标识符中使用。
以下是合法的字母数字标识符 -
age, salary, _value, __1_value
以下是非法标识符 -
$salary, 123abc, -salary
2.运算符标识符
运算符标识符由一个或多个运算符字符组成。运算符字符是可打印的ASCII字符,如:+,:,?,~或#。
以下是合法运算符标识符 -
+ ++ ::: <?> :>
Scala编译器将在内部将操作符标识符转换成具有嵌入式 字 符 的 合 法 J a v a 标 识 符 。 例 如 , 标 识 符 : − > 将 被 内 部 表 示 为 字符的合法Java标识符。例如,标识符:->将被内部表示为 字符的合法Java标识符。例如,标识符:−>将被内部表示为colon m i n u s minus minusgreater。因此如果你需要在 Java 代码中访问:->方法,你需要使用 Scala 的内部名称 c o l o n colon colonminus$greater。
3. 字面识别符
字面量标志符为使用定义的字符串,比如
x
yield
。
你可以在之间使用任何有效的 Scala 标志符,Scala 将它们解释为一个 Scala 标志符,一个典型的使用为 Thread 的 yield 方法, 在 Scala 中你不能使用 Thread.yield()是因为 yield 为 Scala 中的关键字, 你必须使用 Thread.
yield
()来使用这个方法。
2.3Scala关键字
2.4Scala注释
Scala 类似 Java 支持单行和多行注释。多行注释可以嵌套,但必须正确嵌套,一个注释开始符号对应一个结束符号。注释在 Scala 编译中会被忽略:
/*
* 这是一个Scala程序
* 多行注释实例
*/
object HelloWord {
def main(args: Array[String]): Unit = {
//输出Hello,World!
//单行注释
println("Hello,World!")
}
}
一行中只有空格或者带有注释,Scala 会认为其是空行,会忽略它。标记可以被空格或者注释来分割。
2.5换行符
Scala是面向行的语言,语句可以用分号(;)结束或换行符。Scala 程序里,语句末尾的分号通常是可选的。如果你愿意可以输入一个,但若一行里仅 有一个语句也可不写。另一方面,如果一行里写多个语句那么分号是需要的。
package com.nike.demo02
object SwitchLine {
def main(args: Array[String]): Unit = {
val s = "Hello,World!";println(s)
}
}
2.5Scala包
Scala 使用 package 关键字定义包,在Scala将代码定义到某个包中有两种方式:
方式一:和Java一样,在文件的头定义包名
package com.nike.demo02
object SwitchLine {
def main(args: Array[String]): Unit = {
val s = "Hello,World!";println(s)
}
}
方式二:类似C#,可以在一个文件中定义多个包
package com.nike.demo02.package01{
object SwitchLine {
def main(args: Array[String]): Unit = {
val s = "Hello,World!";println(s)
}
}
object HelloWord {
def main(args: Array[String]): Unit = {
//输出Hello,World!
//单行注释
println("Hello,World!")
}
}
}
package com.nike.demo02.package01{
object MySum {
def main(args: Array[String]): Unit = {
var sum = 0;
for {arg <- args}{
sum += arg;
}
}
}
}
2.6包引用
Scala 使用 import 关键字引用包。
注意:import语句可以出现在任何地方,而不是只能在文件顶部。import的效果从开始延伸到语句块的结束。这可以大幅减少名称冲突的可能性。
//1.直接导入使用的ActionEvent包
import java.awt.event.ActionEvent
object demo_1 {
def main(args: Array[String]): Unit = {
ActionEvent //使用ActionEvent
}
}
//2.导入event下的所有包
import java.awt.event._
object demo_1 {
def main(args: Array[String]): Unit = {
ActionEvent //使用ActionEvent
}
}
3.导入awt下的所有包
import java.awt._
object demo_1 {
def main(args: Array[String]): Unit = {
event.ActionEvent //因为引入了java.awt,所以可以省去前面的部分
}
}
//如果想要引入包中的几个成员,可以使用selector(选取器):
object demo_1 {
def main(args: Array[String]): Unit = {
import java.awt.event.{ActionEvent,ComponentEvent}
ActionEvent //使用ActionEvent
ComponentEvent//使用ComponentEvent
}
}