【Scala专栏】数据类型、变量常量、类和对象

news2024/11/25 4:51:07

本文内容主要分为3节,依次讲解:Scala的数据类型有哪些? 变量常量如何使用? 类和对象如何理解? 受限于博主的大脑容量,大概是无法做到事无巨细的,不过其实也没必要那么"细",抓住主要脉络,加上大量的练习,融会贯通只不过是时间的问题。

本文索引

  • 一、数据类型
  • 二、变量和常量
  • 三、类和对象
    • 3.1 类
    • 3.2 对象
    • 3.3 伴生类和伴生对象
    • 3.4 Scala的main函数只能写在object里
    • 总结

一、数据类型

在这里插入图片描述
简记: 所有基础类型基本与Java的包装类等同,唯一有不同的Int(Scala),Integer(Java),注意这个就好

Unit, Null, Nothing, Any, AnyRef, AnyVal,这几个除了Null乍一眼会有些陌生,不要怕,上总结:

首先是层级图:
在这里插入图片描述
然后是表格:
在这里插入图片描述
补丁: 记住Any是所有类型的超类,也就是父类; Nothing是所有类型的子类; Null就是Null; None用在Map类型的value值类型里

二、变量和常量

1.定义变量: var a = 10; 或 var a:Int = 10;
2.定义常量: val a = 10; 或 val a:Int = 10;

建议: scala的理念是简洁优先,一般不会写出返回类型,不过调试代码时我的习惯还是写出来,可以使用IDE自动生成

Scala会对每个变量属性自动生成类似Java中的getter/setter方法,对每个常量生成getter方法
1.变量的getter/setter:
point为一个我们创建的对象,现在要对他的x属性赋值,以及获取他的x属性

 // setter()
 point.x_=(200)
 // getter()
 println("x = " + point.x)

2.常量的getter: 同上
建议:也可以显示写出来getter/setter方法,相当于自定义方法,可能更符合习惯

三、类和对象

谨记:Scala中类还是我们熟悉的class,但是对象object有2个概念,一个是类的引用我们可以称之为类的对象;另一个是object对象,类似Java中的静态工具类,先这么记住,为避免混淆,下文在说对象时一律指Scala中特有的object,类生成的对象后文统一使用类的引用来指代

3.1 类

# 很传统的方式, 调用时直接: val person = new Person() 
或者 val person = new Persion  // 无参构造可以不用写小括号
class Person {
  val name = "Cry";
  val age = "77";
}

# 带参数的类定义, 调用时: val person = new Person("Cry",777)
class Person(xName: String, xAge: Int) {
  val name = xName
  val age = xAge
  var gender = 'm'
}

#自定义构造方法: 
class Person(xName: String, xAge: Int) {
  val name = xName
  val age = xAge
  var gender = 'm'
  def this(yName: String, yAge: Int, yGender: Char) {
    this(yName,yAge)
    gender = yGender
  }
   def sayName(): Unit = {
    println("Hello Scala..." + this.name)
  }
}

3.2 对象

object中不可以传参,当创建一个object时,如果传入参数,那么会自动寻找object中的相应参数个数的apply方法。

object Person{
  var name = "Cry"
  def apply(name:String): Unit = {
    println("My name is " + name)
  }
}
# 调用: val person = Person("Cry777")

3.3 伴生类和伴生对象

在同一个Scala文件中, class名称和Object名称一样时, 这个类叫做这个对象的伴生类, 这个对象叫做这个类的伴生对象, 他们之间可以互相访问私有变量

3.4 Scala的main函数只能写在object里

可以理解成main函数是静态的,所以推导而出的结论

object Lesson_ClassAndObj {

  def main(args: Array[String]): Unit = {
    val person = new Person("zhangsan", 18)
    val person2 = new Person("lisi", 18, 'f')
    Person("zhaoliu")
  }
}

总结

1.Scala object相当于java中的工具类, object中定义的全是静态的, object不可以传参,对象要传参,使用apply()方法
2.Scala中定义变量用var, 自定义常量用val, 变量可变, 常量不可变. 变量和常量类型可以忽略不写,会自动推断
3.Scala中每行后面都会有分好自动推断机制, 不用显式写出";"
4.建议在Scala中命名使用驼峰命名法
5.Scala类中可以传参, 传参一定要指定类型, 有了参数就有了默认的有参构造方法, 类中的属性默认有getter/setter方法
6.类中重写构造时, 构造中第一行必须先调用默认的构造. def this(…){…}
7.Scala中档new class时, 类中除了方法不执行【除了构造方法】, 其他语句都执行
8.在同一个Scala文件中, class名称和Object名称一样时, 这个类叫做这个对象的伴生类, 这个对象叫做这个类的伴生对象, 他们之间可以互相访问私有变量

篇幅虽不长,内容也需仔细理解,我们下期再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/43070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java核心技术卷Ⅰ-第三章Java的基本程序设计结构

重点 1.数据类型 2.运算符 3.字符串 4.控制流程 5.数组 1.数据类型 整型:Java程序必须保证在所有机器上都能得到相同的运行结果,所以各种数据类型的取值范围是固定的;在C/C中,int和long类型的大小与目标平台相关 类型存储需求取值…

基于粒子群算法的线性规划问题求解matlab程序

基于粒子群算法的线性规划问题求解matlab程序 1 基本粒子群算法流程 粒子群算法基于“种群”和“进化”的概念,通过个体间的协作与竞争,实现复杂空间最优解的搜索,其流程如下: (1)初始化粒子群&#xff…

Apache Maven

