【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.mzph.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; 以下根据官方…

vue3中关于echars的使用

今天介绍一个好用的插件echars&#xff0c;一个可视化插件Apache ECharts 一、使用步骤 1、安装 npm install echarts --save 2、导入 import * as echarts from echarts 3、正式使用 echars的使用非常的简单&#xff0c;直接点击官网有现成的代码的可用 代码示例 <t…

微服务——服务保护Sentinel

雪崩问题 在单体项目里面&#xff0c;如果某一个模块出问题会导致整个项目都有问题。 在微服务项目里面&#xff0c;单独一个服务出问题理论上是不会影响别的服务的。 但是如果有别的业务需要调用这一个模块的话还是会有问题。 问题产生原因和解决思路 最初那只是一个小小…

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…

数据分析基础之《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 或…

03-详解Nacos注册中心的配置步骤和功能

Nacos注册中心 服务注册到Nacos Nacos是SpringCloudAlibaba的组件也遵循SpringCloud中定义的服务注册和服务发现规范,因此使用Nacos与使用Eureka对于微服务来说并没有太大区别 主要差异就是依赖不同,服务地址不同 第一步: 在父工程cloud-demo模块的pom.xml文件中引入Spring…

nlkt中BigramAssocMeasures.pmi()方法的传参和使用

这个问题找遍全网没看到详细的介绍&#xff0c;最后用读代码数学公式的方法才理解怎么用。 BigramAssocMeasures.pmi 作用&#xff1a;计算x和y的互信息&#xff08;互信息是什么我就不科普啦&#xff09; 这里有个误区刚开始我以为是计算两个词之间的依赖程度&#xff0c;但…

flstudio21.3.2304高级版水果编曲音乐软件

flstudio高级版是一款适用于广泛领域的音频编辑软件。它支持多通道混音器和VST插件&#xff0c;包括数百种乐器和效果插件。它还为您提供了一个乐谱编辑器&#xff0c;需要对不同乐器的节奏进行必要的编辑。Flstudio具有许多内置电子合成声音&#xff0c;可提供更广泛的电子声音…

【Spring教程25】Spring框架实战:从零开始学习SpringMVC 之 SpringMVC入门案例总结与SpringMVC工作流程分析

目录 1.入门案例总结2. 入门案例工作流程分析2.1 启动服务器初始化过程2.2 单次请求过程 欢迎大家回到《Java教程之Spring30天快速入门》&#xff0c;本教程所有示例均基于Maven实现&#xff0c;如果您对Maven还很陌生&#xff0c;请移步本人的博文《如何在windows11下安装Mave…

Spring 面向切面编程(AOP)

一、aop介绍 &#xff08;一&#xff09;前言 一般的后端开发流程是纵向开发&#xff0c;就是controller&#xff08;控制层&#xff09;->service&#xff08;业务层&#xff09;->mapper&#xff08;数据持久层&#xff09;&#xff0c;Spring采用动态代理技术可以在…

Wireshark添加自定义协议解析

最终效果如下&#xff1a; 参考文档&#xff1a;https://mika-s.github.io/topics/ 此参考文档中7个例子教我们如何编写lua脚本去识别我们自定义的协议 安装Wireshark https://www.wireshark.org/上下载安装包安装即可。我的安装路径是D:\Install\Wireshark&#xff0c;在W…