Scala 入门介绍和环境搭建

一、简介

  • Scala 是一门以 Java 虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言 (静态语言需要提前编译,如:Java、c、c++ 等,动态语言如:js)
  • Scala 是一门多范式的编程语言,Scala 支持面向对象和函数式编程 (多范式,即多种编程方法。有面向过程、面向对象、泛型、函数式四种程序设计方法)
  • Scala 源代码 .scala 会被编译成 Java 字节码 .class,然后运行于 JVM 之上,并可以调用现有的 Java 类库,实现两种语言的无缝对接
  • Scala 非常的简洁高效

二、Scala 和 Java 的关系

在这里插入图片描述

  • 在 Scala 代码中可以使用 Java 的类库和语法
  • Scala 和 Java 的源码文件都会被各自的编译器编译成 .class 文件运行在 JVM 上
  • Scala 的 SDK 中对 Java 的类库做了包装

三、Scala 环境搭建

以在 Windows 系统安装 Scala 2.12 版本为例

  • 官网下载地址:https://www.scala-lang.org

  • 首先要在 Windows 系统上安装 JDK 1.8 并配置环境变量

  • 进入官网下载 Scala 安装文件 scala-2.12.11.zip

  • 将安装文件解压到一个无中文和空格路径的目录 (如:D:\DevTools)

  • 配置 Scala 环境变量
    在这里插入图片描述

    SCALA_HOME=D:\DevTools\scala-2.12.11
    Path=.......;%SCALA_HOME%\bin
    
  • 打开 cmd 窗口运行 scala 命令检测安装结果

    scalaWelcome to Scala 2.12.11 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_212).
    Type in expressions for evaluation. Or try :help.scala>
    

四、HelloWorld 案例

  • 编写程序源码 HelloWorld.scala
    object HelloWorld {def main(args:Array[String]) : Unit = {println("Hello World!")  }
    } 
    
  • 源码说明
    • object:关键字,用于声明一个单例对象,通常称为伴生对象;可以实现类似 Java 的 static 静态方法的功能
    • main 方法:程序的主入口
    • scala 方法组成:def 方法名称(参数名称:参数类型):返回值类型 = {方法体}
    • Unit 类型相当于 Java 的 void 类型
    • object HelloWorld 源码文件经过编译后会生成两个字节码文件,即两个类(class)
      • HelloWorld 类:程序的主入口,也是伴生对象(单例对象)的伴生类,伴生类的静态属性和方法可以在伴生对象中定义,全局只有一份
      • HelloWorld$ 类:程序的具体执行类,也是伴生对象的所属类 ,即伴生对象是该类的属性
  • 打开 CMD 使用 scalacscala 命令编译解释运行源码文件
    scalac HelloWorld.scala
    scala HelloWorld
    
  • 编译文件解析
    • 编译源文件会生成两个字节码文件:HelloWorld.classHelloWorld$.class
    • HelloWorld.class 文件是 main 方法的入口,内部调用的是 HelloWorld$ 类中自身静态对象(构造方法私有化,静态代码块创建对象)的 main 方法
    • HelloWorld$ 类中的 main 方法调用的是 Predef$ 类的 println 方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/15471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【介绍下Pwn,什么是Pwn?】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

CSS3文字与字体

