当前位置: 首页 > news >正文

Scala(第一章Scala入门)

文章目录

    • 1.1 概述
      • 1.1.1 为什么学习Scala
      • 1.1.2 Scala发展历史
      • 1.1.3 Scala和Java关系
      • 1.1.4 Scala语言特点
    • 1.2 Scala环境搭建
    • 1.3 Scala插件安装
    • 1.4 HelloWorld案例
      • 1.4.1 创建IDEA项目工程
      • 1.4.2 class和object说明
      • 1.4.3 Scala程序反编译
    • 1.5 关联Scala源码
    • 1.6官方编程指南

1.1 概述

1.1.1 为什么学习Scala

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

1.1.2 Scala发展历史

1、马丁.奥德斯基 基于java语言的特性,想编写一门更容易上手、语法更简单的语言,于是就发明了两种语言(Pizza&Scala)。
2、JDK5.0和JDK8.0的编译器就是马丁.奥德斯基写的。
3、Pizza和Scala极大地推动了Java编程语言的发展。比如JDK5.0 的泛型、增 强for循 环、自动类型转换等,都是从Pizza引入的新特性。JDK8.0 的类型推断、Lambda表达式就是从Scala引入的特性。

1.1.3 Scala和Java关系

1、一般来说,学习Scala的人,都会Java,而Scala是基于Java的,因此我们需要将Scala和Java以及JVM之间的关系搞清楚,否则学习Scala你会蒙圈。
2、Scala和Java及JVM的关系图
在这里插入图片描述

1.1.4 Scala语言特点

Scala是一门以Java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言(静态语言需要提前编译的如:Java、c、c++等,动态语言如:js)
1、Scala是一门多范式的编程语言,Scala支持面向对象和函数式编程。(多范式,就是多多种编程方法的意思。有面向过程、面向对象、泛型、函数式四种程序设计方法。)
2、Scala源代码(.scala)会被编译成Java字节码(.class),然后运行于JVM之上,并可以调用现有的Java类库,实现两种语言的无缝对接。
3、Scala单作为一门语言来看,非常的简洁高效。
4、Scala在设计时,马丁·奥德斯基是参考了Java的设计思想,可以说Scala是源于Java,同时马丁·奥德斯基也加入了自己的思想,将函数式编程语言的特点融合到Java中,因此,对于学习过Java的同学,只要在学习Scala的过程中,搞清楚Scala和Java相同点和不同点,就可以快速的掌握Scala这门语言。

1.2 Scala环境搭建

(1)安装步骤

1、首先确保JDK1.8安装成功
2、下载对应的Scala安装文件scala-2.12.11.zip
3、解压scala-2.12.11.zip,我这里解压到D:\soft
4、配置Scala的环境变量
在这里插入图片描述
在这里插入图片描述
ps:1、解压路径不能有任何中文路径,最好不要有空格。
2、环境变量要大写SCALA_HOME

(2)测试

需求:计算两数a和b的和。
步骤:
(1)在键盘上同时按win + r 键,并在运行窗口输入cmd命令。
在这里插入图片描述

(2)输入scala并按回车键,启动scala环境。然后定义两个变量,并计算求和。
在这里插入图片描述

1.3 Scala插件安装

默认情况下IDEA不支持Scala的开发,需要安装Scala插件。
(1)插件离线安装步骤

(1)建议将该插件 scala-intellij-bin-2017.2.6.zip 文件,放到 Scala 的安装目录
D:\Tools\scala-2.12.11 下,方便管理。
(2)打开 IDEA,在左上角找到 File->在下拉菜单中点击 Setting… ->点击 Plugins->点击
右 下 角 Install plugin from disk… , 找 到 插 件 存 储 路 径
D:\Tools\scala-2.12.11\scala-intellij-bin-2017.2.6.zip,最后点击 ok。
在这里插入图片描述

(2)插件在线安装(可选)

(1)在搜索插件框里面输入 Scala->点击 Install->点击 ok->点击 apply。
在这里插入图片描述
(2)重启IDEA,再次来到Scala插件页面,已经变成installed。
在这里插入图片描述

1.4 HelloWorld案例

1.4.1 创建IDEA项目工程

(1)打开IDEA -> 点击左侧的File -> 选择New -> 选择Project…
在这里插入图片描述
(2)创建一个Maven工程,并点击next
在这里插入图片描述
(3)GroupId输入com.itcast -> ArtifactId输入Scala -> 点击next -> 点击Finish
注意:工程存储路径一定不要有中文和空格。
在这里插入图片描述
(4)指定项目工作目录空间
在这里插入图片描述
(5)默认下,Maven不支持Scala的开发,需要引入Scala框架。
在scala0513项目上,点击右键-> Add Framework Support… ->选择 Scala->点击 OK
在这里插入图片描述
注意:如果是第一次引入框架,Use libary看不到,需要选择你的Scala安装目录后工具就会自动识别,就会显示user libary。

