Scala 入门介绍和环境搭建

news2024/12/26 22:36:35

一、简介

  • 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 命令检测安装结果

    scala
    
    Welcome 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.coloradmin.cn/o/1697125.html

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

相关文章

Spring中@Component注解

Component注解 在Spring框架中,Component是一个通用的注解,用于标识一个类作为Spring容器管理的组件。当Spring扫描到被Component注解的类时,会自动创建一个该类的实例并将其纳入Spring容器中管理。 使用方式 1、基本用法: Co…

MySQL:表的约束

文章目录 0.小知识,数据转化1.空属性(非空约束)2.默认值(default)3.comment(列描述)4.zerofill(显示约束)5.primary key(主键约束)6.auto_increment(自增长)7.unique(唯一键)8.foreign key (外键)9.综合表结构的设计 表…

【运维】Linux 端口管理实用指南,扫描端口占用

在 Linux 系统中,你可以使用以下几种方法来查看当前被占用的端口,并检查 7860 到 7870 之间的端口: 推荐命令: sudo lsof -i :7860-7870方法一:使用 netstat 命令 sudo netstat -tuln | grep :78[6-7][0-9]这个命令…

Java+Spring Boot +MySQL + MyBatis Plus一款数字化管理平台源码:云MES系统

JavaSpring Boot MySQL MyBatis Plus一款数字化管理平台源码:云MES系统 MES是为企业提供制造全过程的信息化产品,支持企业智能制造。MES可实现与企业的ERP、PDM等其他信息化系统进行无缝连接,也可与现场生产设备进行连接、数据采集&#xff…

牛客网刷题 | BC97 回文对称数

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 今天牛牛学到了回文…

线程池,日志

所要用到的知识点: 多线程的创建 生产消费模型, 线程锁 条件变量 代码: 线程池日志

留守儿童|基于SprinBoot+vue的留守儿童爱心网站(源码+数据库+文档)

留守儿童爱心网站 目录 基于SprinBootvue的留守儿童爱心网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍&…

gnocchi学习小结

背景 总结gnocchi 4.4版本gnocchi-metricd工作流程 入口 gnocchi.cli.metricd metricd stop after processing metric默认为0,调servicemanager run MetricdServiceManager __init__ 服务逻辑封装到MetricdServiceManager初始化中 主要由MetricProcessor, Met…

Linux自动重启系统脚本测试工具

前言 脚本允许用户指定重启的次数和重启间隔时间,并自动生成相应的定时任务。通过使用这个脚本,系统管理员可以轻松地设置重启测试。每次重启操作都会被记录下来,以便用户随时了解测试情况。 一、脚本 #!/bin/bashif [ "$1" &qu…

[数组查找]1.图解线性查找及其代码实现

线性查找 线性查找是一种在数组中查找数据的算法。与二分查找不同,即便数据没有按顺序存储,也可以应用线性查找。线性查找的操作很简单,只要在数组中从头开始依次往下查找即可。虽然存储的数据类型没有限制,但为了便于理解&#x…

【机器智能】:AI机器学习在医疗服务的广泛应用与实践案例

目录 引言一,什么是机器学习二,AI在医学影像诊断中的应用三,AI在个性化治疗方案设计中的应用四,医疗图像识别技术五,医疗语言识别技术六,结语 引言 随着人工智能(AI)和机器学习技术…

[书生·浦语大模型实战营]——第三节:茴香豆:搭建你的 RAG 智能助理

0.RAG 概述 定义:RAG(Retrieval Augmented Generation)技术,通过检索与用户输入相关的信息片段,并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如幻觉、知识过时和缺…

抖音运营_抖音推荐算法的机制

目录 一 抖音流量推荐算法机制 二 4大关键指标 三 完播率 1 黄金3秒 2 内容严谨 3 期待感 4 用户痛点 5 通俗易懂 四 转发量 1 分享需求 2 分享快乐 3 共情表达 4 正义传播 五 评论量 1 话题性 2 争议性 3 参与感 4 评论回评 六 点赞量 1 情感共鸣 2 用户喜…

Asp .Net Core 系列:集成 CAP + RabbitMQ + MySQL(含幂等性)

简介 官网:https://cap.dotnetcore.xyz/ CAP 是什么? 是一个 EventBus,同时也是一个在微服务或者 SOA 系统中解决分布式事务问题的一个框架。它有助于创建可扩展,可靠并且易于更改的微服务系统。 什么是 EventBus?…

Pytorch深度学习实践笔记6(b站刘二大人)

🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:pytorch深度学习 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就是极致重复! 《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibi…

项目管理-人力资源管理

目录 一、概述 二、人力资源计划编制 2.1 概述 2.2 层次结构图 2.3 分配任务矩阵 三、组建项目团队 3.1 概述 3.2 内部谈判 3.3 事先分派 3.4 外部招聘 3.5 虚拟团队 3.6 总结 四、项目团队建设 4.1 概述 4.2 团队发展过程 4.2.1 概述 4.2.2 形成期 4.2.3 震…

【每日力扣】84. 柱状图中最大的矩形 与 295. 数据流的中位数

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害 84. 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为…

我用LLaMA-Factory微调大模型来实现商品评论情感分析,准确率高达91.70%

大家好,我是程序锅。 最近在modelscope上闲逛的时候,在数据集板块发现有一个商品评论情感预测数据集。这个数据集源自一个比赛,它的目的是为了预测电商平台顾客的评论是好评还是差评。 数据示例如下所示(其中0代表差评&#xff…

电子电器架构 - AUTOSAR软件架构介绍

电子电器架构 - AUTOSAR软件架构介绍 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十)- JUC(6)

目录 wait , notify wait vs sleep 正确使用方法 同步保护性暂停 join的源码 Future 异步生产者/消费者模型 定义 Park & Unpark 原理 wait , notify 小故事小南需要烟才能工作,但它又要占这锁让别人无法进来。那么这个时候开一个waitSet相当于就是休…