【Scala】Scala中的一些基本數據類型的特性 列表、元組、構造器、單例對象、伴生類、伴生對象、抽象類與特質

列表

使用List(“”,“”,“”)去聲明
sliding 和 groued表示迭代器

    val iter = List("Hadoop", "Spark", "Scala") sliding 2// sliding 和 groued 是有區別的while (iter.hasNext){println(iter.next())}for (elem <- iter){println(elem)}

可變數組

  def main(args: Array[String]): Unit = {import scala.collection.mutable.ArrayBufferval aMutableArr = ArrayBuffer(10,20,30)println(aMutableArr)aMutableArr += 40println(aMutableArr)aMutableArr.insert(2,60)println(aMutableArr)aMutableArr -= 40println(aMutableArr)}

元組

  def main(args: Array[String]): Unit = {val tuple = ("Bigdata",2022,45.0)println(tuple)println(tuple._1)println(tuple._2)}

構造器

class Counter{private var value = 0 // value用來儲存計數器的起始值private var name = "" //表示計數器的名稱private var mode = 1 // mode用來表示計數器的類型(比如,1表示部署計數器,2表示時間計數器def this(name: String){ // 第一個輔助計數器this()  // 調用主構造器this.name = name}def this(name: String,mode:Int){// 第二個輔助構造器this(name) // 調用前一個輔助構造器this.mode = mode}def increment(step: Int):Unit = {value += step}def current():Int = {value}def info():Unit = {printf("name:%s and mode is %d\n",name,mode)}}object Main {def main(args: Array[String]): Unit = {val myCounter = new Counter  // 主構造器val counter1 = new Counter("Runner")val counter2 = new Counter("Timer",2)myCounter.info()  // 顯示計數器信息myCounter.increment(1) // 設置步長println(myCounter.current)counter1.info()counter1.increment(2)println(counter1.current)counter2.info()counter2.increment(3)println(counter2.current)}
}
  • 構造器在參數中
class Counter(val name:String = "",val mode:Int = 1){private var value = 0 // value用來儲存計數器的起始值def increment(step: Int):Unit = {value += step}def current():Int = {value}def info():Unit = {printf("name:%s and mode is %d\n",name,mode)}}object Main {def main(args: Array[String]): Unit = {val myCounter = new Counter  // 主構造器val counter1 = new Counter("Runner")val counter2 = new Counter("Timer",2)myCounter.info()  // 顯示計數器信息myCounter.increment(1) // 設置步長println(myCounter.current)counter1.info()counter1.increment(2)println(counter1.current)counter2.info()counter2.increment(3)println(counter2.current)}
}

單例對象

Scala并沒有提供Java那樣的靜態方法和靜態字段,但是可以采用object關鍵字實現單例對象,具備和Java靜態方法相同的功能。

object Person{private var lastId = 0 // 身份證號def nerPersonId()={lastId += 1lastId}
}

伴生類和伴生對象

class Person{private val id = Person.newPersonId() // 調用了伴生對象中的方法private var name = ""def this(name: String){this()this.name = name}def info() {printf("the id of %s is %d.\n",name,id)}
}object Person{private var lastId = 0 // 身份證號def newPersonId()={lastId += 1lastId}
}object Main {def main(args: Array[String]): Unit = {val person1 = new Person("ziyu")val person2 = new Person("Minxing")person1.info()person2.info()}
}

apply方法和update方法

  • 我們經常會用到對象的apply方法和update方法,雖然我們表面上并沒有察覺,但是實際上,在Scala中,apply方法和update方法都會遵循相關的約定被調用
  • apply方法:用括號傳遞給變量(對象)一個或多個參數時,Scala會把它轉換成對apply方法的調用
class TestApplyclass{def apply(param:String):String = {println(param)return "hello world"}
}object Main {def main(args: Array[String]): Unit = {val myObject = new TestApplyclassprintln(myObject("param1"))}
}

這種方式生成對象 會自動調用apply方法

