1. Scala 概述
1.1 Scala简介
- Scala —— Java++
- Scala基于JVM,和Java完全兼容,同样具有跨平台、可移植性好、方便的垃圾回收等特性
- Scala比Java更加面向对象
- Scala是一门函数式编程语言
Scala更适合大数据的处理
- Scala对集合类型数据处理有非常好的支持
- Spark底层用Scala编写
Scala和Java的关系
1.2 Scala环境搭建
安装步骤
已安装jdk1.8
下载Scala安装文件scala-2.12.16.zip,https://scala-lang.org/download/2.12.16.html
解压到D:\scala-2.12.16
配置环境变量
添加SCALA_HOME
Path添加
测试
cmd中使用Scala计算两数之和
1.3 IDEA安装Scala插件
在插件市场搜索Scala安装
1.4 Hello World
1.4.1 创建项目
创建Scala项目
创建Maven项目
先正常创建Maven项目即可
默认下,Maven不支持Scala开发,需要引入Scala框架,在项目上点击右键->Add Framework Support->选择Scala->点击OK
创建项目的源文件目录并标记为Sources root
1.4.2 创建包和类
在scala包下创建包和类
1.4.3 编写代码
输入main快速生成main方法
1 2 3 4 5 6 7 8
| object Hello { def main(args: Array[String]): Unit = { println("hello world") System.out.println("hello world") } }
|
Java中部分代码也可以在Scala中运行
1.5 语法说明
1.5.1 Hello World语法说明
object:关键字,声明一个单例对象(伴生对象)
main方法:从外部可以直接调用执行的方法,定义在object中
定义方法:def 方法名称(参数名称: 参数类型): 返回值类型 = { 方法体 }
[]:表示泛型(与Java要区分)
Unit:表示没有返回值(类似Java中的void)
scala中没有public关键字,如果不声明访问权限,那么就是公共的
1.5.2 clss和object说明
Scala是一个完全面向对象的语言,没有静态语法,为了能模仿静态语法,采用伴生对象单例的方式调用方法
Scala无static关键字,由object实现类似静态方法的功能
class关键字和Java中相同,用来定义一个类
伴生对象与类必须同名且在一个文件中,类可以访问伴生对象所有私有属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Student(name: String, age: Int) { def printInfo(): Unit = { println(name + " " + age + " " + Student.school) }
}
object Student { val school: String = "NJU"
def main(args: Array[String]): Unit = { val alice = new Student("alice", 20) val bob = new Student("bob", 23)
alice.printInfo() bob.printInfo() } }
|
1.5.3 Scala程序反编译
Student.class
入口类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| package com.whale.scalademo;
import scala.Predef$; import scala.reflect.ScalaSignature;
@ScalaSignature(bytes = "\006\001\r3Aa\003\007\001'!A!\004\001B\001B\003%1\004\003\005'\001\t\005\t\025!\003(\021\025Q\003\001\"\001,\021\025\001\004\001\"\0012\017\025)D\002#\0017\r\025YA\002#\0018\021\025Qc\001\"\0019\021\035IdA1A\005\002iBaa\017\004!\002\023Y\002\"\002\037\007\t\003i$aB*uk\022,g\016\036\006\003\0339\t\021b]2bY\006$W-\\8\013\005=\001\022!B<iC2,'\"A\t\002\007\r|Wn\001\001\024\005\001!\002CA\013\031\033\0051\"\"A\f\002\013M\034\027\r\\1\n\005e1\"AB!osJ+g-\001\003oC6,\007C\001\017$\035\ti\022\005\005\002\037-5\tqD\003\002!%\0051AH]8pizJ!A\t\f\002\rA\023X\rZ3g\023\t!SE\001\004TiJLgn\032\006\003EY\t1!Y4f!\t)\002&\003\002*-\t\031\021J\034;\002\rqJg.\033;?)\racf\f\t\003[\001i\021\001\004\005\0065\r\001\ra\007\005\006M\r\001\raJ\001\naJLg\016^%oM>$\022A\r\t\003+MJ!\001\016\f\003\tUs\027\016^\001\b'R,H-\0328u!\tica\005\002\007)Q\ta'\001\004tG\"|w\016\\\013\0027\00591o\0315p_2\004\023\001B7bS:$\"A\r \t\013}R\001\031\001!\002\t\005\024xm\035\t\004+\005[\022B\001\"\027\005\025\t%O]1z\001") public class Student { private final String name; private final int age; public Student(String name, int age) {} public void printInfo() { Predef$.MODULE$.println((new StringBuilder(2)) .append(this.name) .append(" ") .append(this.age) .append(" ") .append(Student$.MODULE$.school()).toString()); } public static String school() { return Student$.MODULE$.school(); } public static void main(String[] paramArrayOfString) { Student$.MODULE$.main(paramArrayOfString); } }
|
Student$.class
伴生对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package com.whale.scalademo;
public final class Student$ { public static Student$ MODULE$; private final String school; public String school() { return this.school; } public void main(String[] args) { Student alice = new Student("alice", 20); Student bob = new Student("bob", 23); alice.printInfo(); bob.printInfo(); } private Student$() { MODULE$ = this; this.school = "NJU"; } }
|
1.6 关联源码
官网下载源代码文件scala-2.12.16.tar.gz
拷贝到scala-2.12.16\lib下,并解压为文件夹
- IDEA中选择Attach Sources,选择该文件夹