(6)创建项目的源文件目录

1、右键点击 main 目录->New->点击 Diretory -> 写个名字(比如 scala)。
2、右键点击 scala 目录->Mark Directory as->选择 Sources root,观察文件夹颜色发生变化。
在这里插入图片描述

(7)在scala包下,创建包com.itcast.chapter01包名和Hello类名

1、右键点击 scala 目录->New->Package->输入 com.itcast.chapter01->点击 OK。
2、右键点击 com.itcast.chapter01->New->Scala Class->Kind 项选择 Object->Name 项输入Hello。
在这里插入图片描述

(8)编写输出Hello Scala案例

1、在类中中输入 main,然后回车可以快速生成 main 方法;
2、在 main 方法中输入 println(“hello scala”)
在这里插入图片描述
运行后,观察控制台打印输出:
hello scala
hello scala
说明:Java中部分代码也是可以在Scala中运行。

1.4.2 class和object说明

在这里插入图片描述
在这里插入图片描述

1.4.3 Scala程序反编译

1、在项目的target目录Hello文件上点击右键 -> Show in Explorer -> 看到object底层生成Hello$.class和Hello.class两个文件
2、采用Java反编译工具jd-gui.exe反编译代码,将Hello.class拖到jd-gui.exe页面

在这里插入图片描述
在这里插入图片描述

1.5 关联Scala源码

在使用Scala过程中,为了搞清楚Scala底层的机制,需要查看源码,下面看看如何关联和查看Scala的源码包。
1、查看源码
例如查看Array源码,按住ctrl键 -> 点击Array -> 右上角Attach Sources…
在这里插入图片描述
2、关联源码
(1)将我们的源码包 scala-sources-2.12.11.tar.gz 拷贝到 D:\Tools\scala-2.12.11\lib 文件夹下,并解压为 scala-sources-2.12.11 文件夹
(2)点击 Attach Sources…->选择 D:\Tools\scala-2.12.11\lib\scala-sources-2.12.11,这个文件夹,就可以看到源码了
在这里插入图片描述

1.6官方编程指南

1、在线查看:https://www.scala-lang.org/
2、离线查看:解压 scala-docs-2.11.8.zip,可以获得 Scala 的 API 操作。
在这里插入图片描述

下一章(第二章) 变量和数据类型

相关文章:

Scala(第一章Scala入门)

文章目录 1.1 概述 1.1.1 为什么学习Scala1.1.2 Scala发展历史1.1.3 Scala和Java关系1.1.4 Scala语言特点 1.2 Scala环境搭建1.3 Scala插件安装1.4 HelloWorld案例 1.4.1 创建IDEA项目工程1.4.2 class和object说明1.4.3 Scala程序反编译 1.5 关联Scala源码1.6官方编程指南 1.1…...

Linux tcpdump 命令详解

简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的…...

试卷擦除答案的工具,几个步骤轻松搞定

在学生的学习生活中,考试是必不可少的一部分。然而,有时候我们在做完试卷后发现自己填错了答案,或者想要更改答案,但是试卷上已经有了痕迹。这时候,我们就需要一些工具来擦除答案。以下是几个简单的步骤,让…...

vue3部署宝塔后请求接口404以及刷新页面404的问题解决方案

技术:vue3.2.13 UI框架:element-plus 2.1.1 服务器:腾讯云Centos系统宝塔面板 Nginx:1.22.1 前提:宝塔面板》网站PHP项目 已经新建了项目 1.处理vue页面刷新报错404 如上图,在PHP网站》设置》配置文件,新增如下代码…...

java.sql.Date java.util.Date

