Scala(二)

news2025/2/1 14:00:13

第2章 变量和数据类型

2.1 注释

Scala注释使用和Java完全一样。
注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。
1)基本语法
(1)单行注释://
(2)多行注释:/* /
(3)文档注释:/
*
*
*/
2)代码规范
(1)使用一次tab操作,实现缩进,默认整体向右边移动,用shift+tab整体向左移。
(2)或者使用ctrl + alt + L来进行格式化。
(3)运算符两边习惯性各加一个空格。比如:2 + 4 * 5。
(4)一行最长不超过80个字符,超过的请使用换行展示,尽量保持格式优雅。

2.2 变量和常量(重点)

常量:在程序执行的过程中,其值不会被改变的变量。
0)回顾:Java变量和常量语法
变量类型 变量名称 = 初始值 int a = 10
final常量类型 常量名称 = 初始值 final int b = 20
注意:java中的final如果加static才会被存放在常量池中,否则作为不可修改的变量存在堆栈中。
1)基本语法
var 变量名 [: 变量类型] = 初始值 var i:Int = 10
val 常量名 [: 常量类型] = 初始值 val j:Int = 20
注意:能用常量的地方不用变量。
2)案例实操
(1)声明变量时,类型可以省略,编译器自动推导,即类型推导。
(2)类型确定后,就不能修改,说明Scala是强数据类型语言。
(3)变量声明时,必须要有初始值。
(4)在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可改变,val修饰的变量不可改。
(5)var修饰的对象引用可以改变,val修饰的对象则不可改变,但对象的状态(值)却是可以改变的。(比如:自定义对象、数组、集合等等)。

package com.aa.chapter02

object Test01_Var {
  def main(args: Array[String]): Unit = {

    // 声明变量和常量
    val a: Int = 10
    var b: Int = 20


    // 常量值无法修改
    //    a = 20
    b = 30
    //    (1)声明变量时,类型可以省略,编译器自动推导,即类型推导
    val c = 30


    //    (2)类型确定后,就不能修改,说明Scala是强数据类型语言。

    //    b = "30"

    //    (3)变量声明时,必须要有初始值
    val d: Int = 0

//    var d1:Int = _
	
    val test02_Var = new Test02_Var()
    println(test02_Var.i)
    
    //    (4)var修饰的对象引用可以改变,val修饰的对象则不可改变,
    //    但对象的状态(值)却是可以改变的。(比如:自定义对象、数组、集合等等)
    val person0 = new Person02()
    var person1 = new Person02()

    // 引用数据类型的常量和变量能否替换成别的对象
    // var 可以修改引用数据类型的地址值  val不行
    person1 = new Person02()

    // 引用数据类型中的属性值能否发生变化  取决于内部的属性在定义的时候是var还是val
    //    person0.name = "lisi"
    person0.age = 11

  }
}

class Test01_Var {

  // scala中类的属性 如果是var变量也能使用默认值  但是必须要有等号
  var i: Int = _
}

class Person01 {
  val name: String = "zhangsan"
  var age: Int = 10
}

2.3 标识符的命名规范

Scala对各种变量、方法、函数等命名时使用的字符序列称为标识符。即:凡是自己可以起名字的地方都叫标识符。
1)命名规则
Scala中的标识符声明,基本和Java是一致的,但是细节上会有所变化,有以下三种规则:
(1)以字母或者下划线开头,后接字母、数字、下划线
(2)以操作符开头,且只包含操作符(+ - * / # !等)
(3)用反引号....包括的任意字符串,即使是Scala关键字(39个)也可以
• package, import, class, object, trait, extends, with, type, for
• private, protected, abstract, sealed, final, implicit, lazy, override
• try, catch, finally, throw
• if, else, match, case, do, while, for, return, yield
• def, val, var
• this, super
• new
• true, false, null
注意:正常使用不能只遵守规则,必须按照规范来写,即使用大小驼峰命名法。

2.4 字符串输出(重点)

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

package com.aa.chapter02

object Test02_Str {
  def main(args: Array[String]): Unit = {

    //    (1)字符串,通过+号连接
    System.out.println()
    println("hello" + "world")

    //    (2)重复字符串拼接
    println("linhailinhai" * 200)

    //    (3)printf用法:字符串,通过%传值。
    printf("name: %s age: %d\n", "linhai", 8)

    //    (4)字符串模板(插值字符串):通过$获取变量值
    val name = "linhai"
    val age = 8

    val s1 = s"name: $name,age:${age}"
    println(s1)

    val s2 = s"name: ${name + 1},age:${age + 2}"
    println(s2)


    //    (5)长字符串  原始字符串
    println("我" +
      "是" +
      "一首" +
      "诗")

    //多行字符串,在Scala中,利用三个双引号包围多行字符串就可以实现。
    // 输入的内容,带有空格、\t之类,导致每一行的开始位置不能整洁对齐。
    //应用scala的stripMargin方法,在scala中stripMargin默认是“|”作为连接符,
    // 在多行换行的行头前面加一个“|”符号即可。
    println(
      """我
        |是
        |一首
        |诗
        |""".stripMargin)

    """
      |select id,
      |       age
      |from  user_info
      |""".stripMargin


    s"""
       |${name}
       |${age}
       |""".stripMargin
  }
}

2.5 数据类型(重点)

在这里插入图片描述

object Test03_Type {
  def main(args: Array[String]): Unit = {	
	// 所有的代码都是代码块
    // 表示运行一段代码  同时将最后一行的结果作为返回值
    // 千万不要写return
    val i: Int = {
      println("我是代码块")
      10 + 10
    }

    // 代码块为1行的时候  大括号可以省略
    val i1: Int = 10 + 10

    // 如果代码块没有计算结果  返回类型是unit
    val unit: Unit = {
      println("hello")
      println("我是代码块")
    }


    // 当代码块没办法完成计算的时候  返回值类型为nothing
    //    val value: Nothing = {
    //      println("hello")
    //      throw new RuntimeException
//    }
}
}

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

Scala的整数类型就是用于存放整数值的,比如12,30,3456等等。
1)整型分类
在这里插入图片描述
2)案例实操
(1)Scala各整数类型有固定的表示范围和字段长度,不受具体操作的影响,以保证Scala程序的可移植性。

