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.pswp.cn/web/15471.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15471.shtml
英文地址,請注明出處:http://en.pswp.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…