一、前述

Scala是基于JVM的另一个语言。

Scala官网6个特征。

1).Java和scala可以混编

2).类型推测(自动推测类型)

3).并发和分布式(Actor)

4).特质,特征(类似java中interfaces 和 abstract结合)

5).模式匹配(类似java switch)

6).高阶函数

二、Scala基础

 1.数据类型

【Scala篇】--Scala初始与基础_scala

【Scala篇】--Scala初始与基础_for循环_02

 

 

【Scala篇】--Scala初始与基础_for循环_03

 2、变量和常量的声明

 

  • 定义变量或者常量的时候,也可以写上返回的类型,一般省略,如:val a:Int = 10
  • 常量不可再赋值

 

 


/**
* 定义变量和常量
* 变量 :用 var 定义 ,可修改
* 常量 :用 val 定义,不可修改
*/
var name = "zhangsan"
println(name)
name ="lisi"
println(name)
val gender = "m"
// gender = "m"//错误,不能给常量再赋值


类和对象

 

 

  • 创建类

 

 


class Person{ val name = "zhangsan" val age = 18 def sayName() = { "my name is "+ name } }


 

 

  • 创建对象

object Lesson_Class { def main(args: Array[String]): Unit = { val person = new Person() println(person.age); println(person.sayName()) } }


 

  • 伴生类和伴生对象

 


class Person(xname :String , xage :Int){ var name = Person.name val age = xage var gender = "m" def this(name:String,age:Int,g:String){ this(name,age) gender = g } def sayName() = { "my name is "+ name } } object Person { val name = "zhangsanfeng" def main(args: Array[String]): Unit = { val person = new Person("wagnwu",10,"f") println(person.age); println(person.sayName()) println(person.gender) } }


 PS:

建议类名首字母大写 ,方法首字母小写,类和方法命名建议符合驼峰命名法。

scala 中的object是单例对象,相当于java中的工具类,可以看成是定义静态的方法的类。object不可以传参数。另:Trait不可以传参数

中的class类默认可以传参数,默认的传参数就是默认的构造函数。

重写构造函数的时候,必须要调用默认的构造函数。

class 类属性自带getter ,setter方法。

使用object时,不用new,使用class时要new ,并且new的时候,class中除了方法不执行,其他都执行。

如果在同一个文件中,object对象和class类的名称相同,则这个对象就是这个类的伴生对象,这个类就是这个对象的伴生类。可以互相访问私有变量。

 

4、for ,while,do…while的使用

和until 的用法(不带步长,带步长区别)


/** * to和until * 例: * 1 to 10 返回1到10的Range数组,包含10 * 1 until 10 返回1到10 Range数组 ,不包含10 */ println(1 to 10 )//打印 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 println(1.to(10))//与上面等价,打印 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 println(1 to (10 ,2))//步长为2,从1开始打印 ,1,3,5,7,9 println(1.to(10, 2)) println(1 until 10 ) //不包含最后一个数,打印 1,2,3,4,5,6,7,8,9 println(1.until(10))//与上面等价 println(1 until (10 ,3 ))//步长为2,从1开始打印,打印1,4,7


创建for循环

 


/** * for 循环 * */ for( i <- 1 to 10 ){ println(i) }


 

创建多层for循环

 


//可以分号隔开,写入多个list赋值的变量,构成多层for循环 //scala中 不能写count++ count-- 只能写count+ var count = 0; for(i <- 1 to 10; j <- 1 until 10){ println("i="+ i +", j="+j) count += 1 } println(count); //例子: 打印小九九 for(i <- 1 until 10 ;j <- 1 until 10){ if(i>=j){ print(i +" * " + j + " = "+ i*j+" ") } if(i==j ){ println() } }


 

循环中可以加条件判断,分号隔开

 


//可以在for循环中加入条件判断 for(i<- 1 to 10 ;if (i%2) == 0 ;if (i == 4) ){ println(i) }


 

 

5、scala中不能使用count++,count—只能使用count = count+1 ,count += 1

6、for循环用yield 关键字返回一个集合。

7、while循环,while(){},do {}while()

 


//将for中的符合条件的元素通过yield关键字返回成一个集合 val list = for(i <- 1 to 10 ; if(i > 5 )) yield i for( w <- list ){ println(w) } /** * while 循环 */ var index = 0 while(index < 100 ){ println("第"+index+"次while 循环") index += 1 } index = 0 do{ index +=1 println("第"+index+"次do while 循环") }while(index <100 )