Scala学习
1.1 scala概述和特点
概述:
Scala起源于2001年
Scala是Scalable Language的简写,是一门多范式语言
Spark使用Scala编写,为了更好的学习Spark,需要掌握Scala编程语言
Spark催生了Scala语言的兴起
特点:
简洁高效
同时支持面向对象和函数式编程
源于Java,同时把函数式编程思想融入Scala
Scala语言以JVM为运行环境
1.2 Scala、Java、JVM的关系
Scala源代码会被编程为Java的字节码文件(.class文件)
字节码文件运行于JVM
1.3第一个程序HelloWorld
maven pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kkb.scala.demo</groupId>
<artifactId>ScalaDemo02</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- 添加scala的依赖 -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.11.8</version>
</dependency>
</dependencies>
<build>
<finalName>WordCount</finalName>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<archive>
<manifest>
<mainClass>WordCount</mainClass>
</manifest> </archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
object HelloWorld {
def main(args: Array[String]): Unit = {
println("This is my first Scala program")
}
}
1.4输出方式
1.4.1使用"+"进行连接
object Print01 {
def main(args: Array[String]): Unit = {
//定义变量name代表姓名
var name:String = "tom"
//使用"+"号输出姓名
println("my name is :"+name)
}
}
1.4.2使用printf输出,利用%传递值
object Print02 {
def main(args: Array[String]): Unit = {
//定义变量name代表姓名
var name:String = "tom"
//使用"%"号输出姓名
printf("my name is :%s",name)
}
}
1.4.3通过$引用值
object Print03 {
def main(args: Array[String]): Unit = {
var name:String = "tom"
printf(s"my name is $name")
}
}
1.4 变量
变量是程序的基本组成单位
变量相当于内存中一个数据存储空间的表示
object Var01 {
def main(args: Array[String]): Unit = {
var name:String = "tom"
}
}
定义变量时需要指定变量的名称、类型和初始化值
在定义变量时,其类型可以省略,scala可以使用自动类型推导,自动推导出变量类型
scala属于强类型语言,变量类型一定确定,其后不可再修改
强类型:数据类型一旦确定,其后不可修改
弱类型:不强调类型的重要性,其类型由指定值类型确定
1.5 val的使用
使用val修饰的变量即Scala中的常量,其值一旦定义则不可再修改
object Val01 {
def main(args: Array[String]): Unit = {
//使用var定义变量
var name01:String = "tom"
name01 = "elen"
//name的值定以后可以再次修改
//使用val定义变量
val name02:String = "sam"
name02 = "error"//错误:name02的值不可再修改
}
}
1.6 数据类型
1.6.1 数据类型的定义
数据类型用来指定变量在内存中占用空间大小
1.6.2 Scala数据类型体系
Scala中的数据类型分为值类型(AnyVal)和引用类型(AnyRef)两大类
Scala中数类型相对复杂,用以把面向对象编程和面向函数编程进行融合
1.6.3 Unit类型、Null类型、Nothing类型说明
Unit | 表示无值,和其他语言中的void类似,用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成() |
---|---|
Null | null,Null类型只有一个实例值 |
Nothing | Nothing类型在Scala类层级的最低端;它是任何其他类型的子类型。当一个函数确定没有正常类型的返回值时,可以用Nothing指定返回类型,这样有一个好处,我们可以把返回的值(异常)赋给其他的函数或者变量(兼容性) |