Scala基础操作

数据类型
数据类型
描述
Byte
8位有符号补码整数。数值区间为 -128 到 127
Short
16位有符号补码整数。数值区间为 -32768 到 32767
Int
32位有符号补码整数。数值区间为 -2147483648 到 2147483647
Long
64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807
Float
32 位, IEEE 754 标准的单精度浮点数
Double
64 位 IEEE 754 标准的双精度浮点数
Char
16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF
String
字符序列
Boolean
true或false
Unit
表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
Null
null 或空引用
Nothing
Nothing类型在Scala的类层级的最底端;它是任何其他类型的子类型。
Any
Any是所有其他类的超类
AnyRef
AnyRef类是Scala里所有引用类(reference class)的基类

变量声明

在学习如何声明变量与常量之前,我们先来了解一些变量与常量。
  • 一、变量: 在程序运行过程中其值可能发生改变的量叫做变量。如:时间,年龄。
  • 二、常量 在程序运行过程中其值不会发生变化的量叫做常量。如:数值 3,字符'A'。
在 Scala 中,使用关键词 "var" 声明变量,使用关键词 "val" 声明常量。
声明变量实例如下:
var myVar : String = "Foo" var myVar : String = "Too"
以上定义了变量 myVar,我们可以修改它。
声明常量实例如下:
val myVal : String = "Foo"
以上定义了常量 myVal,它是不能修改的。如果程序尝试修改常量 myVal 的值,程序将会在编译时报错。

变量类型引用

在 Scala 中声明变量和常量不一定要指明数据类型,在没有指明数据类型的情况下,其数据类型是通过变量或常量的初始值推断出来的。
所以,如果在没有指明数据类型的情况下声明变量或常量必须要给出其初始值,否则将会报错。
var myVar = 10 ;
val myVal = "Hello, Scala!" ;
以上实例中,myVar 会被推断为 Int 类型,myVal 会被推断为 String 类型。

Scala 多个变量声明

