Scala基础

1、Scala特性

Scala特性:
	1、表达能力强,代码简洁
	2、兼容java,可以访问java类库,能操作:mysql、freemarker、redis、AcviveMQ

2、基础语法

2.1变量定义

var/val 变量名:数据类型 = 赋值
val a:Int = 0
var s:String = "hello"

val和var关键字对比

  • val修饰的变量定义后不能再修改值,但可以被复写
  • var修饰的变量可以随意修改值
  • scala中被final修饰的变量,既不可以修改值,也不可以被复写
var a = 0
val s = "hello"
说明:定义变量类型可以被省略,scala解释器可以根据赋值自定识别出便变量类型

2.2惰性赋值

lazy val a:Int = 0
lazy val s:String = "hello"
说明:定时变量时前方增加lazy关键字,即为惰性赋值,使用这种赋值方式的好处是:变量只有被使用的时候,才会加载到jvm
使用场景:大数据分析中,会使用比较庞大的sql,但有的时候这段sql不需要立刻记载到内存中,这个使用可以使用惰性赋值,以此来减少内存的开销

3.字符串定义

定义字符串的三种方式
1、双引号定义
	val s = "hello"
2、插值表达值
	val age = 20  val name = "西门" val sex = "男"
	val info = s"age=${age},name=${name},sex=${sex}"
	输出结果:info = age=20,name=西门,sex=男
3、三引号定义
	val sql = """ select * from aaa where ..."""
	解析:使用三引号方式定义字符串,三引号中间的所有内容都会当成字符串处理
	注意:三引号中不能再次出现三引号,一旦出现,解析器认为字符串定义结束,不可使用转义字符对其进行转义

4.数据类型

4.1基础数据类型

基础类型类型说明
Byte8位带符号整数
Short16位带符号整数
Int32位带符号整数
Long64位带符号整数
Char16位无符号Unicode字符
StringChar类型的序列(字符串)
Float32位单精度浮点数
Double64位双精度浮点数
Booleantrue或false
所有类型首字母大写
整形使用Int,不使用Integer

4.2 运算符

算数运算符:+ - * / %
逻辑运算符:&& || ! 
关系运算符:< > <= >= !=
位运算符:& || ^ >> <<

着重说明:
	==运算符:scala中的'=='运算符比较智能,在进行比较前会先对对象进行判空操作,如果对象不为空,
	会比较对象的值是否相等
	比较对象内存地址使用‘.eq’方法

4.3 scala层次结构

image-20210316205637253

说明:
	1、Any为Scala的顶级父类,类似java的Object
	2、AnyVal为基本数据类型(数值类型)的父类
	3、AnyRef为引用数据类型的父类
	4、Unit类型代表方法返回值类型,相当于java的void
	5、Null是所有引用数据类型的子类,数值类型没有这个子类
	6、Nothing是最底层子类,平常不会用到,程序运行抛出异常时返回该类型

5.基础语法

5.1 if表达式

	和java语法基本相同,不同的是scala的if表达式有返回值
	示例:
	val i = 10
	val a = if(i == 10) 1 else 2

5.2 块表达式

用{}括住的代码称为块表达式,scala中的块表达式有返回值,块表达式最后一行输出的结果为返回值
例:val a = {
	println("hello")
	1 + 2
}
返回值结果为3

5.3 循环

for循环
for(i <- 0 to 10) {
	println(i)
}
注:0 to 10返回0-10范围内数字组成的数组

例:打印如图所以内容
*****
*****
*****
for(i <- 0 to 3; j <- 0 to 5) {
	print("*")
	if(j == 5)
		println()
}

守卫:
for(i <- 0 to 10 if 1%3 == 0)
	print(i)
输出结果:369

for推导式:
例子:生成一个10,20,30...100组成的
val list = fo(i <- 0 to 10) yield i * 10

while循环:
打印1-10的数字
val i = 0;
while(i <= 10) {
	println(i)
	i = i + 1
}

5.4 break和cotinue

scala中没有这两个关键字,想要实现类似功能,需要导入其它的包
import scala.util.control.Breaks._

例[break]:使用for表达式打印1-100的数字,如果数字到达50,退出for表达式
breakable {
	for(i <- 0 to 100) {
		println(i)
		if(i >= 50)
			break()
	}
}
例[continue]:打印1-100的数字,使用for表达式来遍历,如果数字能整除10,不打印
for(i <- 0 to 100) {
	breakable{
		if(i % 10 == 0)
			break()
		else
			print(i)
	}
}

5.5 方法

方法定义格式:def 方法名(参数名:参数类型,参数名:参数类型):返回值类型 = {
		方法体...
	}
	说明:1、通常可以省略返回值类型,scala解释器会自动识别
	     2、方法内部有递归调用的时候,返回值不能省略
	     3、不用return返回数据,块表达式默认最后一行返回
	     4、可以给参数设置默认值,但不能省略参数类型

例:定义一个方法,实现两个整形数值相加,返回相加后的结果
	def add(x:Int, y:Int):Int = {
		x + y
	}
	val a = add(1, 2)

例:定义递归方法(求阶乘)
	def mutiply(x:Int):Int = {
		if(x <= 1) 1
		else mutiply(x - 1) * x
	}

变长参数:
	def add(x:Int*) = {
		x.sum
	}
	add(1,2,3,4,5)
	val arr = Array(1,2,3,4,5)
	add(arr:_*)
方法的四种调用方式:
	1、后缀调用
		.方法名()
	2、中缀调用
		Math abs(-1)
	3、花括号调用[只适用于只有一个参数的方法]
		Math.abs{ -1 }
	4、无括号调用法[只适用于没有参数的方法]
		def output = println("hello")
		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值