Apache Maven简介安装Eclipse中安装内置的Maven插件Maven官网下载,直接安装在电脑上Maven安装目录结构bin目录boot目录conf目录lib目录Maven生命周期与命令Maven生命周期clean:清理cleanup:清理所有default:默认site:站…

做数据集增强时,训练一半出现IndexError: tuple index out of range这种错误,不知道怎么改,有神仙赐教一下嘛?

在用YOLOv5做图像训练时,首先做了数据集的增强,但是增强中出现了如下的错误 首先出现这样的警告 (A:/stdy py37-g/agu_img.py:153: DeprecationWarning: An exception was ignored while fetching the attribute __array_interface__ from an object of …

maven部署方案之分离业务包

一、思想: 通过将业务包和公共包分离,集中管理所有包,打包时只构建业务包减少项目包的大小和传输时间。 为了观测稳定性,暂通过环境区分,较为频繁的联调环境采用该方式,测试、预发、正式暂保持一体化打包…

golang实现andflow流程引擎

1、andflow引擎 andflow_js可以实现在Html端设计流程,并将设计结果保存为json模型,andflow可以用于设计业务流程、数据处理流程、工作流、控制流等一切可流程化的过程。 由于golang具备高效、跨平台、并且还能够直接编译成可执行文件,这些优…

selenium 找不到元素:Unable to find element on closed window

浏览器:IE 报错信息: Unable to find element on closed window Unable to get browser 过程:登录》跳转页面(同窗口)》点击备份按钮 已知代码没有改过,而且部署到多个机子上,很多机子没有问…

C++11(一)

🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸 文章目录一、列表初始化initializer_list二、声明1.auto2.decltype3.nullptr三、C11 STL中的变化1.array2.forward_list3.STL其他变化四、C关键字新功…

NOIP 装箱问题

题目:[NOIP2001]装箱问题 ,哈哈,我们今天来看一道很古老的题嘛,这是选自NOIP上的一道题,好了,我们一起来看看题意吧: 考虑到直接复制题目,或者截屏的方式不是很方便阅读&#xff0…

常见的网络协议

目录 一、TCP/IP协议簇 二、网络设备与五层模型对应关系: 三、常用网络协议总结(TCP/IP协议簇) 四、应用层服务协议 五、传输层协议组 TCP_UDP 六、网络层协议 IP_ICMP_ARP 七、物理层协议 MAC子层协议 一、TCP/IP协议簇 OSI七层模型…

视频怎么转换为音频文件?快来掌握这几种方式

大家平时在下载网课资源进行学习的时候,看久了眼睛也会开始疲劳,而且有些视频的画面看起来很枯燥。其实我们可以使用一些软件把视频中的音频分离出来,直接收听音频也可以学到知识,而且我们还可以处理其他的事情,是不是…

《计算机体系结构量化研究方法第六版》1.5 集成电路中的功耗和能耗趋势

1.5.1 功耗和能耗:系统视角 Q1:处理器需要的最大功耗是多少? 如果处理器的预期功耗大于电源系统能够提供的功耗(试图汲取的电流大于电源系统可以提供的电流),通常会导致电压下降而让器件无法工作。在峰值…

食谱类小程序开发,升级美食服务质量

网络时代,人们可以在网上快速获取到各种资源信息,疫情的影响让人们被封控在家里出不了门,这也就给人们提供了一个回归厨房的契机,很多人在此期间开启了自己的美食制作之旅,朋友圈也变成了一个美食分享社区,…

AlphaFold2源码解析(1)--安装使用

AlphaFold2源码解析(1)–安装使用 AlphaFold2有两种安装方式: 具体可以参考我之前写的博客: Alphafold docker 安装: 参考GitHub:https://github.com/deepmind/alphafold 一步一步安装就可以了, Alphafold 非docker 安装指南 如…

基于PHP+MySQL蚕豆酱厂管理系统的设计与实现

论文阐述了安庆市胡玉美蚕豆酱厂管理系统的设计与实现,并对该系统的需求分析及系统需要实现的设计方法作了介绍。该系统的基本功能包括用户登录,管理员信息管理,车间主任信息管理,采购员信息管理,生产计划管理&#xf…

【正点原子FPGA连载】 第十七章 HDMI彩条显示实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十七章 HDMI彩…

基于PLC控制四自由度气动式机械手设计

目 录 1 绪论 1 1.1 机械手的概述 1 1.2 机械手的发展史 1 1.3 气动技术及气动机械手的发展过程 2 1.4 机械手未来的发展趋势 3 1.5 本课题研究内容 4 1.6 课题研究的意义 4 2 机械手的总体设计方案 6 2.1 机械手的工作原理及系统组成 6 2.2 机械手基本形式的选择 7 2.3 驱动机…

VO, DTO, DO, PO四胞胎傻傻分不清楚?那快来看这篇文章!

概念 VO(View Object) 视图对象,用于展示层,作用是把某个指定页面(或组件的所有数据封装起来)。 DTO(Data Transfer Object) 数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了给EJB&#x…

第2关:创建表

为了完成本关任务,你需要掌握:如何使用HBase shell指令创建表。 Hbase shell操作 启动HBase之后,我们输入hbase shell进入到Hbase shell命令行窗口: hbase shell 在这里我们输入hbase shell会启动一个加入了一些Hbase特有命令的…

list模拟实现(15)

目录 1、简单框架 1、list.h 2、test.cpp 2、list迭代器实现 1、list.h 2、test.cpp 3、思考 1、迭代器中的拷贝构造和赋值重载是否需要自己实现?析构呢? 2、体会类型的力量 3、const迭代器实现 1、list.h 2、test.cpp 4、重载迭代器的oper…