scala 学习笔记

刚开始就是有个点写个点,比较乱

学习完一个阶段在做整理

1.在scala中用方法转换数据类型,而不是用强制转换,如99.toInt

2. 常见的运算符 + - * / %其实是方法,a+b 是a.+b或a.+(b)  

   1.to(10)  可以写成 1 to 10

3.数据自增自减没有++,--需要用+=1和-=1

4.不带参数的方法可以不带() 如"hello".distinct

5.scala api 中C是类O是伴生类即静态类

6.避免用return、做好模式匹配(异常处理)【在函数中用return相当于break】

//这个函数不会返回值   
 def getsum(n1:Int,n2:Int)={
      val sum=n1+n2
    }

//这个才会返回sum
    def getsum(n1:Int,n2:Int)={
      val sum=n1+n2
      sum
    }

//当然也能这样用
    def getsum(n1:Int,n2:Int) :Int={
      val sum=n1+n2
      return sum
    }

//这个println("aaa")不会执行
def getsum(n1:Int,n2:Int){

    val sum=n1+n2
    return
    println("aaa")
  }

 

 

7.scala的类型推导 var a = x>3 ? "hello" : 100  可以返回不同的类型值 

8.scala的返回类型 Unit写做(),表示一个”无值”的值

9.以赋值语句结尾的{}代码块,如{r=r*n;n-=1}的值是Unit类型,也就是没有值,什么都不返回

10.从控制台读入数据readline,也可以用readInt等等--readline可以带参数作为默认提示

11.  0 util s.length 等效于0到s.length -1 不含上限

12.

13.for/yield   如果for循环体以yield开始,则会构造出一个集合,每次迭代会构造出集合中的一个值

14. 

class Person(name:String ,age:Int) //不带val,也不带var,只有构造器,没有get,set方法
class Person(val name:String ,val  age:Int) //用val标记,有get,没set
class Person(var name:String ,var  age:Int) //用var标记,get,set都有
15.关于apply

apply是scala中的语法糖:对一个对象obj上调用obj(),scala编译器会转换为obj.apply();

在一个类clazz上调用clazz(),scala编译器会转换为clazz_company_obj.apply(),其中clazz_company_obj为clazz的伴生对象。

就是相当于java的构造,会生成一个实例

16.变长参数

def sum(args: Int*)={//ToDo}

变长参数如果传个sum(1 to 5) 会把1 to 5 当成元素报错,正确用法加:_* 就会当成序列了

sum(1 to 5:_*)

17.数组和缓冲数组提供了一个"加强"版的toString方法,mkString可以指定分隔符,前缀后缀。

 18.scala.collection.javaConversions 里有隐式转换,方便java 和scala的数组集合自动转换。

19.方法或函数的参数在内部无法自增自减,需要先赋值给一个内部临时变量,才能操作。

20.创建映射Map用—> 和()都可以,也可以用java的put,

var map2=("a"->1,"b"->2)  

var map3=(("a",1),("b",2))

21.去值的时候可以和数组一样map2("a"),也可以map2.get("a")

22.增删改

map("a")=100 //改

map+=("c"->3)//增

map-="c" //删

java以前的put,remove也可以用

23.迭代 for((k,v)<-map){//ToDo}

24.java scala相互转换

 

25.映射的遍历  for((k,v) <-  映射) TODO

 26.无参数的方法可以加(),也可以不加,建议是改值的时候加,取值的时候不加--这种风格

27.scala中的get/set方法

28.用注解生成get/set方法

 

 29.创建数组加不加new的问题

30.scala里的类、类的对象

class 是定义类, object 伴生对象  --伴生 跟着同名的class走的 --对象 创建类对象的时候,默认是调用同名object的apply创建对象的。

31.App特质

在调用过程中特质先于单例对象构建,特质的main方法的调用和单例对象的调用有关

32.包的引入

33.子类调用父类的方法

supper.xxx

34.子类重写父类的字段

35.Source.stdin控制台输入

36.序列化 

@SerialVersionUID(100l) class Person extends Serializable{
}

@SerialVersionUID(100l) 可以不写,用默认UID

37. scala.sys 获取系统参数什么的

38.scala进程控制  和shell互交  

导入import sys.process._ 包  

符号  
!(返回0和错误代码) 
!! (返回执行结果的字符串)
#|(管道)
#> (重定向) 等等。。

import sys.process._ 
//var cmd="hadoop fs -ls /user" linux没试,windows下这个没什么鸟用
var cmd="java -version!"
var tmp = Process(cmd)
println(tmp.toString())

39.正则,replace变的高级了 

 40.特质 --一个更好用的像类也像接口的一个东西

40.1 抽象方法不需要用 abstract修饰,默认没有实现的方法就是抽象类,重写抽象方法也不需要加override关键字

40.2构造对象的时候也可以加入特质--牛逼了吧!

40.3 特质的构造顺序

40.4 特质和类

41.结合性

42.数组和映射(map)的apply和update方法

43.构造类对象的时候,什么时候用new 构造,什么时候可以不用new --重点在该类伴生对象的apply方法

有它即可不用new去构造对象。

 

posted @ 2017-05-04 11:22  Nucky_yang  阅读(188)  评论(0编辑  收藏  举报