Scala入门基础

Scala简介

1.Scala源自Java
(1)Scala构建在JVM之上
(2)Scala与Java兼容、互通

2.Scala的优势
(1)多范式编程:面向对象编程、函数式编程
(2)表达能力强,代码精简

3.大数据与Scala
Spark采用Scala语言设计
(1)提供的API更加优雅
(2)基于JVM的语言,能融入Hadoop生态圈

4.Scala特点
(1)静态类型:
Scala 的变量声明后不允许改变类型
(2)强类型:
Scala 是强类型语言,Scala 在声明变量时一般无需显示指定类型,Scala 编译器会自动推断出类型。
Scala 没有提供 Java 中的强制类型转换,取代方法有:
①对象名:.asInstanceOf[XXX]
②对象名:.toXXX 方法
③隐式转换:implicit 关键字

(3)面向对象编程(OOP)
①Scala 中一切值都是对象
②对象的数据类型和行为由类(Class)和特质(Trait,类似于接口)描述
③利用特质实现混入式多重继承
(4)函数式编程(FP)
①Scala 中一切函数都是值,所以可以将函数作为参数和返回值。
②支持高阶函数、柯里化(currying)、样例类(case class)及模式匹配……

Scala关键字

1.Scala关键字列表
在这里插入图片描述

2.Scala和java关键字对比
在这里插入图片描述

Scala变量与常量

1.定义(一般无需显示指定类型,Scala编译器会自动推断出类型)
(1)变量:
赋值后可以改变,生命周期中可以被多次赋值

scala> var name = "jason"
name:String = jason 

(2)常量
赋值后不可变,类似于Java中的final变量

scala> var money = 100
name:Int = 100

(3)使用类型别名定义变量
type关键字

scala> type T = String
defined type alias T
scala> val name:T = "jason"
name:T = jason

(4)类型推断
使用类型推断是必须指定变量初始值,否则无法进行类型推断。

var a //错误定义方式
var a=1 //正确定义方式
var a:Int //错误定义方式

如果不想赋初值可以使用下划线“_”。

var a:Int=_ //正确定义方式
val a:Int=_ //错误定义方式,因为 val 定义为常量

Scala数据类型

1.Scala与Java有着类似的原始数据类型
(1)Byte:8位有符号整数。数值区间-128 ~ 127
(2)Short:16位有符号整数。数值区间-32768 ~ 32767
(3)Int:32位有符号整数。数值区间 -2147483648 ~ 2147483647
(4)Long:64位有符号整数。 -9223372036854775808 ~ 9223372036854775807
(5)Float:32位IEEE 754 单精度浮点数
(6)Double:64位IEEE 754 双精度浮点数
(7)Char:16位无符号Unicode字符。区间值为U+0000 ~ U+FFFF
(8)Boolean:true或false
(9)String:等于java.lang.String

2.Scala数据类型层次结构
(1)Any:所有类型的超类(顶级类型)
(2)AnyVal:表示值类型的超类
(3)AnyRef:表示引用类型的超类,对应java.lang.Object
(4)Unit:Unit 代表没有任何意义的值类型,他是 AnyVal 的子类型,仅有一个实例对象“()”,叫做无用占位符,类似于 Java 中的 void 类型。Uint有返回值()
(5)Nothing:所有类型的子类,也是 Null 的子类,含义便是“啥都没有”,所以没有任何实例
(6)Null:scala.Null 是所有引用类型的子类,仅一个实例对象“null”,并且“null”是关键字,但在 Java 中 null 不是对象
在这里插入图片描述

3.值类型与引用类型的区别
(1)值类型:直接存储值,在栈上存储其值。
(2)引用类型:存储对其值的引用,在栈上存储地址,在堆上存储值
在 Scala 中两个对象进行“==”操作,是比较值是否相等,而非地址,与 Java刚好相反
(3)区别:

case class Po(id:Int) //使用了后面的内容,理解为 POJO 对象即可
val p1=Po(1)
val p2=Po(1)
p1==p2 //true 比较值
p1.eq(p2) //false 比较地址

4.Scala字符串插值
1.s插值器:允许将变量引用、表达式直接插入字面字符中

val name="James"
println(s"Hello,$name")	//Hello,James
println(s"1+1=${1+1}") 	//1+1=2  

2.f插值器

val height=1.9d
val name="James"
println(f"$name%s is $height%2.2f meters tall")

3.raw插值器

s"a\nb"		//将输出换行符
raw"a\nb"		//输出原始字符

Scala程序控制

1.条件控制
默认情况下,scala 不需要语句终结符“;”,默认将每一行作为一个语句。如果语句块只有一行语句,省略“{}”即可。

(1)if语句

val x=10
if(x>0){
    print("x大于0")
}

(2)if…else语句

val x=10
if(x>10){
    print("x大于10")
}else{
    print("x小于等于10")
}

val x=10
if(x>10){
    print("x大于10")
}else if(x==10){
    print("x等于10")
}else{
  print("x小于10")}

(3)条件语句返回值
①Scala任何表达式都有返回值

val x=10
val y=if(x==10) x+1 else x	//单行表达式可以省略{}
//y=11

②代码块“{…}”也是表达式,返回值为最后一个表达式结果

val x=10
val y={
   print("我是代码块")
   x+1
}
//y=11

③赋值语句动作没有值,准确来说,赋值语句的值为 Unit 类型,即“()”

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值