zoukankan      html  css  js  c++  java
  • 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去构造对象。

  • 相关阅读:
    Selenium WebDriver 中鼠标和键盘事件分析及扩展
    Windows Mobile 常用键值VK对应表
    application.yml
    示例
    秒懂HTTPS接口(实现篇)
    秒懂HTTPS接口(接口测试篇)
    秒懂HTTPS接口(原理篇)
    SpringBoot全局捕获异常示例
    官方文档
    Python基础02——控制流
  • 原文地址:https://www.cnblogs.com/yanghaolie/p/6806052.html
Copyright © 2011-2022 走看看