目录
安装
1.window安装,一路下一步
2.cmd 窗口输入 >scal
数据类型Any ->
AnyVal -> 7 数据类型(Byte、Char、Short、Int、Long、Float 和 Double), Boolean 、Unit(void) = ()
AnyRef
注意:Unit 表示无值,和其他语言中 void 等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
变量,常量格式:var|val 变量的名称(:变量的类型) = 值
1. var 修饰的变量是可变的
2. val 修饰的变量是不可变的, 相当于java中的final关键字修饰的变量
3.scala是行语言,不需要加; 但是如果要在一行中写多条语句,需要用;隔开
字符串//三种变量赋值方式
var var1=100; //scala可以根据结果自动推断出类型, 不需要显示的声明,但也可以显示的指定数据类型
var var2:Int=100;
var var3:java.lang.String="hello";
1.scala的通用的化简规则:如果在调用方法时,方法的参数列表只有一个,则方法的()可以省略
val s1="hello,world"
val r1=s1.split(",")
val r2=s1.take(5) //--取出前n个数据
val r21=s1 take 5
val r3=s1.takeRight(5) //--取出后n个数据
val r31=s1 takeRight 5
val r4=s1.drop(5) //--删除前n个元素,并返回剩余元素
val r5=s1.dropRight(5) //--删除后n个元素,并返回剩余元素
val r6=s1*2 //--将字符串重复n次
val r7=s1.distinct //--去重
val i1=1 // i1 : Int = 1
val r1=i1.to(5) //--to方法用于生成一个区间,一般用于for循环时生成遍历的范围,(1, 2, 3, 4, 5)
val r2=i1.to(5,2) //--生成区间,并指定 步长为2 ,(1, 3, 5)
val r3=1.to(5) //(1, 2, 3, 4, 5)
val r4=1 to 5 //(1, 2, 3, 4, 5)
val r5=1 to 5 by 2 //(1, 3, 5)
val r6=1.until(5) //--生成区间,不包含尾元素,(1, 2, 3, 4)
val r7=1.until(5,2) //(1, 3)
scala有4种前缀操作符,分别是 +(正数) -(负数) !(布尔取反) ~(进制取反),需要注意:前缀操作符前面必须加空格。
val r8=1.0 //> r8 : Double = 1.0
val r9=1+2*3 //> r9 : Int = 7
val r10=1.+(2).*(3) //--以方法的调用顺序来运算 //> r10 : Int = 9
val r11= +2 //--表示正数2 , r11 : Int = 2
val r12= -2 //--表示负数2,r12 : Int = -2
val r13= !true //--布尔取反,r13 : Boolean = false
val r14= ~0XFF //--进制取反, r14 : Int = -256
val r15=2.unary_+ //> r15 : Int = 2
val r16=2.unary_- //> r16 : Int = -2
val r17=true.unary_! //> r17 : Boolean = false
val r18=0xFF.unary_~ //> r18 : Int = -256
1.scala的通用的规则:scala会将方法体{}最后的一行代码当做返回值返回,不需要加return关键字
2..scala的Unit类型类比于Java的void,空类型
3.scala的Any类似java的Object类型
4.如果if else返回值类型不一致,返回的就是Any、
5.if else 是有返回值的,可以接
//根据scala函数式编程风格,建议做如下更改
//尽量使用常量
val val1=10;
//if……else最后一行的值是返回值,可省略return
val result=
if(val1<100){
"小了";
}else{
"大了";
}
print(result)
//也可以简化成下面的形式
val val2=10; println ( if( val2 < 100 ) " 小了" else "大了" );
val r = if(i >8) i // 编译器会默认认为else部分没有返回值,即Unit = ()
val r1: Any = if Any else Any
while用法
scala通过下标操作集合类型时,是用(index)来操作的,不同于java的[index]
for循环//一个简单的例子
val val1=List(1,2,3,4);
var index=0;
while(index<val1.size){
println(val1(index));
index+=1;
}
for(变量 <- 表达式/集合/数组; if 守卫)
for(i <- 0 to 3; j <- 0 to 3 if i!=j)
for(i<-1 to 10 by 2){ println(i) }
for(i<-1 to 10;if i>5;if i%2==0) println(i)
for(a<-1 to 9;b<-1 to a; val sep=if(a==b)"\r\n" else "\t"){ print(b+"*"+a+"="+a*b+sep) } /-注意赋值时,只能用常量val来接,不能用变量var接)
for yield 表达式for yield的作用:遍历一个集合,返回一个新集合。遍历的是什么集合类型,返回的就是对应的集合类型
声明map(key->value)val a2=Array(1,2,3,4) //> a2 : Array[Int] = Array(1, 2, 3, 4)
val a3=for(i<-a2)yield{i*2} //> a3 : Array[Int] = Array(2, 4, 6, 8)
val l1=List(1,2,3,4) //> l1 : List[Int] = List(1, 2, 3, 4)
val l2=for(i<-l1)yield{i*3} //> l2 : List[Int] = List(3, 6, 9, 12)
val m1=Map("tom"->23,"rose"->30,"jim"->35) //> m1 Map(tom -> 23, rose -> 30, jim -> 35)
//--遍历map的第一种方式
for(i<-m1){
println(i)
}
//--遍历map的第二种方式,掌握
for((k,v)<-m1){
println(v)
}
异常处理机制break 和continuetry{
throw new RuntimeException
}catch{
case t:NullPointerException=>{
println("null error")
}
case t:Exception=>{
println("other error")
}
}finally{
println("end")
} > other error end
val s1="world"
val r1=s1 match{
case "hello"=>{
println("1")
100
}
case "world"=>{
println("2")
200
}
} // r1 : Int = 200
1.scala使用break需要导包
2.breakable在for循环外,是break效果。在for循环内,是 continue效果
breakable
breakable(
for(i<-1 to 10){
if(i==8){
break
}else{
println(i)
}
}
) //> 1 2 3 4 5 6 7
continue
for(i<-1 to 10){
breakable(
if(i==8){
break
}else{
println(i)
}
)
} //> 1 2 3 4 5 6 7 9 10