当前位置: 代码网 > it编程>编程语言>正则表达式 > 从零开始学Scala

从零开始学Scala

2024年07月28日 正则表达式 我要评论
快速入门Scala


一、scala入门

1.1 概述

1.1.1 为什么学习scala

  1. spark – 新一代内存级大数据计算框架,是大数据的重要内容。
  2. spark是用scala语言编写的。为了更好的学习spark,需要掌握scala语言。
  3. spark的兴起,带动scala语言的发展。

1.1.2 scala 的发展历史

在这里插入图片描述

1.1.3 scala与java之间的关系

在这里插入图片描述
在这里插入图片描述

1.1.4 scala的语言特点

在这里插入图片描述

1.2 scala环境搭建

1)安装步骤

(1) 首先安装jdk1.8安装成功

(2)下载对应的scala安装文件scala安装scala-2.12.11zip

去官网下载对应的版本:

scala官网

在这里插入图片描述

在这里插入图片描述

(3)解压scala-2.12.11zip
在这里插入图片描述

(4)配置scala环境变量

打开系统变量,新建
在这里插入图片描述

在path中添加:

在这里插入图片描述

1.3 scala 插件安装

在idea软件上, 打开设置
在这里插入图片描述

搜索scala,点击下载

在这里插入图片描述

1.4 helloworld案例

1.4.1 创建idea工程

两种方法建立scala项目:

第一种:

新建一个maven项目,然后在新建一个文件夹
在这里插入图片描述
设置为source root
在这里插入图片描述
然后就可以新建scala项目了
在这里插入图片描述

第二种:

新建一个项目
在这里插入图片描述

选择scala插件

在这里插入图片描述
输入文件名,完成即可

在这里插入图片描述

1.4.2 class和object说明

java:

在这里插入图片描述

scala:

在这里插入图片描述


二、变量和数据类型

2.1 注释

 scala 注释使用和java完成一样

在这里插入图片描述

单行注释快捷键 : ctrl + /

多行注释快捷键 : ctrl +shift + /

文档注释 : / * * + 回车

代码规范 :

在这里插入图片描述

2.2 变量和常量(重点)

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

java变量和常量:

在这里插入图片描述
scala变量和常量:

1) 基本语法:

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

在这里插入图片描述

2.3 标识符的命名规范

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

1) 命名规则:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.4 字符串输出

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

2)案例

object text04_string {

  def main(args: array[string]): unit = {
    //  (1) 字符串,通过+号连接
    val name: string = "刘德华"
    val name1: string = "郭富城"
    val age: int = 19
    val age1: int = 23
    println(name + "的年龄是:" + age + " ," + name1 + "的年龄是:" + age1)

    //  * 用于将一个字符串复制多次并拼接
    println(name * 3)

    //  (2)printf用法:字符串,通过%传值
    printf("%d岁的%s在打篮球", age, name)
    println()
    //  (3)字符串模板(插值字符串):通过$获取变量值
    println(s"${age}岁的${name}还在打篮球")

	    val num:double = 2.342354
    println(f"the num is ${num}%2.2f")  //  f 格式化模板字符串
    println(raw"the num is ${num}%2.2f")  //  raw  原样输出

    // 三引号 表示字符串,保持多行字符串的原格式输出
    val sql = s"""
         |selcet *
         |from
         |  student
         |where
         |  name = ${name}
         |and
         |  age > ${age}
         |""".stripmargin
    println()
  }
}

输出结果:

在这里插入图片描述

2.5 键盘输入

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

1)基本语法:

	stdin.readline()、stdin.readshot()、stdin.readdouble()

import scala.io.stdin

2)案例

import scala.io.stdin

object  text05_input {
  def main(args: array[string]): unit = {
//    输入信息
    println("请输入你的名字:")
    val name : string = stdin.readline()
    println("请输入你的年龄:")
    val age : int = stdin.readint()

    println(s"欢迎${age}岁的${name} ! ! !")
  }
}

运行结果:

在这里插入图片描述
对文件进行读写:

import java.io.{file, printwriter}

import scala.io.source

object text06_fileio {
  def main(args: array[string]): unit = {
//    1. 从文件中读取数据
    source.fromfile("src/main/resources/test").foreach(print)

//    2. 将数据写入文件
    val writer = new printwriter(new file("src/main/resources/output.txt"))

    writer.write("hello scala from java writer ")
    writer.close()
  }
}

结果:

在这里插入图片描述
在这里插入图片描述

2.6 数据类型(重点)

java数据类型:

s
scala数据类型:

在这里插入图片描述
在这里插入图片描述

2.7 整数类型(byte、short、int、long)

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

1)整型分类

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

object  text07_data {
  def main(args: array[string]): unit = {
//    1 整数类型
    val a1 :byte = 127
    val a2 :byte = -128

//    整数默认类型为int
    val a3 = 12
    val a4 = 12312451251251l  // 长整型数值定义

    val b1 :byte = 10
    val b2 : byte = 20+10
    println(b2)

    val b3 : byte =(b2 + 30).tobyte
    print(b3)
  }
}

2.8 浮点类型(float、double)

//    浮点类型
    val f1 :float = 1.2324f
    val d1  = 34.3412  // 默认 double 类型

2.9 字符类型(char)

