scala之基础面向对象
scala 既是面向对象 也是函数式编程
从Java 发展而来,依赖JVM环境
一、 scala 在linux中运行
- scala 模式中直接编写运行

- scala文件,load执行

- scala编译程序
编译


运行
- scala

- java

二、scala 数据类型
- 基础数据类型

val 不可变变量 函数式编程
var 可变变量 面对对象编程
两种方式 :

2. 数据结构
-
数组 Array


-
多元数组

-
元组 Tuple
可以存放不同类型()

-
容器 Colection
scala.collection.mutable 可变 的容器 的包
scala.collection.immutable 不可变 的容器 的包

seq 0,1,2 索引
map 键索引
set 无序 -
list(值类型相同,些初始化赋值不可变)/queue <- linearSeq
List
var st = List(“Big”,“small”,“person”)
val otherList = “Apple”::st 一个新列表,前面加个字符串 apple
val intList = 1::2::3::Nil(从右向左执行) <->val intList = List(3,2,1) -
vector/arrayBuffer <- indexedSeq
Vector

-
Range
val r = new Range(1,5,1) ->1,2,3,4,5
1 to 5 ->1,2,3,4,5
1.to(5) -> 1,2,3,4,5
1 to 5 by 2 ->1,3,5
1 unitl 5 ->1,2,3,4(不包含5)
0.1f to 2.5f by 0.4f ->0.1,0.5,0.9,1.3,1.7.2.1 -
Set 集合
情况一:
var myset =Set(“hadoop”,“spark”) – 一个不可变集合,但是myset 是一个可变变量
mySet += “scala” 是形成新的不可变集合后,将 mySet指向 变过去,见下图

情况二:

这里 myMutableSet 是不可变变量,,但它指向的Set集合是可变的 -
Map 映射
键值对容器:键唯一,值不唯一
val myMap = Map(“XMU”->“xiamen University”,“THU”->“Tsinghua University”)
val xmu = if(myMao.contains(“XMU”)) myMap(“”) else 0 先判断存不存在键再取数,否则报错
三、面向对象编程
-
方法定义:
def 方法名(参数列表):返回结果类型={方法体}
注:- 不返回结果时 结果类型Unit,也可以省略:Unit
- 参数列表中不能用val,var来修饰
- 没参数时,()可以省略【此时调用时也不能带()】,还可以用def 方法名 {参数列表} :返回结果类型={方法体}
- 一个方法只有一个参数,可以省略圆点 采用 中缀操作符调用方法
- 结果类型也可以省略,可以判断,,只要最后一行是要返回的值就可以

-
类定义及实例化


public private protect
private:
value_= 写(value_= 相当于 java setter)
value 读(value 相当于 Java getter)

-
类构造器:
class myClass(val/var name:String)
会成为myClass的一个参数,并自动给他创建读写方法 name_= 和 name
辅助构造器 this()

运行:

-
单例对象
object,不需要实例化便可使用- 伴生对象:同一个代码文件中的同名的类与对象 互为半生关系,可调用对方的内部成员

举例:



因为new Person() 所以Person指的class,俩个类实例通用一个伴生对象,,所以结果打印 一个是1 一个是2
-
孤立对象:
仅有object,不存在伴生类举例:
对象 内部成员,,可理解其是静态的


- 伴生对象:同一个代码文件中的同名的类与对象 互为半生关系,可调用对方的内部成员
-
继承

类 类型 存储位置 实例化 AnyVal 值类型 寄存器 不能实例化 不能new Int AnyRef 引用类型 堆 可实例化 new Array Nothing 只能用来错误处理、异常处理 没有实例 Null 与Java Null 对应 Option 返回应用类型时无返回值不建议Null,建议Option Some()对象封装返回,其中有一个None对象,处理返回为空 case class Book(val name:String,val price:Double)//case class 默认给生成apply这些方法 val books= Map("hadoop"->Book("Hadoop",35.1),"spark"->Book("Spark"),55.0)