文字与字体 @font-face 用途:定义一种自定义字体,使其可以在网页中使用。通过@font-face规则,可以指定字体名称、来源(通常是URL)以及字体的各种变体(如常规、粗体、斜体等)。 @font-face {font-family: MyCustomFont;src: url(mycustomfont.woff2) format(woff2

冯喜运:5.25黄金价格和原油价格加速看跌?未来如何走势?

【黄金消息面分析】:本周黄金市场经历剧烈波动,金价创下五个半月来最糟糕的单周表现,尽管周五因美元下跌小幅回升。美联储的鹰派立场和美国经济数据强劲削弱了降息预期,导致金价承压。然而,分析师对未来金价走势看法不…

Rolla‘s homework:Image Processing with Python Final Project

对比学习Yolo 和 faster rcnn 两种目标检测 要求 Image Processing with Python Final Project Derek TanLoad several useful packages that are used in this notebook:Image Processing with Python Final Project Project Goals: • Gain an understanding of the object …

leetcode 1049.最后一块石头的重量II

思路:01背包 其实这道题我们可以转化一下,乍一看有点像区间dp,很像区间合并那种类型。 但是,后来发现,这道题的精髓在于你如何转成背包问题。我们可以把这个石头分成两堆,然后求出来这两堆的最小差值就行…

使用git生成SSH公钥,并设置SSH公钥

1、在git命令行里输入以下命令 ssh-keygen -t rsa 2、按回车,然后会看到以下字眼 Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/xxx/.ssh/id_rsa) 例: 3、继续回车,然后会看到以下字眼 Enter…

【面试干货】数据库乐观锁,悲观锁的区别,怎么实现

【面试干货】数据库乐观锁,悲观锁的区别,怎么实现 1、乐观锁,悲观锁的区别2、总结 💖The Begin💖点点关注,收藏不迷路💖 1、乐观锁,悲观锁的区别 悲观锁(Pessimistic Lo…

web前端框架设计第十课-组件

web前端框架设计第十课-组件 一.预习笔记 组件:Vue最强大的功能之一 1.局部组件注册 注意事项:template标签中只能有一个根元素 2.全局组件的注册 注意事项:组件名的大小写需要注意(实践) 3.案例(查询框…

Vivado 使用教程(个人总结)

Vivado 是 Xilinx 公司推出的一款用于 FPGA 设计的集成开发环境 (IDE),提供了从设计输入到实现、验证、调试和下载的完整流程。本文将详细介绍 Vivado 的使用方法,包括项目创建、设计输入、约束文件、综合与实现、仿真、调试、下载配置等步骤。 一、创建…

设计模式--责任链模式

责任链模式是一种行为设计模式,它允许将请求沿着处理者链进行发送。请求会沿链传递,直到某个处理者对象负责处理它。这种模式在许多应用场景中非常有用,例如在处理用户输入、过滤请求以及实现多级审核时。 应用场景 处理用户输入&#xff1…

kafka之consumer参数auto.offset.reset

Kafka的auto.offset.reset 参数是用于指定消费者在启动时如何处理偏移量(offset)的。这个参数有三个主要的取值:earliest、latest和none。 earliest: 当各分区下有已提交的offset时,从提交的offset开始消费&#xff1b…

HCIP-VLAN综合实验

一、实验拓扑 二、实验要求 1、pc1和pc3所在接口为access;属于vlan 2; PC2/PC4/PC5/PC6处于同一网段’其中PC2可以访问PC4/PC5/PC6; PC4可以访问PC6;PC5不能访问PC6; 2、PC1/PC3与PC2/PC4/PC5/PC6不在同一个网段; 3、所有PC通过DHCP获取IP…

栈和队列的应用-计算器实例

‘’‘ (11 3) 2 -5 顺序存储栈来实现 ’‘’ sqstack.h #ifndef SQSTACK_H__ #define SQSTACK_H__ #define MAXSIZE 32 typedef int datatype typedef struct node_st {datatype data[MAXSIZE]; int top;}sqstack;sqstack *st_create(void); int s…

闲话 .NET(5):.NET Core 有什么优势?

前言 .NET Core 并不是 .NET FrameWork 的升级版,它是一个为满足新一代的软件设计要求而从头重新开发的开发框架和平台,所以它没有 .NET FrameWork 的历史包袱,相对于 .NET FrameWork,它具备很多优势。 .NET Core 有哪些优势&am…

智算中心带宽漫谈 -- 开篇

隐秘的角落 带宽对高性能计算是一个永恒的话题,本质上,带宽即数据交换的速率,单位时间的传输数据越多,带宽就越高,但对高性能计算来说,对高带宽的渴求永无止境,好比宏观现实世界中的车道&#…

QT实现线程的四种方式(QThread、QRunnable和QThreadPool、QObject、QtConcurrent)

在当今高性能计算需求日益增长的背景下,多线程编程已成为提升应用性能的重要手段。Qt框架,作为一个功能全面、跨平台的C++应用程序开发工具包,为我们提供了多种多线程实现方案。本文将介绍QThread类在Qt多线程编程中的应用,以及如何通过QRunnable和QThreadPool、QObject的m…

C# GDI+ 绘制文字不同的操作系统渲染文字大小不同

一、C# GDI 绘制文字不同的操作系统渲染文字大小不同 原因:使用Font 字体的时候,没有指定字体渲染的单位。 不同系统的默认字体单位会不同。 二、解决方案: 在指定字体的时候,指定字体大小,同时也要设置字体的单位 …

sqlserver 创建表,列及表,列描述

-- 创建表 CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,EmployeeName NVARCHAR(100),EmployeeEmail NVARCHAR(100) );-- 为表添加描述 EXEC sp_addextendedproperty name NMS_Description, value N员工信息表, level0type NSchema, level0name dbo, level1type N…

springboot整合kkFileView部署,前端使用

前言: 官方文档:https://kkfileview.keking.cn/zh-cn/docs/production.html docker方式或加入星球获取发行包直接获取启动,无需以下步骤: 拉取镜像# 网络环境方便访问docker中央仓库 docker pull keking/kkfileview:4.1.0# 网…

pytest框架的代码如何用vscode进行debug

{"version": "0.2.0","configurations": [{"name": "Python: Run My Module", // 配置名称,将在调试配置下拉列表中显示"type": "debugpy", // 调试类型,这里是Python"requ…