• Scala (一) --------- Scala 入门



    一、概述

    1. 为什么学习 Scala

    • Spark—新一代内存级大数据计算框架,是大数据的重要内容。
    • Spark就是使用Scala编写的。因此为了更好的学习Spark, 需要掌握Scala这门语言。
    • Spark的兴起,带动Scala语言的发展。

    2. Scala 发展历史

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

    Pizza和Scala极大地推动了Java编程语言的发展。

    • JDK5.0 的泛型、增强for循环、自动类型转换等,都是从Pizza引入的新特性。
    • JDK8.0 的类型推断、Lambda表达式就是从Scala引入的特性。

    JDK 5.0和JDK 8.0 的编辑器就是马丁·奥德斯基写的,因此马丁·奥德斯基一个人的战斗力抵得上一个Java开发团队。

    3. Scala 和 Java 关系

    一般来说,学 Scala 的人,都会 Java,而 Scala 是基于 Java 的,因此我们需要将 Scala 和 Java 以及 JVM 之间的关系搞清楚,否则学习 Scala 你会蒙圈。

    在这里插入图片描述

    4. Scala 语言特点

    Scala是一门以 Java 虚拟机 (JVM) 为运行环境并将面向对象和函数式编程的最佳特性结合在一起的
    静态类型编程语言

    静态语言需要提前编译的如:Java、C、C++等,动态语言如:js 。

    Scala是一门多范式的编程语言,Scala支持面向对象和函数式编程。

    多范式,就是多种编程方法的意思。有面向过程、面向对象、泛型、函数式四种程序设计方法。

    Scala源代码(.scala)会被编译成Java字节码(.class),然后运行于 JVM 之上,并可以调用现有
    的 Java 类库,实现两种语言的无缝对接。

    Scala 单作为一门语言来看,非常的简洁高效。

    Scala 在设计时,马丁·奥德斯基是参考了 Java 的设计思想,可以说 Scala 是源于 Java,同时马丁·奥德斯基也加入了自己的思想,将函数式编程语言的特点融合到 Java 中, 因此,对于学习过 Java 的同学,只要在学习 Scala 的过程中,搞清楚 Scala 和 Java 相同点和不同点,就可以快速的掌握Scala这门语言。

    二、Scala 环境搭建

    安装步骤

    • 首先确保 JDK1.8 安装成功
    • 下载对应的 Scala 安装文件 scala-2.12.11.zip
    • 解压 scala-2.12.11.zip,我这里解压到 D:\Scala
    • 配置 Scala 的环境变量

    在这里插入图片描述
    在这里插入图片描述
    注意 1:解压路径不能有任何中文路径,最好不要有空格。
    注意 2:环境变量要大写 SCALA_HOME

    三、Scala 插件安装

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

    在这里插入图片描述

    四、HelloWorld 案例

    打开 IDEA->点击左侧的 Flie->选择 New->选择 Project…

    创建 Maven 项目,填好工程路径后,点击创建即可(对 maven archetype 没有要求)

    在这里插入图片描述

    默认下,Maven 不支持 Scala 的开发,需要引入 Scala 框架
    在这里插入图片描述

    注意:如果是第一次引入框架,Use libary 看不到,需要选择你的 Scala 安装目录,然后工具就会自动识别,就会显示 user libary。

    创建 scala 文件夹,并置其为 Source Root 。

    在这里插入图片描述

    创建包 com.fancy.chapter01 并在此包下创建 Scala 类 hello,注意是新建一个 Object,否则运行不了

    在这里插入图片描述

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

    在这里插入图片描述
    说明:Java 中部分代码也是可以在 Scala 中运行

    五、class 和 object 说明

    package com.fancy.chapter01
    // main 方法名
    // 小括号表示参数列表
    //      参数声明方式:java ---> 类型 参数名
    //                 scala ---> 参数名 : 类型
    // public 修饰符: scala 中没有 public 关键字, 如果不声明访问权限, 那么就是公共的
    // static 修饰符: scala中没有静态语法,所以没有static关键字
    // void关键字:表示返回值,但是不遵循面向对象语法,所以scala中没有,但是有 Unit 类型 表示没有返回值
    // scala 中 : 方法名(参数列表) : 返回值类型
    // scala 中声明方法必须采用关键字 def 声明
    // scala 方法实现复制给方法声明, 所以中间需要等号连接
    // scala 是一个完全面向对象的语言, 所以没有静态语法, 为了能调用静态语法 (模仿静态语法)
    // 采用伴生对象单例的方式调用方法
    object Hello {
      def main(args: Array[String]): Unit = {
        println("hello");
        System.out.println("hello");
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    Scala完全面向对象,故Scala去掉了Java中非面向对象的元素,如static关键字,void类型

    • static
      Scala无static关键字,由object实现类似静态方法的功能 (类名.方法名)。

    • void
      对于无返回值的函数,Scala定义其返回值类型为Unit类

    六、Scala 程序反编译

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

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

    在这里插入图片描述

    七、关联 Scala 源码

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

    A、查看源码

    例如查看 Array 源码。按住 ctrl 键->点击 Array->右上角出现 Attach Soures…

    在这里插入图片描述

    B、关联源码

    将我们的源码包 scala-sources-2.12.11.tar.gz 拷贝到 D:\Scala\scala-2.12.11\lib 文件夹下,并解压为 scala-sources-2.12.11 文件夹

    点击 Attach Sources…—>选择 D:\Scala\scala-2.12.11\lib\scala-sources-2.12.11,这个文件夹,就可以看到源码了

    在这里插入图片描述

    八、官方编程指南

    在线查看:https://www.scala-lang.org/

    离线查看:解压 scala-docs-2.11.8.zip,可以获得 Scala 的 API 操作。

    在这里插入图片描述

  • 相关阅读:
    Netbeans介绍
    【开卷数据结构 】2-3树
    创建对象在堆区如何分配内存
    工业设计|设计就是生活
    java计算机毕业设计智能推荐二手车交易网站源码+mysql数据库+系统+部署+lw文档
    Vue中 computed 和 watch
    DCMM贯标是怎么评估等级的?
    C#使用正则表达式 判断string 字符串是否包含汉字
    【操作系统】内存管理概述
    逻辑回归-为什么模型会更加侧重于学习那些数值比较大的列
  • 原文地址:https://blog.csdn.net/m0_51111980/article/details/126530712