文章目录 两者关系两者在时间显示上区别 两者关系 sql包中Date是util包子类 public class Date extends java.util.Date 两者在时间显示上区别 /*** 解决sql包中日期和util包日期转换问题*/Testpublic void t3(){Date utilDate new Date();java.sql.Date sqlDate new java.…...

斗象科技-2023攻防演练必修高危漏洞集合百度网盘下载(2版本)

下载地址见最下端: 高危风险漏洞一直是企业网络安全防护的薄弱点,也成为 HW 攻防演练期间红队的重要突破口;每年HW 期间爆发了大量的高危风险漏洞成为红队突破网络边界防护的一把利器,很多企业因为这些高危漏洞而导致整个防御体系被突破甚至靶…...

分布式数据库视角下的存储过程

存储过程很好呀,那些用不好的人就是自己水平烂,不接受反驳!我就有过这样念头,但分布式数据库,更倾向少用或不用存储过程。 1 我从C/S时代走来 C/S架构时代的末期最流行开发套件是PowerBuilder和Sybase数据库&#xf…...

深度学习常用的激活函数

深度学习的核心思想是通过多层次的神经网络结构,逐步抽取和表示数据中的高级特征,从而实现对复杂数据模式的学习和识别。 神经网络结构: 深度学习使用多层次的神经网络,包括输入层、隐藏层和输出层。这些网络结构允许模型自动学习…...

深度学习之用PyTorch实现逻辑回归

0.1 学习视频源于:b站:刘二大人《PyTorch深度学习实践》 0.2 本章内容为自主学习总结内容,若有错误欢迎指正! 代码(类比线性回归): # 调用库 import torch import torch.nn.functional as F#…...

04-4_Qt 5.9 C++开发指南_时间日期与定时器

文章目录 1. 时间日期相关的类2. 源码2.1 可视化UI设计2.2 dialog.h2.3 dialog.cpp 1. 时间日期相关的类 时间日期是经常遇到的数据类型,Qt 中时间日期类型的类如下。 QTime:时间数据类型,仅表示时间,如 15:23:13。 QDate:日期数据类型&…...

7个顶级开源数据集来训练自然语言处理(NLP)和文本模型

推荐:使用 NSDT场景编辑器快速助你搭建可二次编辑的3D应用场景 NLP现在是一个令人兴奋的领域,特别是在像AutoNLP这样的用例中,但很难掌握。开始使用NLP的主要问题是缺乏适当的指导和该领域的过度广度。很容易迷失在各种论文和代码中&#xff…...

计算机网络 网络层 边界网关协议BGP

...

GitHub上受欢迎的Android UI Library

内容 抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新ViewPager图表(Chart)菜单(Menu)浮动菜单对话框空白页滑动删除手势操作RecyclerViewCardColorDrawableSpinner布局模糊效果TabBarAppBar选择器(Picker)跑马灯日历时间主题样式ImageView通知聊…...

cpm log2((cpm/10) + 1) nmf 1e6 1e5

Gene expression units explained: RPM, RPKM, FPKM, TPM, DESeq, TMM, SCnorm, GeTMM, and ComBat-Seq Read count、CPM、 RPKM、FPKM和TPM的区别 - 简书 (jianshu.com) http://zyxue.github.io/2017/06/02/understanding-TCGA-mRNA-Level3-analysis-results-files-from-fir…...

竞赛项目 深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的视频多目标跟踪实现 …...

如何避免用waveformRecord复制数组

这里描述如何使用数组字段内存管理特定。这使得数组数据能够被移入和移出waveform,aai和aao类型的值字段(BPTR)。 使用这种特定包括用另一个(用户分配的)字段替代存储在BPTR字段的指针。基本规则是: 1、BPTR以及它当前指向的内存,只能在这个…...

RocketMQ 延迟消息

RocketMQ 延迟消息 RocketMQ 消费者启动流程 什么是延迟消息 RocketMQ 延迟消息是指,生产者发送消息给消费者消息,消费者需要等待一段时间后才能消费到。 使用场景 用户下单之后,15分钟未支付,对支付账单进行提醒或者关单处理…...

Dex文件混淆(一):BlackObfuscator

Dex文件混淆(一):BlackObfuscator 首发地址:http://zhuoyue360.com/crack/105.html 文章目录 Dex文件混淆(一):BlackObfuscator1. 前言2.小试牛刀3. 参考学习1. dex2jar源码简析2. BlackObfuscator简析1. 控制流平坦化1. 控制流平坦化基本介绍 2. Dex解析…...

Linux下编译arm 32 出错(/bin/bash: arm-none-linux-gnueabi-gcc: command not found )

一、arm-none-linux-gnueabi-gcc不能再64位系统下下编译ARM的32位库的问题解决方法如下: sudo apt-get install lib32stdc6 sudo apt-get install lib32ncurses5 sudo apt-get install lib32z1 二、交叉编译工具没有写入环境变量或写错,重新写入环境变量…...

最近遇到的两个小问题总结:git问题和node问题

这两个问题都是我帮别人看问题的解决的,在windows系统上遇到的: 1、git没有配置全局变量 在使用git的时候,报’git‘不是内部或外部命令,也不是可运行的程序。然后再在其他文件下面试一下(git --version)…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

【2025年】解决Burpsuite抓不到https包的问题

环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC&#xf…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...