Scala 支持多个变量的声明:
val xmax , ymax = 100 // xmax, ymax都声明为100
如果方法返回值是元组,我们可以使用 val 来声明一个元组:
scala > val pa = ( 40 , "Foo" )
pa : ( Int , String ) = ( 40 , Foo )
object ScalaDemo {
def main(args:Array[String]):Unit={
val name="James"
println(s"Hello,$name")
println(s"1+1=${1+1}")
val height=1.9d
val height1=1.32d
val height2=1.5d
val salary=2000.38
val name1="liSan"
val name2="zhang"
val salary1=400000
val salary2=4000.38
println(f"$name%s is $height%4.2f meters tall,月薪:$salary%9.2f 元")
println(f"$name1%s is $height1%4.2f meters tall,月薪:$salary1%9.2f 元")
println ( f" $ name2 %s is $ height2 %4.2f meters tall,月薪: $ salary2 %9.2f 元" )
运行结果
Hello,James
1+1=2
James is 1.90 meters tall,月薪:  2000.38  元
liSan is 1.32 meters tall,月薪:400000.00 元
zhang is 1.50 meters tall,月薪:  4000.38 元
在控制台输入数字
println("请输入数字:")
val num =StdIn.readInt()
for循环
fo'r(i<-0 until 10)print(i)//从0到9
fo'r(i<-0 to 10)print(i)//从0到10
fo'r(i<-0 until 10 reverse)print(i)//从9到0
元组
val tp=(1,"hello","d")//最长22个
println(tp._1)--->1
println(tp._2)--->hello
println(tp._3)--->d
遍历元组
1.def p:Iterator[Any]={tp.productIterator}//val p: Iterator[Any]=tp.productIterator//val  p =tp.productIterator
for(in<-p){//迭代器
println(in)
}
2.tp.productIterator.foreach(x=>println(x))//增强for
二元组置换(特殊)
val t=new t1[String,Int]("chen",26)// val t= ("chen",26)
println(t._1,t._2)
val swap: (Int, String) = t.swap//置换,二元组特殊方法,其他没有
println(swap._1,swap._2)
println(swap._1)
部分函数
def  alarmMsg(title:String,content:String,height:Double):Unit={
println(title+"\t"+content+":"+height)
}
alarmMsg("警报","空气甲醛浓度",21.42d)---> 警报    空气甲醛浓度为:21.42
val title="警报"
def alarmMsg2=alarmMsg(title,content:String,height:Double)
alarmMsg2("空气甲醛浓度为:",21.43d)--->  警报    空气甲醛浓度为:21.32
def alarmMsg3=alarmMsg(content,height:Double)
alarmMsg3(12.45d) --->  警报    空气甲醛浓度为:21.32
偏函数
def funPartition2:PartialFunction[Int,String]={
case 1=>"优秀"
case 2=>"良好"
case 3=>"合格"
case _=>"不及格"
}
println(funPartition2(3))---->合格
println(funPartition2(4))---->不及格
val arr:Array[Int]=Array(1,3,4,3,2)
val strings:Array[String] = arr.collect(funPartition2)
遍历
println(strings.toList)
for(in<-strings){
println(in)
}
函数作为返回值
def funTest():(String,String)=>String={
        def funDemo(str:String,str1:String):String={
            str+"@@"+str1
}
funDemo
}
println(funTest()("hello","world"))
函数作为参数
def funTest1(f:(Int,Int)=>Int)):Int={
val a=100
val b=50
f(a,b)
}
val sum=(a:Int,b:Int)=>a+b
val ji=(a:Int,b:Int)=>a*b
println(sum(2,3))---->5
println(funTest(sum)))---->150
println(funTest(ji)))---->5000
递归函数
def  ji(num:Int):Int{
if(num==1) 1     
else num*ji(num-1)
}
样例类+模式匹配
case class Teachers(name:String,age:Int)
def match3(teacher:Teachers):Unit={
teacher match{
case Teachers("zs",age)=>println("hello"+age)
case Teachers("kb15",4)=>println("kb15学习4个月")
case Teachers(name,32)=>println("名字"+name+"年龄"+32)
}
}
match3(Teachers("kb15",4))
def match4(level:String,name:String):Unit={
level match{
case "A"=>println("优秀")
case "B"=>println("良好")
case "C" if name=="zs"=>println("合格")
case "C"=>println("合格")
case _ if name=="bolo"=>println("特殊学生")
case _=>println("不及格")
}
}
match4("A","zs")
隐式类implicit
1.直接在object +类名{}中写
2.新建一个隐式类,然后在直接import 包名.类名._ 引用
使用类
package cn.kgc
import cn.kgc.Impliciteg._
class ImplicitDemo{}
object ImplicitDemo {
val a:Int="3"
val b:String=3
val c:Double="3.5"
//调用函数有隐式参数的方法时 传值>隐式参数>大于默认值
def sum(a:Int)(implicit b:Int):Int={ //隐式参数必须写在后面,且同类型只能出现一个
val sum1: Int = a + b
println(str+" "+sum1)
sum1
}
println(sum(1))
//sum(1)
val i: Int = sum(10)
//println(i)
//val j: Int =sum(10)(2)//已传入参数为主
// println(j)
val demo=new ImplicitDemo
// private val i1: Int = demo.ji(10, 20)
println(demo.ji(10, 20))
// private val str1: String = demo.madeString("kb15")
println(demo.madeString("kb15"))
def main (args:Array[String]):Unit={}
}
隐式类
object Impliciteg {
implicit val num:Int=10//隐式参数
implicit val str:String="hello"
implicit def stringToInt(value:String):Int={
Integer.parseInt(value)
}
implicit def intToString(value:Int):String={
value.toString
}
implicit def stringToDouble(value:String):Double={
//Integer.parseInt(value).toDouble
java.lang.Double.parseDouble(value)
}
implicit class numOperation(implicitDemo: ImplicitDemo){
def ji(a:Int,b:Int):Int={
println("进入隐式类",a,b)
a*b
}
}
implicit class tringOperation(implicitDemo: ImplicitDemo){
def madeString(str:String):String={
str+" "+str.length
}
}
}
构造参数
package cn.kgc
//伴生类
class Oop1 (name:String,age:Int){//scala默认的主构造函数
private var uname:String=name
private var uage :Int=age
private var uaddress:String=_
def this(){
this(" ",0)
println("无参")
}
def this(name:String){
this(name,0)
}
def this(age:Int){
this("",0)
}
def this(name:String,age:Int,address:String){
this(name,age)
this.uaddress=address
}
def showMsg():Unit={
println("进入到Oop1 class showMsg()方法中")
println(this.uname,this.age,this.uaddress)
Oop1.showObjectMsg
println(Oop1.like)
println("进入到Oop1 class showMsg()方法,最后一行")
}
}
//伴生对象
object Oop1{
private var like:String="篮球"
def sum(a:Int,b:Int):Int={
println(a,b)
a+b
}
def showObjectMsg()={
println("Object Oop1 showOjbectMsg")
}
//加上可以省去new对象
def apply(name: String, age: Int): Oop1 = new Oop1(name, age)
def apply(name: String): Oop1 = new Oop1(name)
def apply(age: Int): Oop1 = new Oop1(age)
def apply(): Oop1 = new Oop1()
def apply(name: String, age: Int, address: String): Oop1 = new Oop1(name, age, address) 
def main(args:Array[String]):Unit={
println("main")
// val oop=new Oop1("chen",26)
val oop2 = new Oop1
// val oop3 = new Oop1("kb11")
// val oop4 = new Oop1(12)
// val oop5 = new Oop1("gree", 21, "安德门")
oop2.showMsg
val opp6=Oop1
val opp7=Oop1("zs")
println("main end")
// println(oop.uname)
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

s_schen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值