1) 基本说明

字符类型可以表示单个字符,字符串类型是char。

2) 案例实操

在这里插入图片描述
在这里插入图片描述

    val c1: char = 'a'
    println(c1)

    val c2: char = '9'
    println(c2)

    //    控制字符
    val c3: char = '\t' // 制表符
    val c4: char = '\n' // 换行符
    println("abc" + c3 + "def")
    println("abc" + c4 + "def")

    //    转义字符
    val c5 = '\\' // 表示 \ 自身
    val c6 = '\"' // 表示 ”
    println("abc" + c5 + "def")
    println("abc" + c6 + "def")

    //    字符变量底层保存ascii码
    val i1: int = c1
    val i2: int = c2
    println("i1:" + i1)
    println("i2:" + i2)

    val c7: char = (i1 + 1).tochar
    println(c7)
    val c8: char = (i2 + 1).tochar
    println(c8)

2.10 布尔类型:boolean

1)基本说明

(1) 布尔类型也叫boolean类型,boolean类型数据只允许取值true和ffalse
(2)    boolean 类型占1个字节。

2)案例实例

    // 布尔类型
    val istrue:boolean = true
    println(istrue)

2.11 unit类型、null类型和nothing类型(重点)

1) 基本说明

在这里插入图片描述

    //    空值unit
    def m1(): unit = {
      println("m1被调用执行")
    }

    val a: unit = m1()
    println("a" + a)

    //    空引用 null
    //    val n : int = null  // 值类型不能接收空引用  error
    var student: student = new student("alice", 20)
    student = null
    println(student)

    //    nothing
    def m2(n: int): nothing = {
      throw new nullpointerexception
    }
    //    def m2(n: int): int = {
    //      if (n == 0)
    //        throw new nullpointerexception
    //      else
    //        return n
    //    }

    val b = m2(0)
    println("b" + b)
  }
}

在这里插入图片描述

在这里插入图片描述

2.12 类型转换

2.12.1 数值类型自动转换

在这里插入图片描述
(1) 自动提升原则:有多种类型的数据进行混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后计算。

(2)把精度大的数据类型赋值给精度小的数据类型时,就会报错,反之就会进行自动类型转换。

(3)(byte,short)和char之间不会相互自动转换。

(4)byte , short,char 他们三者可以计算,在计算时首先转换成int类型。

在这里插入图片描述

2.12.2 强制类型转换

1)基本说明

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

	java : int num= (int) 2.5
	scala :  var num:int = 2.7.toint

(1) 将数据由高精度转换成低精度,就需要使用到强制转换。

(2)强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级。

    val a1: char= '9'
    val a2: int = a1.toint
    println(a2)

    val n1 :int = -2.9.toint
    println(n1)

    val n2 : int = 2.6.toint +3.7.toint
    val n3 : int = (2.6+3.7).toint
    println(n2)
    println(n3)

在这里插入图片描述

2.12.3 数值类型和string类型间转换

(1)数值转string
(2)string转数值

//    (1)数值转string
    val n:int = 27
    val s :string = n+ ""
    println(s)

//    (2)string转数值
    val m :int = "12".toint
    val f :float = "12.3".tofloat
    val f2 : int = "12.3".todouble.toint
    println(f2)

在这里插入图片描述
强制类型转换时超出类型的值范围:

(1)
* 128 : int 类型, 占据4个字节 32位
* 原码 0000 0000 0000 0000 0000 0000 1000 0000
* 补码 0000 0000 0000 0000 0000 0000 1000 0000
*
* 截取最后一个字节 byte
* 得到补码 1000 0000
* 表示最大负数 -128

    val n:int = 128
    val b : byte = n.tobyte
    println(b)

(2)
* 130 : int 类型, 占据4个字节 32位
* 原码 0000 0000 0000 0000 0000 0000 100 0010
* 补码 0000 0000 0000 0000 0000 0000 1000 0010
* 截取最后一个字节 byte
* 得到补码 1000 0010
* 对应原码 1111 1110
-126

    val n2:int = 130
    val b2 : byte = n2.tobyte
    println(b2)

在这里插入图片描述


三、运算符

scala 运算符和java运算符的使用基本相同,只有个别细节上不同。

3.1 算术运算符

  1. 基本语法

在这里插入图片描述

3.2 关系运算符

1) 基本语法:
在这里插入图片描述

比较运算符

    val s1 :string = "hello"
    val s2 :string =new string("hello")

    //    判断值是否相等。没有判断引用地址
    println(s1 == s2)
    println(s1.equals(s2))

	println(s1.eq(s2))  // 判断引用地址是否相等
	

在这里插入图片描述

3.3 逻辑运算符

1) 基本语法:
用于连接多个条件(一般来说就是关系表达式),最终的结果也是一个boolean值

假定:变量a为true ,b为false

在这里插入图片描述

    //    逻辑运算
    def m(n: int): int = {
      println("m()调用")
      return n
    }

    //   && 逻辑与, 前面判断出结果后,发生短路,后面不再判断
    val n = 1
    println((4 > 5) && m(n) > 0)

在这里插入图片描述

3.4 赋值运算符

3.5 位运算符

3.6 scala运算符本质


四、流程控制

4.1 分支控制 if -else

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com