Scala--03--变量和数据类型

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 变量和数据类型
    • 1.注释
    • 2 变量和常量(重点)
    • 3 标识符的命名规范
    • 4 字符串输出
    • 5.IO 输入 输出
      • 键盘输入
      • 读写文件 IO
    • 6.数据类型(重点)
      • 回顾:Java数据类型
      • Scala数据类型
    • 7 整数类型(Byte、Short、Int、Long)
    • 8 浮点类型(Float、Double)
    • 9 字符类型(Char)
    • 10 布尔类型:Boolean
    • 11 Unit 类型、Null 类型和 Nothing 类型(重点)
      • Unit 类型
      • Null 类
      • Nothing 类型
  • 类型转换
    • 1 数值类型自动转换
    • 2 强制类型转换
    • 3 数值类型和 String 类型间转换


变量和数据类型

1.注释

Scala 注释使用和 Java 完全一样。

  • 注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。

在这里插入图片描述

package com.atguigu.chapter02
object TestNotes {def main(args: Array[String]): Unit = {//(1)单行注释://println("dalang")//(2)多行注释:/* *//*println("dalang")println("jinlian")*///(3)文档注释:/**//*//*//*** println("qingge")println("qingge")println("qingge")*/}
}

2) 代码规范
(1)使用一次 tab 操作,实现缩进,默认整体向右边移动,用 shift+tab 整体向左移
(2)或者使用 ctrl + alt + L 来进行格式化
(3)运算符两边习惯性各加一个空格。比如:2 + 4 * 5。
(4)一行最长不超过 80 个字符,超过的请使用换行展示,尽量保持格式优雅

2 变量和常量(重点)

常量:在程序执行的过程中,其值不会被改变的变量

在这里插入图片描述
2)案例实操

  1. 声明变量时,类型可以省略,编译器自动推导,即类型推导
  2. 类型确定后,就不能修改,说明 Scala 是强数据类型语言。
  3. 变量声明时,必须要有初始值
  4. 在声明/定义一个变量时,可以使用 var 或者 val 来修饰,var 修饰的变量可改变,val 修饰的变量不可改。
  5. var 修饰的对象引用可以改变,val 修饰的对象则不可改变,但对象的状态(值)
    却是可以改变的。(比如:自定义对象、数组、集合等等)

在这里插入图片描述

package chapter02import chapter01.Studentobject Test02_Variable {def main(args: Array[String]): Unit = {// 声明一个变量的通用语法var a: Int = 10//(1)声明变量时,类型可以省略,编译器自动推导,即类型推导var a1 = 10val b1 = 23//(2)类型确定后,就不能修改,说明Scala是强数据类型语言。var a2 = 15    // a2类型为Int
//    a2 = "hello"//(3)变量声明时,必须要有初始值
//    var a3: Int//(4)在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可改变,val修饰的变量不可改。a1 = 12
//    b1 = 25var alice = new Student("alice", 20)alice = new Student("Alice", 20)alice = nullval bob = new Student("bob", 23)bob.age = 24bob.printInfo()
//    bob = new Student("bob", 24)}
}

3 标识符的命名规范

Scala 对各种变量、方法、函数等命名时使用的字符序列称为标识符。即:凡是自己可以起名字的地方都叫标识符。

1)命名规则
Scala 中的标识符声明,基本和 Java 是一致的,但是细节上会有所变化,有以下三种规则:

在这里插入图片描述

object Test03_Identifier {def main(args: Array[String]): Unit = {//(1)以字母或者下划线开头,后接字母、数字、下划线val hello: String = ""var Hello123 = ""val _abc = 123//    val h-b = ""
//    val 123abc = 234//(2)以操作符开头,且只包含操作符(+ - * / # !等)val -+/% = "hello"println(-+/%)//(3)用反引号`....`包括的任意字符串,即使是Scala关键字(39个)也可以val `if` = "if"println(`if`)}
}

4 字符串输出

1)基本语法
(1)字符串,通过+号连接
(2)printf 用法:字符串,通过%传值。
(3)字符串模板(插值字符串):通过$获取变量值

