scala记录(1)scala基础
1.基础数据类型
2.常量和变量的声明
- 定义变量或者常量的时候,也可以写上返回的类型,一般省略,如:val a:Int = 10
- 常量不可再赋值
/** * 可以在变量名后面加上变量类型,不加的话会自己推断类型 * 另外scala换行的时候可以不加分号,多行代码写在一行要用分号隔开。 * 如以下声明方式 * 定义变量和常量 * 变量 :用 var 定义 ,可修改 * 常量 :用 val 定义,不可修改 * 只有这两种声明方式 */ var a = 10 val b = 10 var c:Int = 10 val d:String = "a"
3.类和对象
类(class):
/** * 类的声明可以带构造器,直接写在类的名字后面,如Person,构造器需要传入的参数必须带上类型 * 同样也可以不带,如Son * class 是scala中的类,类可以传参,传参就有了默认的构造函数。类中的属性默认就有getter,setter方法。重写构造,第一行要调用默认的构造 * 当new 一个class时,类中除了方法不执行,其他都执行。同一个包下,class的名称不能相同。 */ class Son{ val name = "erzi" var age = 19 } class Person(xname:String,xage:Int){ val name = xname var age = xage var gender = 'm' /** * 重写构造,如下,同JAVA,重写构造器方法的第一行需调用原始构造器 */ def this(yname:String,yage:Int,ygender:Char){ this(yname,yage) this.gender = ygender } def sayName() = { println(this.name+"---"+this.age+"---"+this.gender) } }
对象(object):不可以传参
有一篇详细的关于Object的博文:https://blog.csdn.net/ym01213/article/details/81105556
object LearnClass { def main(args: Array[String]): Unit = { /** * scala中定义在object中的变量,方法都是静态的,object叫对象,相当于java中的单例对象。object不可以传参,Trait也不可传参。 * scala中 如果一个class名称和object的名称一致,那么这个class叫做这个object的伴生类,这个object叫做这个class的伴生对象,他们之间可以互相访问私有变量。 */ val person = new Person("zhangsan",18) person.sayName() val person1 = new Person("lisi",11,'f') person1.sayName() } }
伴生类和伴生对象:
一个class名称和object的名称一致,那么这个class叫做这个object的伴生类,这个object叫做这个class的伴生对象,他们之间可以互相访问私有变量。
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) } }
4.if..else
/** * if else */ val age =18 if (age < 18 ){ println("no allow") }else if (18<=age&&age<=20){ println("allow with other") }else{ println("allow self") }
5.for,while,do...while
5.1to和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
5.2创建for循环
/** * for 循环 * */ for( i <- 1 to 10 ){ println(i) }
5.3创建多层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() } }
5.4 for循环中可以加条件判断,可以使用分号隔开,也可以不使用分号
//可以在for循环中加入条件判断 for(i<- 1 to 10 ;if (i%2) == 0 ;if (i == 4) ){ println(i) }
5.5scala中不能使用count++,count—只能使用count = count+1 ,count += 1
5.6for循环用yield 关键字返回一个集合
5.7while循环,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 )