object Test03_Type {
  def main(args: Array[String]): Unit = {

    // 整数类型
    val i1 = 1

    val l = 1L

    // (1)Scala各整数类型有固定的表示范围和字段长度,不受具体操作的影响,以保证Scala程序的可移植性。
    val b1: Byte = 2
//    val b0: Byte = 128
    
    val b2: Byte = 1 + 1
    println(b2)

    val i2 = 1

    //(2)编译器对于常量值的计算 能够直接使用结果进行编译
    // 但是如果是变量值 编译器是不知道变量的值的 所以判断不能将大类型的值赋值给小的类型
    //    val b3: Byte = i2 + 1
    //    println(b3)

    // (3)Scala程序中变量常声明为Int型,除非不足以表示大数,才使用Long
    val l1 = 2200000000L
  }
}

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

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

相关文章

高时空分辨率、高精度一体化预测技术的风、光、水自动化预测技术的应用

第一章 预测平台讲解及安装 一、高精度气象预测基础理论介绍 综合气象观测数值模拟模式; 全球预测模式、中尺度数值模式; 二、自动化预测平台介绍 Linux系统 Crontab定时任务执行机制 Bash脚本自动化编程 硬件需求简介 软件系统安装 …

独立站该怎么带来客户流量?来看看这五大方法吧!

建立独立站是为了让更多的人知道你的品牌和产品,从而吸引潜在客户并转化为销售机会。以下是一些可以帮助独立站带来客户流量的方法: 01.SEO(搜索引擎优化): 优化网站的SEO,使得搜索引擎能够更好地找到你的…

MyBatis之慎用association

这里先总结一下 association 存在的问题。 一、内嵌查询时存在报错Id找不到及内存溢出隐患 二、一对多关系数据重复问题 三、多层嵌套内层 association 查询结果为null 或 非预期的值 一、内嵌查询时存在报错Id找不到及内存溢出隐患 参考: https://www.lmlphp.co…

DP358/321/323/324运算放大器芯片

DP358、DP321、DP323、DP324是一款低噪声、低压、低 功耗轨到轨输出运放大器,该系列放大器的增益带宽为 11MHz,压摆率为 8.5V/uS,其中DP323 在掉电工作模式下待机电流小于1uA。该系列放大器可以广泛应用于各种电子产品领域。 主要特性: 轨到轨最大输入…

电脑提示msvcr110.dll丢失怎样修复呢?推荐三个修复方法

Windows系统总是不可避免会出现系统报错,提示msvcr110.dll丢失,无法运行启动软件程序,主要就是由于系统的msvcr110.dll丢失或者损坏。msvcr110.dll是Microsoft Visual C Redistributable软件包中的一个文件,它是由Microsoft Visua…

【文生图系列】Stable Diffusion Webui安装部署过程中bug汇总(Linux系统)

文章目录 bugs虚拟环境pythongfpgan和cython bugs 看网上部署stable diffusion webui的教程,很简单。而且我也有部署stable diffusion v1/v2的经验,想着应该会很快部署完stable diffusion webui,但是没想到在部署过程中,遇到各种…

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame

文章目录 前言一、DataFrame创建1.1 字典创建1.2 NumPy二维数组创建 二、DataFrame切片2.1 行切片2.2 列切片2.3 行列切片 三、DataFrame运算3.1 DataFrame和标量的运算3.2 DataFrame之间的运算3.3 Series和DataFrame之间的运算 四、DataFrame多层次索引4.1 多层次索引构造1.隐…

