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 …...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