package chapter02object Test04_String {def main(args: Array[String]): Unit = {//(1)字符串,通过+号连接val name: String = "alice"val age: Int = 18println(age + "岁的" + name + "在尚硅谷学习")// *用于将一个字符串复制多次并拼接println(name * 3)//(2)printf用法:字符串,通过%传值。printf("%d岁的%s在尚硅谷学习", age, name)println()//(3)字符串模板(插值字符串):通过$获取变量值println(s"${age}岁的${name}在尚硅谷学习")val num: Double = 2.3456println(f"The num is ${num}%2.2f")    // 格式化模板字符串println(raw"The num is ${num}%2.2f")// 三引号表示字符串,保持多行字符串的原格式输出val sql = s"""|select *|from|  student|where|  name = ${name}|and|  age > ${age}|""".stripMarginprintln(sql)}
}

在这里插入图片描述

5.IO 输入 输出

键盘输入

在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。

1)基本语法

  • StdIn.readLine()
  • StdIn.readShort()
  • StdIn.readDouble()
package chapter02import scala.io.StdInobject Test05_StdIn {def main(args: Array[String]): Unit = {// 输入信息println("请输入您的大名:")val name: String = StdIn.readLine()println("请输入您的芳龄:")val age: Int = StdIn.readInt()// 控制台打印输出println(s"欢迎${age}岁的${name}来到尚硅谷学习")}
}

在这里插入图片描述

读写文件 IO

  1. 从文件中读取数据
    在这里插入图片描述
object Test06_FileIO {def main(args: Array[String]): Unit = {// 1. 从文件中读取数据Source.fromFile("src/main/resources/test.txt").foreach(print)// 2. 将数据写入文件val writer = new PrintWriter(new File("src/main/resources/output.txt"))writer.write("hello scala from java writer")writer.close()}
}

在这里插入图片描述

  1. 将数据写入文件 (引入java的io流
import java.io.{File, PrintWriter}
import scala.io.Sourceobject Test06_FileIO {def main(args: Array[String]): Unit = {// 1. 从文件中读取数据Source.fromFile("src/main/resources/test.txt").foreach(print)// 2. 将数据写入文件val writer = new PrintWriter(new File("src/main/resources/output.txt"))writer.write("hello scala from java writer")writer.close()}
}

在这里插入图片描述

6.数据类型(重点)

回顾:Java数据类型

在这里插入图片描述

Scala数据类型

在这里插入图片描述

7 整数类型(Byte、Short、Int、Long)

Scala 的整数类型就是用于存放整数值的,比如 12,30,3456 等等

1)整型分类
在这里插入图片描述
2)案例实操

  1. Scala 各整数类型有固定的表示范围和字段长度,不受具体操作的影响,以保证Scala 程序的可移植性
  2. Scala 的整型,默认为 Int 型,声明 Long 型,须后加‘l’或‘L’
  3. Scala 程序中变量常声明为 Int 型,除非不足以表示大数,才使用 Long

import chapter01.Studentobject Test07_DataType {def main(args: Array[String]): Unit = {// 1. 整数类型val a1: Byte = 127val a2: Byte = -128//    val a2: Byte = 128    // errorval a3 = 12    // 整数默认类型为Intval a4: Long = 1324135436436L    // 长整型数值定义val b1: Byte = 10val b2: Byte = 10 + 20println(b2)//    val b3: Byte = b1 + 20val b3: Byte = (b1 + 20).toByteprintln(b3)}
}

8 浮点类型(Float、Double)

Scala 的浮点类型可以表示一个小数,比如 123.4f,7.8,0.12 等等

在这里插入图片描述

object Test01 {def main(args: Array[String]): Unit = {// 建议,在开发中需要高精度小数时,请选择 Doublevar n7 = 2.2345678912fvar n8 = 2.2345678912println("n7=" + n7)println("n8=" + n8)}
}

在这里插入图片描述

9 字符类型(Char)

在这里插入图片描述

1)基本说明
字符类型可以表示单个字符,字符类型是 Char。

2)案例实操
(1)字符常量是用单引号 ’ ’ 括起来的单个字符。
(2)\t :一个制表位,实现对齐的功能
(3)\n :换行符
(4)\ :表示 \
(5)" :表示"

object Test01 {def main(args: Array[String]): Unit = {//(1)字符常量是用单引号 ' ' 括起来的单个字符。var c1: Char = 'a'println("c1=" + c1)//注意:这里涉及自动类型提升,其实编译器可以自定判断是否超出范围,//不过 idea 提示报错var c2:Char = 'a' + 1println(c2)//(2)\t :一个制表位,实现对齐的功能println("姓名\t 年龄")//(3)\n :换行符println("西门庆\n 潘金莲")//(4)\\ :表示\println("c:\\岛国\\avi")//(5)\" :表示"println("同学们都说:\"大海哥最帅\"")}
}

在这里插入图片描述

10 布尔类型:Boolean

1)基本说明
(1)布尔类型也叫 Boolean 类型,Booolean 类型数据只允许取值 true 和 false
(2)boolean 类型占 1 个字节。

object Test01 {def main(args: Array[String]): Unit = {var isResult: Boolean = falsevar isResult2: Boolean = trueprintln(isResult)println(isResult2)}
}

在这里插入图片描述

11 Unit 类型、Null 类型和 Nothing 类型(重点)

1)基本说明
在这里插入图片描述

Unit 类型

  • Unit 类型用来标识过程,也就是没有明确返回值的函数。由此可见,Unit 类似于 Java 里的 void。Unit 只有一个实例——( ),这个实例也没有实质意义
object Test01 {def main(args: Array[String]): Unit = {def sayOk: Unit = { // unit 表示没有返回值,即 voidprintln("sayOk 被调用执行")}println(sayOk)}
}

在这里插入图片描述

Null 类

  • Null 类只有一个实例对象,Null 类似于 Java 中的 null 引用。
  • Null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal)
object Test01 {def main(args: Array[String]): Unit = {//null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型 (AnyVal)var cat = new Cat();cat = null // 正确println("cat:" + cat)}
}class Cat {
}

在这里插入图片描述

Null 不能赋值给值类型(AnyVal)

在这里插入图片描述

Nothing 类型

  • Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方 法不会正常返回
  • 而且由于 Nothing 是其他任意类型的子类,他还能跟要求返回值的方法兼容
    在这里插入图片描述

Nothing 应用场景

object Test01 {def main(args: Array[String]): Unit = {def m1(n: Int): Int = {if (n == 0)throw new NullPointerExceptionelsereturn n}println(m1(5))println(m1(-2))println(m1(0))}
}

在这里插入图片描述

类型转换

1 数值类型自动转换

  • 当 Scala程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型,这个就是自动类型转换(隐式转换)。数据类型按精度(容量)大小排序为:

在这里插入图片描述

  1. 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
  2. 把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。
  3. (byte,short)和 char 之间不会相互自动转换。
  4. byte,short,char 他们三者可以计算,在计算时首先转换为 int 类型。
object Test01 {def main(args: Array[String]): Unit = {// 1. 自动类型转换//    (1)自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。val a1: Byte = 10val b1: Long = 2353val result1: Long = a1 + b1val result11: Int = (a1 + b1.toInt) // 强转//    (2)把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。val a2: Byte = 10val b2: Int = a2//    val c2: Byte = b2    // error//    (3)(byte,short)和char之间不会相互自动转换。val a3: Byte = 10val b3: Char = 'b'//    val c3: Byte = b3    // errorval c3: Int = b3println(c3)//    (4)byte,short,char他们三者可以计算,在计算时首先转换为int类型。val a4: Byte = 12val b4: Short = 25val c4: Char = 'c'val result4: Int = a4 + b4val result44: Int = a4 + b4 + c4println(result44)}
}

2 强制类型转换

1)基本说明
自动类型转换的逆过程,将精度大的数值类型转换为精度小的数值类型。使用时要加上强制转函数,但可能造成精度降低或溢出,格外要注意

在这里插入图片描述
2)案例实操

  1. 将数据由高精度转换为低精度,就需要使用到强制转换
  2. 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
    在这里插入图片描述
    在这里插入图片描述

3 数值类型和 String 类型间转换

1)基本说明

  • 在程序开发中,我们经常需要将基本数值类型转成 String 类型。或者将 String 类型转成基本数值类型。

2)案例实操

  • 基本类型转 String 类型(语法:将基本类型的值+“” 即可
  • String 类型转基本数值类型(语法:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte、s1.toLong、s1.toShort)
    在这里插入图片描述
    在这里插入图片描述

注意事项

在将 String 类型转成基本数值类型时,要确保 String 类型能够转成有效的数据

  • 比如我们可以把"123",转成一个整数,但是不能把"hello"转成一个整数。

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

3D开发工具HOOPS如何助力3D项目实现扩展现实技术?

在当今数字化时代,扩展现实(Augmented Reality,AR)技术的应用已经逐渐深入到各行各业,为用户带来了前所未有的沉浸式体验。而在实现这种技术的开发过程中,HOOPS技术的运用无疑是一种强大的助力。HOOPS是一种…

element-ui出的treeselect下拉树组件基本使用,以及只能选择叶子节点的功能,给节点添加按钮操作

element-ui出的treeselect下拉树组件基本使用:Vue通用下拉树组件riophae/vue-treeselect的使用-CSDN博客 vue-treeselect 问题合集、好用的树形下拉组件(vue-treeselect的使用、相关问题解决方案)-CSDN博客 需求1:treeselect下拉…

力扣Lc18--- 168. Excel表列名称(java版)-2024年3月19日

1.题目描述 2.知识点 注1:StringBuilder 对象的 insert() 方法用于在字符串的指定位置插入字符或字符序列。这里的第一个参数是插入位置的索引,而第二个参数是要插入的字符或字符序列。 public class InsertExample {public static void main(String[…

Filter and Listener and AJAX and JSON

一、Filter Filter 表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。(拦截指定资源) 正常情况下,浏览器可以访问服务器上的所有的资源&…

瑞_Redis_短信登录

文章目录 项目介绍1 短信登录1.1 项目准备1.1.1 导入SQL1.1.2 导入后端项目1.1.3 导入前端项目 1.2 基于Session实现登录流程1.2.1 功能流程介绍1.2.1.1 发送短信验证码1.2.1.2 短信验证码登录、注册1.2.1.3 校验登录状态 1.2.2 实现发送短信验证码功能1.2.2.1 页面流程1.2.2.2…

【保姆级】前端使用node.js基础教程

文章目录 安装和版本管理:npm 命令(Node 包管理器):运行 Node.js 脚本:调试和开发工具:其他常用命令:模块管理:包管理:调试工具:异步编程和包管理&#xff1a…

【leetcode热题】 地下城游戏

恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0…

【pdf工具】pdf24tools

pdf24tools是一款功能强大的在线PDF工具,它为用户提供了多种实用的功能,方便用户处理和编辑PDF文件。 合并PDF文件、拆分PDF文件、压缩PDF文件和转换PDF文件格式…

分布式搜索引擎elasticsearch专栏三

1.数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些…

[Qt项目实战]Qt实现美松标签打印机标签二维码打印(QR混排模式+页打印模式)

1、硬件信息、环境参数及配套资料 1.1 打印机信息及开发环境 打印机 美松标签打印机串口/USB通讯Qt5.9 64位程序 1.2 打印机配套开发资料 打印机主要配套测试工具、开发SDK及驱动等,均由厂家提供。 开发Demo及动态库:MsPrintSDK-DLL-V2.2.2.5 链接&…

Android Studio实现内容丰富的安卓社交论坛平台

获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目编号085 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看公告 3.视频列表 4.资源列表 5.帖子列表 6.个人中心 …

Design Script之案例练习:曲线组合

让我们来探索一下如何创建分组曲线函数。这个函数将取一个无序曲线列表(必须是连续的),并将它们组合成分组的循环。 在这个例子中,我们将采取一系列的9个爆炸矩形,并洗牌合成曲线。这给了我们36条单独的曲线,它们可以正确地组合回各自的矩形中。 一些分散的曲线显示在右边…

基于python在线图书馆信息管理系统flask-django-nodejs-php

科学技术日新月异的如今,计算机在生活各个领域都占有重要的作用,尤其在信息管理方面,在这样的大背景下,学习计算机知识不仅仅是为了掌握一种技能,更重要的是能够让它真正地使用到实践中去,以创新的视角去不…

Spring-Mybatis字段映射

MybatisComfig.xml文件设置 <settings><setting name"mapUnderscoreToCamelCase" value"true"/> </settings> 完成全局配置将数据库下划线映射为驼峰式命名

nodejs基于vue班级管理系统的设计与实现-flask-django-python-php

根据现实需要&#xff0c;此系统我们设计出一下功能&#xff0c;主要有以下功能模板。 1.学生功能&#xff1a;首页、个人中心、课程信息管理、学生成绩管理、班级事件管理、班费支出管理、班级相册管理、班级音乐角管理。 2.管理员功能&#xff1a;首页、个人中心、班级管理、…

【征稿进行时|见刊、检索快速稳定】2024年区块链、物联网与复合材料与国际学术会议 (ICBITC 2024)

【征稿进行时|见刊、检索快速稳定】2024年区块链、物联网与复合材料与国际学术会议 (ICBITC 2024) 大会主题: (主题包括但不限于, 更多主题请咨询会务组苏老师) 区块链&#xff1a; 区块链技术和系统 分布式一致性算法和协议 块链性能 信息储存系统 区块链可扩展性 区块…

[Uni-app] 微信小程序的圆环进度条

效果图&#xff1a; 组件完整代码如下&#xff1a; <template><view class"base-style":style"position: relative;width: diameter px;height: diameter px;display: flex;flex-direction: row;background-color: bgColor ;"><!…

《动手学深度学习》 第3章 线性神经网络 部分笔记

文章目录 前言一、线性回归1.知识点&#xff08;1&#xff09;解析解&#xff08;2&#xff09;泛化&#xff08;3&#xff09;随机梯度下降&#xff08;4&#xff09;python列表推导&#xff08;5&#xff09;全连接层 二、线性回归的从零开始实现1.知识点&#xff08;1&#…

HCIP作业

实验要求&#xff1a; 1、R6为ISP&#xff0c;接口IP地址均为公有地址&#xff0c;该设备只能配置IP地址&#xff0c;之后不能再对其进行任何配置&#xff1b; 2、R1-R5为局域网&#xff0c;私有IP地址192.168.1.0/24&#xff0c;请合理分配&#xff1b; 3、R1、R2、R4&#x…

硬件基础:带缓启动MOS管电源开关电路

电源开关电路&#xff0c;经常用在各“功能模块”电路的电源通断控制&#xff0c;是常用电路之一。 本文要讲解的电源开关电路&#xff0c;是用MOS管实现的&#xff0c;且带缓开启功能&#xff0c;非常经典。 一、电路说明 电源开关电路&#xff0c;尤其是MOS管电源开关电路…