【Scala】Scala新手入门(一)--变量和函数类型

变量和常量

基本语法

  • 定义变量
    var 变量名 [:变量类型] = 初始值
    var a: Int = 10
  • 定义常量
    val 常量名 [:常量类型] = 初始值
    val b: Int = 20

注意
1.声明变量时,类型可以省略

var a1 = 10
//.getClass查看类型
println(a1.getClass) //int
val b1 = 23
println(b1.getClass) //int

2.类型确定后,就不能修改

var a2 = 15
// a2 = “hello” 会报错

3.变量声明时必须有初始值

//var a3:Int 会报错

4.var修饰的变量可改变,val修饰的变量不可改变

a1 = 12
//b1 = 25 会报错

标识符

Scala对各种变量、方法、函数等命名时使用的字符序列称为标识符

  1. 以字母或者下划线开头,后接字母、数字、下划线
  2. 以操作符开头,且只包含操作符(±*/#)

    val -+/% = “hello”

  3. 用反引号`xxx`包括的任意字符串,即使是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

val `if` = “if”

字符串

  1. 字符串通过+号拼接,*号用于将一个字符串复制多次并拼接

println(“hello” * 3) //hellohellohello

  1. printf用法:字符串,通过%传值

val name = “alice”
val age = 16
println(age+“岁的”+name+“在菜鸟学院学习”) //16岁的alice在菜鸟学院学习

  1. 字符串模板(插值字符串),通过$获取变量值,s""表示是一个模板字符串

println(s"${age}岁的${name}在菜鸟学院学习") //16岁的alice在菜鸟学院学习
val num: Double = 2.3456 //Double要首字母大写
//f拼接做格式转化
println(f"The num is ${num}%2.2f") //The num is 2.35
//raw拼接只填充变量,不做格式转化
println(raw"The num is ${num}%2.2f") //The num is 2.3456%2.2f
三引号表示字符串,保持多行字符串的原格式输出
val sql = s"“”
|select *
|from
| student
|where
| name = ${name}
|and
| age > ${age}
|“”".stripMargin

控制台标准输入

引入类: import scala.io.StdIn
StdIn.readLine()
StdIn.readInt()

文件读写

引入类:scala.io.Source
文件读取:Source.fromFile("path")
引入类:java.io.{File, PrintWriter}
文件写入:val writer = {new PrintWriter(new File("src/main/resources/output.txt"))}
writer.write("Hello scala from java")
writer.close()

数据类型

整数类型

1.Byte[1]: 数值区间-128到127
2.Short[2]: 数值区间-32768到32767
3.Int[4]: 数值区间-2147483648到2147483647
4.Long[8]: 数值区间-9223372036854775808到9223372036854775807=2的(64-1)次方-1

val a1: Byte = 127
//val a2: Byte = 128 //error,超出范围了
val a3 = 12 //整数默认类型为Int
val a4 = 132434569876L //超过Int范围的,末尾加一个大写L或者小写l,长整型数值定义
val b1: Byte = 10
val b3: Byte = (b1 + 20).toByte //要做强制类型转换

浮点类型

val f1 = 1.2345 //小数默认类型double
val f2 = 2.3456f //末尾加f表示float类型

字符类型

单引号的单个字符,相当于16位无符号整数的数据类型,该字符在存储其文字时占用2个字节。

val c1: Char = ‘a’
val c3: Char = ‘\t’ //制表符
val c5 = ‘\’ //表示\自身
val i1: Int = c1 //97
val c7: Char = (i1 + 1).toChar //b

布尔类型

只占1个字节,只有两种取值

val d1: Boolean = true

空类型
  • 空值Unit
    def m1(): Unit = {
      println("m1被调用执行")
    }

    val a: Unit = m1()
    println("a:" + a)   //a:()
  • 空引用null
    //val n: Int = null //error,值类型不能接收一个空引用
   var student: Student = new Student("alice",20)
   student = null
   println(student)   //null
  • Nothing
    def m3(n: Int): Int = {  //整个代码块的类型要能兼容所有类型,nothing是所有类型的子类,可以不考虑
     if (n == 0)
       throw new NullPointerException   //nothing
     else
       return n   //Int
   }
   val c: Int = m3(2)
   println("c:" + c)
   }
数据类型转换
  • 自动类型转换

(1)自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算

   val a1: Byte = 10
   val b1: Long = 2343
   val result1: Long = a1 + b1 //冒号后面如果写了Byte会报错

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

   val a2: Byte = 10
   val b2: Int = a2

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

    val a3: Byte = 10
    val b3: Char = 'b'
    //val c3: Byte = b3  //error
    val c3: Int = b3  //char可以转为Int
    println(c3)

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

 val a4: Byte = 12
 val b4: Short = 23
 val c4: Char = 'c'
 val result44: Int = a4 + b4 + c4
 println(result44)
  • 强制类型转换

将数据由高精度转换为低精度,就需要使用强制类型转换

 val n1: Int = -2.9.toInt  //取整数部分,不是向上或向下取整
 println(n1)  //-2
  • 数值类型和String类型的转换

(1)数值转String

  val n: Int = 27
  val s: String = n + ""  //方法一
  //val s: String = n.toString //方法二

(2)String转数值

  val m: Int = "12".toInt
  val f: Float = "12.3".toFloat
  //val f2: Int = "12.3".toInt //error
  val f2: Int = "12.3".toDouble.toInt //在将String类型转成基本数值类型时,要确保String类型能够转成有效的数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值