AJAX异步请求JSON数据格式

目录 前言 1.AJAX的实现方式 1.1原生的js实现方式 1.2JQuery实现方式 2.1语法 3.JSON数据和Java对象的相互转换 3.1将JSON转换为Java对象 3.2将Java对象转换为JSON 前言 AJAX:ASynchronous JavaScript And XML 异步的JavaScript 和 XML。 Ajax 是一种在…

在安卓里用c++显示骨骼动画

1. 程序模块图 2. 编译第三方库Assimp 2.1 下载 官网下载5.0.0版本,https://codeload.github.com/assimp/assimp/zip/refs/tags/v5.0.0 2.2 生成安卓编译链 解压后在assimp-5.0.0下建文件夹BuildAssimp 放两个脚本make_standalone_toolchain.bat python D:/Android/Sdk/nd…

安达发|各部门实施APS系统前后有哪些变化?

众所周知,生产计划部门是制造企业的重要部门,承担销售、采购、仓储、质量检验和生产的各个部门的协调工作。APS 先进计划排程系统系统通过人工智能算法跟踪所有资源,包括材料、设备、人员、客户需求、订单变更等,自动快速计算出“…

odoo-031 odoo13和odoo16的网站上添加显示变体描述 Website Add Variant Description

文章目录 测试环境需求描述实现步骤实际效果思路说明 测试环境 Odoo 版本: odoo13 和 odoo16 Python 版本:3.6.9 操作系统:Ubuntu 18.04 需求描述 添加变体描述,显示在 form 视图;在网站上动态显示产品变体描述。 …

QT之智能指针

如果没有智能指针,程序员必须保证new对象能在正确的时机delete,四处编写异常捕获代码以释放资源,而智能指针则可以在退出作用域时(不管是正常流程离开或是因异常离开)总调用delete来析构在堆上动态分配的对象。 来看看一个野指针例子 程序将会…

在 3ds Max 中创建逼真的玻璃材质

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 尽管本教程基于 3ds Max,但相同的设置适用于许多其他 3D 产品。 注意:单击每个步骤中的缩略图可查看更大的屏幕截图,其中包括视口和用户界面的相关部分。 步骤 1由于本教…

Linux的权限管理精细总结

(该图由AI绘制 关注我 学习AI画图) 目录 一、权限概述 1、权限的基本概念 2、为什么要设置权限 3、Linux用户身份类别 4、user文件拥有者 5、group文件所属组内用户 6、other其他用户 7、特殊用户root 二、普通权限管理 1、ls -l命令查看文件…

LED显示屏的8个常见信号干扰因素及解决方法

LED显示屏在使用过程中可能会受到多种信号干扰因素的影响,导致显示效果不理想或出现问题。以下是LED显示屏常见的信号干扰因素以及对应的解决方法: 1,电源干扰: 干扰因素:电源波动、电源噪声等。 解决方法&#xff1a…

jenkins发布使用邮件添加审批

首先安装好Email Extension Plugin插件并在 system下配置好邮件 然后配置流水线需要的参数 ![在这里插入图片描述](https://img-blog.csdnimg.cn/418fc89bfa89429783a1eb37d3e4ee26.png#pic_center pipeline如下: def skipRemainingStages false //是否跳过生…

【原创】实现GPT中Transformer模型之框架概念

作者:黑夜路人 时间:2023年7月 GPT是什么意思 GPT的全称是 Generative Pre-trained Transformer(生成型预训练变换模型),它是基于大量语料数据上训练,以生成类似于人类自然语言的文本。其名称中的“预训练”…

Knife4j-的使用(详细教程)

文章目录 前言一、简介二、版本参考三、基本使用1. 导入相关依赖2. 比对效果3. 增强特性应用 四、Spring-Cloud 整合1. 项目准备2. 实现步骤2.1 依赖引入2.2 编写配置类2.2.1基础信息配置2.2.2 配置接口信息2.2.3 安全认证配置 2.3 常用注解的使用2.3.1 Api2.3.2 ApiOperation2…

计算机组成2——存储系统

1. 硬件构成、工作原理、评价指标 2.主存储器 基本构成为DRAM&SRAMROM,工作原理为串行访问特点是采用多体交叉提高读取速度 RAM工作原理 SRAM的读写过程如下: WE控制读写; CS为片选信号; VCC为接地端; GND为…

GitLab 16.1创建新成员

GitLab 16.1界面有明显的变化,Admin Area在界面中不容易找到。 下面是找到Admin Area的方法。 本来是可以通过红框的链接找到Admin Area,但是这链接是http://127.0.0.1:8000/root,无法直接访问。 这里有两个方法进入。 方法1 将链接直接改成服务器ip,例如服务器ip是19…