class Main{}class ApplyTest{def apply() = println("apply method id class is called!")def greetingOfclass():Unit = {println("Greeting method in class is called.")}
}object ApplyTest{def apply() = {println("apply method in object is called")new ApplyTest()  // 這行不會自動調用ApplyTest伴生類的apply方法}
}object Main {def main(args: Array[String]): Unit = {val a = ApplyTest()  // 這里會調用伴生對象中的apply方法a.greetingOfclass()a()  // 這里會調用半生類中的apply方法}
}
  • update方法:當對帶有括號并包括一到若干參數的對象進行賦值時,編譯器將調用對象的update方法,在調用時,是把括號里的參數和等號右邊的對象一起作為update方法的輸入參數來執行調用

在這里插入圖片描述

抽象類和繼承

abstract class Car{val carBrand: Stringdef infodef greeting() {println("welcome to my car!")}
}
class BMWCar extends Car{override val carBrand: String = "BMW"def info(){println(this.carBrand)}override def greeting(){println("welcome to BMW car!")}}

特質

特質概述

  • Java中提供了接口,允許一個類實現任意數量的接口
  • 在Scala中沒有接口的概念,二十提供了“特質(trait)”,它不僅實現了接口的功能,還具備了很多其他的特性
  • Scala的特質,是代碼重用的基本單元,可以同時擁有抽象方法和具體方法
  • Scala中,一個類只能繼承自一個超類,卻可以實現多個特質,從而重用特質中的方法和字段,實現了多重繼承
trait CarId{var id:Intdef currentId():Int   //定義了一個抽象方法
}class BYDCarId extends CarId{override var id = 10000 // BYD汽車編號從10000開始def currentId():Int = {id += 1;id}
}
class BMWCarId extends CarId{override var id = 20000 // BMW汽車編號從20000開始def currentId():Int = {id += 1;id}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212799.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212799.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212799.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

極速學習SSM之SpringMVC筆記

文章目錄 一、SpringMVC簡介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特點 二、HelloWorld1、開發環境2、創建maven工程a>添加web模塊b>打包方式&#xff1a;warc>引入依賴 3、配置web.xmla>默認配置方式b>擴展配置方式 4、創建請求控制器5、創建springMVC…

Kafka 最佳實踐:構建可靠、高性能的分布式消息系統

Apache Kafka 是一個強大的分布式消息系統&#xff0c;被廣泛應用于實時數據流處理和事件驅動架構。為了充分發揮 Kafka 的優勢&#xff0c;需要遵循一些最佳實踐&#xff0c;確保系統在高負載下穩定運行&#xff0c;數據可靠傳遞。本文將深入探討 Kafka 的一些最佳實踐&#x…

四. 基于環視Camera的BEV感知算法-環視背景介紹

目錄 前言0. 簡述1. 環視背景介紹2. 環視思路3. 主流基于環視Camera的算法詳解總結下載鏈接參考 前言 自動駕駛之心推出的《國內首個BVE感知全棧系列學習教程》&#xff0c;鏈接。記錄下個人學習筆記&#xff0c;僅供自己參考 本次課程我們來學習下課程第四章——基于環視Camer…

基于Spring+Spring boot的SpringBoot在線電子商城管理系統

SSM畢設分享 基于SpringSpring boot的SpringBoot在線電子商城管理系統 1 項目簡介 Hi&#xff0c;各位同學好&#xff0c;這里是鄭師兄&#xff01; 今天向大家分享一個畢業設計項目作品【基于SpringSpring boot的SpringBoot在線電子商城管理系統】 師兄根據實現的難度和等級…

高云GW1NSR-4C開發板M3硬核應用

1.M3硬核IP下載&#xff1a;Embedded M3 Hard Core in GW1NS-4C - 科技 - 廣東高云半導體科技股份有限公司 (gowinsemi.com.cn) 特別說明&#xff1a;IDE必須是1.9.9及以后版本&#xff0c;1.9.8會導致編譯失敗&#xff08;1.9.8下1.1.3版本IP核可用&#xff09; 以下根據官方…

SQLMap介紹

預計更新SQL注入概述 1.1 SQL注入攻擊概述 1.2 SQL注入漏洞分類 1.3 SQL注入攻擊的危害 SQLMap介紹 2.1 SQLMap簡介 2.2 SQLMap安裝與配置 2.3 SQLMap基本用法 SQLMap進階使用 3.1 SQLMap高級用法 3.2 SQLMap配置文件詳解 3.3 SQLMap插件的使用 SQL注入漏洞檢測 4.1 SQL注入…

vue3中關于echars的使用

今天介紹一個好用的插件echars&#xff0c;一個可視化插件Apache ECharts 一、使用步驟 1、安裝 npm install echarts --save 2、導入 import * as echarts from echarts 3、正式使用 echars的使用非常的簡單&#xff0c;直接點擊官網有現成的代碼的可用 代碼示例 <t…

微服務——服務保護Sentinel

雪崩問題 在單體項目里面&#xff0c;如果某一個模塊出問題會導致整個項目都有問題。 在微服務項目里面&#xff0c;單獨一個服務出問題理論上是不會影響別的服務的。 但是如果有別的業務需要調用這一個模塊的話還是會有問題。 問題產生原因和解決思路 最初那只是一個小小…

k8s之高級調度

1. CronJob 在 k8s 中周期性運行計劃任務&#xff0c;與 linux 中的 crontab 相同 注意點&#xff1a;CronJob 執行的時間是 controller-manager 的時間&#xff0c;所以一定要確保 controller-manager 時間是準確的&#xff0c;另外 cronjobapiVersion: batch/v1 kind: CronJ…

ChatGPT 應用開發(一)ChatGPT OpenAI API 免代理調用方式(通過 Cloudflare 的 AI Gateway)

前言 開發 ChatGPT 應用&#xff0c;我覺得最前置的點就是能使用 ChatGPT API 接口。首先我自己要能成功訪問&#xff0c;這沒問題&#xff0c;會魔法就可以本地調用。 那用戶如何調用到我的應用 API 呢&#xff0c;我的理解是通過用戶能訪問到的中轉服務器向 OpenAI 發起訪問…

成都工業學院Web技術基礎(WEB)實驗四:CSS3布局應用

寫在前面 1、基于2022級計算機大類實驗指導書 2、代碼僅提供參考&#xff0c;前端變化比較大&#xff0c;按照要求&#xff0c;只能做到像&#xff0c;不能做到一模一樣 3、圖片和文字僅為示例&#xff0c;需要自行替換 4、如果代碼不滿足你的要求&#xff0c;請尋求其他的…

Echarts 環形圖配置 環形半徑(radius) 修改文本位置(label) 南丁格爾圖(roseType)

數據 const data [{ name: 華為, value: 404 },{ name: 小米, value: 800 }, { name: 紅米, value: 540 }, { name: 蘋果, value: 157 }]設置南丁格爾圖 roseType: area設置標簽位置 label: {show: true,position: center // center 中間展示 outside 外側展示 inside 內側…

C語言動態內存經典筆試題分析

C語言動態內存經典筆試題分析 文章目錄 C語言動態內存經典筆試題分析1. 題目一2. 題目二3. 題目三4. 題目四 1. 題目一 void GetMemory(char *p){p (char *)malloc(100);} void Test(void){char *str NULL;GetMemory(str);strcpy(str, "hello world");printf(str)…

Qt設置類似于qq登錄頁面

頭文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QWindow> #include <QIcon> #include <QLabel> #include <QMovie> #include <QLineEdit> #include <QPushButton>QT_BEGIN_NAMESPACE namespace Ui { class…

中國移動公網IP申請過程

一、動機 由于從事互聯網行業10年&#xff0c;一直從事移動端&#xff08;前端&#xff09;開發工作&#xff0c;未曾深入了解過后端技術&#xff0c;以至于工作10年也不算進入互聯網的門。 所以準備在自己家用設備上搭建各種場景的服務器&#xff08;云服務對個人來說成本偏…

數據分析基礎之《numpy(2)—ndarray屬性》

一、ndarray的屬性 1、屬性方法 屬性名字屬性解釋ndarray.shape數組維度的元組&#xff08;形狀&#xff09;ndarray.ndim數組維數ndarray.size數組中的元素數量ndarray.itemsize一個數組元素的長度&#xff08;字節&#xff09;ndarray.dtype數組元素的類型使用方法 數組名.…

大數據技術8:StarRocks極速全場景MPP數據庫

前言&#xff1a;StarRocks原名DorisDB&#xff0c;是新一代極速全場景MPP數據庫。StarRocks 是 Apache Doris 的 Fork 版本。StarRocks 連接的多種源。一是通過這個 CDC 或者說通過這個 ETL 的方式去灌到這個 StarRocks 里面&#xff1b;二是還可以去直接的和這些老的 kafka 或…

阿里云服務器跨域問題解決方案

首先看一下原始代碼&#xff1a; Bean public CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration new CorsConfiguration();corsConfiguration.addAllowedOrigin("http://…

spark rdd和dataframe的區別,結合底層邏輯

在 Apache Spark 中&#xff0c;RDD&#xff08;Resilient Distributed Dataset&#xff09;和 DataFrame 是處理數據的兩種不同的抽象。 RDD (Resilient Distributed Dataset) 底層實現&#xff1a; RDD 是 Spark 最初的數據抽象&#xff0c;表示一個分布式的、不可變的數據集…

03-詳解Nacos注冊中心的配置步驟和功能

Nacos注冊中心 服務注冊到Nacos Nacos是SpringCloudAlibaba的組件也遵循SpringCloud中定義的服務注冊和服務發現規范,因此使用Nacos與使用Eureka對于微服務來說并沒有太大區別 主要差異就是依賴不同,服務地址不同 第一步: 在父工程cloud-demo模塊的pom.xml文件中引入Spring…