Scala入门
Scala概述
为什么要学习Scala
java中的很多类库,在scala中都可以直接调用。Spark是新一代内存级大数据计算框架,是大数据的重要内容。
Scala与Java的关系
Scala是一门基于Jvm的语言,可以直接调用很多java的类库,或者是通过包装的java类库。
Scala语言的特点
Scala是一门以Java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言(静态语言需要提前编译的如:Java、c、c++等,动态语言如:js)。
1、Scala是一门多范式的编程语言,Scala支持面向对象和函数式编程。(多范式,就是多种编程方
法的意思。有面向过程、面向对象、泛型、函数式四种程序设计方法。)
2、Scala源代码(.scala)会被编译成Java字节码(.class),然后运行于JVM之上,并可以调用现有的Java类库,实现两种语言的无缝对接。
3、Scala单作为一门语言来看,非常的简洁高效。
4、Scala在设计时,马丁· 奥德斯基是参考了Java的设计思想,可以说Scala是源于Java,同时马丁· 奥德斯基也加入了自己的思想,将函数式编程语言的特点融合到JAVA中, 因此,对于学习过Java的同学,只要在学习Scala的过程中,搞清楚Scala和Java相同点和不同点,就可以快速的掌握Scala这门语言。
快速入门
环境准备
环境需要JDK1.8以及scala2.12.x,scala可以从官网进行下载。目录准备好之后进行环境变量的配置,环境变量如下:
# JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_112
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
# SCALA_HOME
export SCALA_HOME=/home/lxj/scala
export PATH=$PATH:$SCALA_HOME/bin
验证环境已经准备完成
# 校验JDK
java -version
## 结果如下
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mod
# 校验scala
scala
## 结果如下
Welcome to Scala 2.12.11 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_112).
Type in expressions for evaluation. Or try :help.
通过scala命令可以进入到scala的交互式界面,可以在交互式界面进行一些简单的操作如下:
那么scala是如何编译运行代码的呢?
java的编译运行代码的过程如下:
# 先编辑好一个java文件,如Test.java
# 通过javac编译该文件,生成.class文件
javac Test.java
# 通过java来运行该文件
java Test
scala的编译运行过程与java几乎完全一致:
# 先编辑好一个scala文件,如Test.scala
# 通过javac编译该文件,生成.class文件和$.class文件
scalac Test.scala
# 通过java来运行该文件
scala Test
因为scala编译出来之后会生成一个.class文件和 . c l a s s 文 件 , 其 中 .class文件,其中 .class文件,其中.class文件是辅助文件,该文件是不能运行的,是给运行.class文件时提供辅助作用的,并且通过java去运行.class也是不行的,因为只有scala的SDK才会去识别和使用$.class文件。
scala是可以直接运行javac编译出来的.class文件的。
如果非要用java去运行也是可以的:
# 引入SDK即可
java -cp %SCALA_HOME/lib/scala-library.jar; Test
IDEA运行Scala
IDEA中先保证安装了scala的插件。
创建好maven工程,然后导入scala-sdk,导入scala-sdk的话通过File->ProjectStructure->Global Libraries中添加scala-sdk,版本号选择2.12.11。
然后为创建好的maven工程设置环境,在工程名右键->Add Frameworks Support,勾上Scala,然后确认。
编写HelloWord
/**
* object: 关键字,表示声明一个单例对象(伴生对象)
* Scala完全面向对象,故Scala去掉了Java中非面向对象的元素,如static关键字
*/
object HelloWord {
/**
* main方法: 从外部可以直接调用执行的方法
* def 方法名称(参数名称: 参数类型): 返回值类型 = { 方法体 }
* Unit就是java中的void
*/
def main(args: Array[String]): Unit = {
print("hello word")
}
}
对于static变量的实现
上面可以知道scala讲staic删除了,那么如下java代码,需要实现static的功能
public class Student {
private String name;
private Integer age;
private static String school = "hello";
public Student (String name, Integer age) {
this.name = name;
this.age = age;
}
public void printInfo () {
System.out.println(this.name + "|" + this.age + "|" + Student.school);
}
public static void main (String[] args) {
Student haha = new Student("haha", 100);
Student xixi = new Student("xixi", 50);
haha.printInfo();
xixi.printInfo();
}
}
scala代码如下:
class Student (name: String, age: Int) {
def printInfo(): Unit = {
println(name + "|" + age + "|" + Student.shcool)
}
}
// 引入伴生类,两个类互为伴生,可以调用对方的私有变量
// 伴生类必须名字相同,且在同一个文件中
object Student {
val shcool: String = "hello"
// main方法必须定义在object中
def main(args: Array[String]): Unit = {
val haha = new Student("haha", 100)
val xixi = new Student("xixi", 50)
haha.printInfo()
xixi.printInfo()
}
}