Scala 学习笔记(一)

一、Scala概述

      Scala 是一门多范式(multi-paradigm)的编程语言,其运行在 Java 虚拟机上,并兼容现有的 Java 程序。Scala 源代码被编译成 Java 字节码,所以它可以运行于 JVM 之上,并可以调用现有的 Java 类库。所以说安装Scala之前需要安装Java。

二、Scala变量和数据类型

由于Scala和Java有着很多相似之处,所以在很多方面没有改动。

1. 注释

单行注释   //
多行注释   /* */

2. 变量和常量

val a:Int = 15   通过val关键字声明一个常量
var b = 20       通过var关键字声明一个变量

对比:
1. var修饰的变量可以重新赋值  val修饰的常量不可以重新赋值
2. val定义常量需要指定类型,var定义变量则不需要指定类型  会自动推断类型

3. 用标识符声明变量

在Scala中可以用操作符来声明一个变量,但是要求这个变量名只能全是操作符

val +*/-! = "2333"
println(+*/-!)

4. 控制台输入

键盘输入 StdId 用来输入和Java Scanner一样

val i = StdIn.readLine()  

5. 文件读入

// 文件读入  传入路径
Source.fromFile("E:\\Scala\\学习笔记.txt").foreach(print)

// 文件写入  直接用Java的类就行
val writer = new PrintWriter(new File("E:\\Scala\\111.txt"))
writer.write("Hello Scala from")
writer.close()

6. 用反引号引起来的可以作为变量

// 通过反引号引起来的包含关键字 都可以用作变量
val `if` = 15
println(`if`)

9. 转换成

// 通过先赋值后转成Int类型的方式 这样就会自动成ascall码
val c1: Char = 'a'
val n1: Int = c1
println(n1)
    
val c2:Char = (n1 + 1).toChar
println(c2)

10. 数据类型系统

在Scala中的数据类型,any是任何类的父类,nothing是任何类的子类,StringOps放到了 值对象的下面,在Java中String属于引用一类的。

11. 空对象

在Scala中有三种空状态

1. null      代表空引用
2. Unit      Unit代表没有返回值,和Void类一样,会返回()
3. nothing   代表引用和值都没有  多见于报错

nothing是任何类的子类,但是不能将空引用去赋值给一个变量。

12. 强制类型转换

通过 toInt方法进行强制转换转换
val age: Int = "10".toInt

三、运算符

1. scala的 '==' 是判断值是否相等,并非判断引用是否相等,eq方法判断引用是否相等。

val a1: String = "aaa"
val a2: String = new String("aaa")

// scala里面直接会对比值 并非去对比引用
println(a1 == a2)    // true

// 这样判断引用是否相等
println(a1.eq(a2))   // false

2. 运算操作

val a3: Int = 20
val a4: Int = 10
println(a3 + a4)
println(a3.+(a4))     // 实际上是有一个叫做 '+' 的方法 和直接相加的效果一样 运算符底层就是去调用方法

println(11.2 toInt)   // 这样就是直接调用toInt方法  用空格作为间隔 但是需要导入包import scala.language.postfixOps

四、流程控制

1. if分支

// 多分支判断结果返回
    
val pop: String = if(x < 11){
   "2333"  // 这里是直接返回这个值 省去了return
}else if(x == 0){
   "0000"
}else{
   "8888"
}

2. 循环

while和do...while循环和Java一样,在这里不再说明。主要介绍for循环

// for循环 和py类似 for..in  这里的in换成了<- to代表着范围  从哪到哪
// to 是会包含最后一个数  until不会包含  by代表步长的意思
for(i <- 0 to 9 by 2 ){
    println(i)
}

// 使用range的伴生对象进行循环
for(i <- Range(1, 10)){  // 使用range的伴生对象  不会打印10出来
  println(i)
}

// 集合遍历
for(i <- Array(1, 10)){  
    println(i)
}

// 当i不等于2的时候才会执行
for(i <- 1 to 5 if i != 2) {  
    println(i)
}

// 通过yield可以将for循环的变量进行返回并组成一个集合
val value = for (i <- 1 to 5) yield i   
println(value)

3. 退出循环

// 这样声明一个可以break的循环体
Breaks.breakable(
  for(i <- Array(1, 10)){
       if(i == 10){
        Breaks.break()   // 这样退出循环
      }
  }
)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值