- 抽象类
内有有未实现的方法 abstract修饰
abstract class Car(val name:String){val carBrand:String //未初始化,抽象字段,必须给类型声明:Stringdef info() // 抽象方法def greeting(){println("Welcome to my car"}} }- 扩展类
注意:如果是重写 父类的 已实现的方法或者赋值字段 必须加 override关键字,否则可写可不写;只能重载val的字段,var的本身不可变不能重载
class BMWCar extends Car{override val carBrand = "BMW"def info(){printf("This is a %s Car",carBrand)}override def greeting(){println("Welcome to my BMW car")} } - 抽象类
四、scala 特性
-
apply方法 生成对象
scala 的类定义了apply方法时,类名() <-> 类名.apply()
原因:融合 面向对象编程 与 函数式编程举例说明 函数调用->类调用

举例说明 类调用->函数调用


利用这个特性可以生成 一个对象工厂:


-
update
当 对带有括号并包括一到若干参数的对象,进行赋值时,,调用update
val myStrArr = new Array[String](3) // 声明一个长度为3的字符串组,初始化null
myStrArr(0) = "BigData" //(0) 带有括号,一个参数;=“” 赋值,其实调用了伴生类的update
myStrArr.update(0,"BigData") // 等效
- unapply 提取参数
class Car(val brand:String,val price:Int){def info(){println("Car brand is "+brand+"and price is "+price)}
}
object Car{ // 伴生对象def apply(brand:String,price:Int)={println("Debug:calling apply..")new Car(brand,price)}def unapply(c:Car):Option[(String,Int)]={println("Debug:calling unapply ...")Some((c.brand,c.price))}
}
object TestUnapply{def main(args:Array[String]){ // 入口函数var Car(carbrand,carprice) = Car("BMW",800000)//Car("BMW",800000) 先调用apply生成一个Car类//var Car(carbrand,carprice)= 调用unapply 将参数提取出来 println(carbrand+":"+carprice)}
}
- 特质 【类似接口(只能由抽象方法),但是可以提供具体的方法实现】
- trait 定义

- 混入(mixin) class ,写在一个代码文件中

- 混入多个特质 ,with

- trait 定义

-
模式匹配
- switch-case <-> match
匹配值,char,int,string …

匹配某一类型


添加守卫 guard,条件表达式

- case class:多用于模式匹配
scala 自动给case类 生成一个伴生对象和多种方法


- switch-case <-> match
五、包

相关文章:
scala之基础面向对象
scala 既是面向对象 也是函数式编程 从Java 发展而来,依赖JVM环境 一、 scala 在linux中运行 scala 模式中直接编写运行 scala文件,load执行 scala编译程序 编译 运行 scala java 二、scala 数据类型 基础数据类型 val 不可变变量 函数式编程 …...
Qt5.12实战之多线程编程概念
1.为什么要使用多线程? a. 基于线程,同时处理多个任务,软件响应更灵敏 b.充分利用CPU的多核心功能增加应用运行效率 c.多线程在同一进程间使用共享通信更加高效 d.多个线程之间进行切换比多个进程之间进行切换,线程开销更少. 2.操作系统与进程关系 a. MS-DOS系统 属于单进程…...
格式化数据恢复怎么做?超实用的3种方法在这!
案例:格式化数据怎么恢复 【我的电脑前段时间中病毒了,无奈之下我只能将其格式化,但是很多重要的文件和图片之类的也一起被删除了,有什么方法可以恢复这些格式化的数据吗?非常着急!】 格式化数据恢复&…...
【Java|golang】1105. 填充书架---动态规划
给定一个数组 books ,其中 books[i] [thicknessi, heighti] 表示第 i 本书的厚度和高度。你也会得到一个整数 shelfWidth 。 按顺序 将这些书摆放到总宽度为 shelfWidth 的书架上。 先选几本书放在书架上(它们的厚度之和小于等于书架的宽度 shelfWidt…...
linux基础命令
linux基础命令 一、linux命令 熟悉账务linux命令对运维的好处是巨大的,只有熟悉了命令咱们在运维的操作上才能如鱼得水。 系统信息 arch #显示机器的处理器架构(1) uname -m #显示机器的处理器架构(2) uname -r #显示正在使用的内核版本 dmidecode -q …...
【三十天精通Vue 3】 第十八天 Vue 3的国际化详解
✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue 3 国际化概述1.1 国际化的概念1.2 国际化的作用1.3 V…...
02 - 学会提问
学会提问 一、引言 1.1 GPT简介 GPT(Generative Pre-trained Transformer)是一种基于Transformer架构的大型预训练语言模型。 凭借其强大的文本生成、理解和处理能力,GPT已在诸如自然语言处理、机器翻译、文本摘要等多个领域取得了显著的…...
Java经典的Main方法面试题
mian方法是做什么用的? main方法是Java程序的入口方法,JVM在运行的时候会首先查找main方法不用main方法如何运行一个类? 不行,没有main方法我们不能运行Java类 在Java7之前,你可以通过使用静态初始化运行Java类。但是&…...
世界大学电子电气工程TOP10,国内大学哪家强?
EE究竟是什么专业 ? 在中国,工程系中跟电相关的专业,一般都切分得非常细。有电子工程、电气工程、通信工程、信息工程、自动化、测控仪器等。但在国外,一般把这些领域都归类到 Electrical Engineering 中,也就是我们常说的EE。 …...
5.3 牛顿-科茨公式
学习目标: 理解微积分基础知识,例如导数和微分的概念。学习牛顿-科茨公式的推导过程。这个公式实际上是使用泰勒公式对被积函数进行展开,并使用微积分的基本原理进行简化得到的。学习如何使用牛顿-科茨公式进行数值积分。这通常涉及到将被积…...
全注解下的SpringIoc 续2-bean的生命周期
spring中bean的生命周期 上一个小节梳理了一下Spring Boot的依赖注入的基本知识,今天来梳理一下spring中bean的生命周期。 下面,让我们一起看看bean在IOC容器中是怎么被创建和销毁的。 bean的生命周期大致分为四个部分: #mermaid-svg-GFXNEU…...
【VQ-VAE代码实战】Neural Discrete Representation Learning
【VQ-VAE代码实战】Neural Discrete Representation Learning 0、前言1、简介2、Basic IdeaLoss3、代码Load DataVector Quantizer LayerEncoder & Decoder ArchitectureTrainPlot LossView ReconstructionsView EmbeddingReference0、前言 论文地址:基于神经网络的,离散…...
gpt3.5和gpt4区别-gpt3.5和gpt4
gpt系列 GPT系列是OpenAI公司开发的一组基于人工智能深度学习技术的自然语言处理模型。GPT代表Generative Pre-trained Transformer,即预训练生成模型。目前,GPT模型已经推出了三代(GPT-1,GPT-2,GPT-3)&am…...
java获取当前系统时间
在Java中,可以使用以下几种方法获取当前系统时间: 方法1:使用java.util.Date类 java import java.util.Date; public class Main { public static void main(String[] args) { Date date new Date(); System.out.println("当前时间&…...
pbootcms自动配图出图插件
pbootcms文章无图自动出图配图插件的优点 1、提高文章的可读性和吸引力:插入图片可以丰富文章的内容和形式,增强读者的阅读体验和吸引力,提高文章的点击率和转化率。 2、节省时间和精力:手动添加图片需要花费大量时间和精力去寻找…...
手动测试台架搭建,让你的车载测试更轻松
目录:导读 引言 1、概述 2、主要内容 3、汽车测试台架分类 4、汽车测试台架分类 5、汽车测试台架分类台架测试输人台架硬件搭建CANoe台架搭建 6、台架测试输入? 7、需求规范是功能测试用例设计来源测试结果的判断﹔包括∶客户需求(功能规范)需求分…...
分组双轴图:揭示数据中的关联性和趋势变化
简介 分组双轴图是一种数据可视化图表,指有多个(≥2)Y轴的数据图表,多为分组柱状图折线图的结合,图表显示更为直观,可以很好地展示不同指标之间的关系,帮助用户更好地理解数据,做出…...
MATLAB函数封装1:生成QT可以调用的.dll动态链接库
在进行相关算法的开发和设计过程中,MATLAB具有特别的优势,尤其是对于矩阵运算的处理,具有很多现成的方法和函数可以进行调用,同时MATLAB支持把函数封装成不同的语言方便完成算法的集成。 这里记录利用MATLAB封装成C动态链接库&…...
【算法题】2400. 恰好移动 k 步到达某一位置的方法数目
题目: 给你两个 正 整数 startPos 和 endPos 。最初,你站在 无限 数轴上位置 startPos 处。在一步移动中,你可以向左或者向右移动一个位置。 给你一个正整数 k ,返回从 startPos 出发、恰好 移动 k 步并到达 endPos 的 不同 方法…...
探索【Stable-Diffusion WEBUI】的插件:骨骼姿态(OpenPose)
文章目录 (零)前言(一)骨骼姿态(OpenPose)系列插件(二)插件:PoseX(三)插件:Depth Lib(四)插件:3D …...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
