Scala入门

安装包:
链接:https://pan.baidu.com/s/11rvW7mWZITsgSuJygvWMJw
提取码:zb42

官网连接:
https://www.scala-lang.org/

目录

1.1 概述

1.1.1 为什么要学习Scala

  • Scala —— Java++

    • Scala基于JVM和Java完全兼容,同样具有跨平台、可移植性好、方便的垃圾回收等特性
    • Scala比Java更加面向对象
    • Scala是一门函数式编程语言
  • Scala更适合大数据的处理

    • Scala对集合类型数据处理有非常好的支持效果
    • Spark的底层用Scala编写

1.1.2 Scala发展历史

联邦理工学院的马丁·奥德斯基(Martin Odersky)于2001年开始设计Scala。马丁·奥德斯基是编译器及编程的狂热爱好者,长时间的编程之后,希望发明一种语言,能够让写程序这样的基础工作变得高效,简单。
所以当接触到JAVA语言后,对JAVA这门便携式,运行在网络,且存在垃圾回收的语言产生了极大的兴趣,所以决定将函数式编程语言的特点融合到JAVA中,由此发明了两种语言(Pizza & Scala)。Pizza和Scala极大地推动了Java编程语言的发展。

  • JDK5.0 的泛型、增 强for循 环、自动类型转换等,都是从Pizza引入的新特性。
  • JDK8.0 的类型推断、Lambda表达式就是从Scala引入的特性。
  • JDK5.0和JDK8.0的编辑器就是马丁·奥德斯基写的,因此马丁·奥德斯基一个人的战斗力抵得上一个Java开发团队。

1.1.3 Scala和Java的关系

img

1.1.4 Scala语言特点

Scala是一门以Java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言(静态语言需要提前编译的如:Java、c、c++等,动态语言如:js)。

  1. Scala是一门多范式的编程语言,Scala支持面向对象和函数式编程。(多范式,就是多种编程方
    法的意思。有面向过程、面向对象、泛型、函数式四种程序设计方法。)
  2. Scala源代码(.scala)会被编译成Java字节码(.class),然后运行于JVM之上,并可以调用现有的Java类库,实现两种语言的无缝对接。
  3. Scala单作为一门语言来看,非常的简洁高效。

1.2 Scala环境搭建

  • 安装步骤
    1. 首先确保JDK1.8安装成功
    2. 下载对应的Scala安装文件Scala-2.12.11zip
    3. 解压Scala-2.12.11zip到指定文件夹下(该路径要配置环境变量在,故解压路径不能有中文,最好不要有空格)
    4. 配置环境变量

img

img

  • 测试

1)win+R运行cmd命令
img

2)输入Scala并按回车键,启动Scala环境。然后定义两个变量,并求和
img

1.3 安装插件

默认情况下IDEA不支持Scala的开发,需要安装插件

1)插件离线安装

(1)将插件放到Scala的安装目录下方便管理
(2)打开IDEA在左上角找到File-->Setting-->Plugins-->点击右上角设置的图标-->Installpiugin from disk...,找到插件存储的路径,最后点击ok。
img

2)插件在线安装

在File-->Setting-->Plugins搜索栏中搜索Scala点击Install-->点击OK

img

  • 注:我这里已经下载完成,没下载的红框中是Install

1.4 HelloWorld案例

1.4.1 创建IDEA项目工程

  1. 打开IDEA->点击左侧File->选择New->Project...
    img

  2. 创建一个Maven工程,并点击create

img
3. 默认下,Maven 不支持 Scala 的开发,需要引入 Scala 框架。在 scala0513 项目上,点击右键-> Add Framework Support... ->选择 Scala->点击 OK

img
4. 创建项目的源文件目录
右键点击 main 目录->New->点击 Diretory -> 写个名字(比如 scala)。
右键点击 scala 目录->Mark Directory as->选择 Sources root,观察文件夹颜色发生变化。

img
5. 在 scala 包下,创建包 com.atguigu.chapter01 包名和 Hello 类名,
右键点击 scala 目录->New->Package->输入 com.atguigu.chapter01->点击 OK。
右键点击 com.atguigu.chapter01->New->Scala Class->Kind 项选择 Object->Name 项输入
Hello。

img
6. 编写输出 Hello Scala 案例
在类中中输入 main,然后回车可以快速生成 main 方法;
在 main 方法中输入 println("hello scala")

img

说明:Java中部分代码也可以在Scala中运行

1.4.2 class和object说明

object Hello {

  /*
  程序说明:
  1、main方法名 : 从外部可以直接调用执行方法
  2、def方法名称(参数名称:参数类型[scala中泛型用中括号表示]):返回值类型 = {方法体}
  小括号表示参数列表
        参数声明方式: java -> 类型 参数名
                    Scala -> 参数名 : 类型
   3、public修饰符:scala中没有public关键字,如果不声明访问权限,那么就是公共的。
   4、static修饰符:scala中没有静态语态,所以没有static关键字
   5、void关键字:表示返回值,但是不遵循面向对象的语法
   6、scala中声明方法必须采用关键字def声明
   7、scala中方法实现赋值给方法声明,所以中间需要用等号连接
   8、scala是一个完全面向对象的语言,所以没有静态语法,为了能调用静态语法(模仿静态语法)
      采用伴生对象单例的方式调用方法
   */
  def main(args: Array[String]): Unit = {
    println("Hello World!")
  }

}

Scala完全面向对象,故Scala去掉了Java中非面向对象的元素,如static关键字,void类型
(1) static
scala无static关键字,由object实现类似静态方法的功能 (类名.方法名)。class关键字和Java中的class关键字作用相同,用来定义一个类;
(2) void
对于无返回值的函数,scala定义其返回值类型为unit类

1.4.3 Scala程序反编译

  1. 在项目的 target 目录 Hello 文件上点击右键->Open in-->Explorer->看到 object 底层生成Hello$.class 和 Hello.class 两个文件

img

img
2. 采用 Java 反编译工具 jd-gui.exe 反编译代码,将 Hello.class 拖到 jd-gui.exe 页面

// Hello源码
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world!");
    }
}
// 编译后生成Hello$.class和Hello.class两个文件

// Hello.class类

import scala.reflect.ScalaSignature;
public final class Hello
{
  public static void main(String[] paramArrayOfString)
  {
    Hello..MODULE$.main(paramArrayOfString);
  }
}
// Hello中有个main函数,调用Hello$类的一个静态对象MODULES$

// Hello$.class类
import scala.Predef.;

public final class Hello$
{
  public static  MODULE$;

  static
  {
    new ();
  }

  public void main(String[] args)
  {
    Predef..MODULE$.println("Hello World!");
  }
  private Hello$() {
    MODULE$ = this;
  }
}
// Hello$.MODULE$.对象是静态的,通过该对象调用Hello$的mian函数

1.5 关联Scala源码

在使用Scala过程中,为了搞清楚Scala底层的机制,需要看源码,下面看看图和关联和查看Scala的源码

  1. 查看源码
    按住ctrl键->点击要查看的

  2. 关联源码
    (1)将我们的源码包 scala-sources-2.12.11.tar.gz 拷贝到Scala环境的\lib 文件夹下,并解压为scala-sources-2.12.11 文件夹
    (2)点击右上角 Choose Attach Sources…->选择 Scala环境\lib\scala-sources-2.12.11,这个文件夹,就可以看到源码了
    img