• scala学习02-类与对象,类型与操作


    Scala类与对象,类型与操作

    类的声明

    class MyClass{
        
        private var num = 0 // 如果想要不对外开放,使用private,如果不写,默认就是public
        
        //方法
        //花括号前没有=号,这种情况下,返回值类型一定是Unit,也就是空,所以如果想有返回值,一定要加=号
        def add(b:Byte){
            num += b
        }
        //如果计算表达式只有一行,可以省略掉花括号
        def add1(b:Byte):Unit = num += b
        
        //有返回值的正常方法:
        def checkSum(): Int = ~(num & OxFF) + 1
    }
    

    Singleton对象

    普通类中不能定义静态成员,要定义静态成员,就定义在一个单例类中

    //定义位置:如果与普通类的名字一样,那么成为普通类的伴生对象,要定义在同一个源文件中
    //类和伴生对象可以互相访问其私有成员
    object MyClass{
        
        //类中的成员和普通类一样
        def calculate(s:String):Int = {
            //TODO...
        }
    }
    
    //类似于java中的静态方法工具类
    //使用方式也是类名点方法名
    MyClass.calculate("a")
    

    Scala程序运行

    需要一个main函数

    //在单例对象中定义main函数
    object Summer{
        def main(args:Array[String]){
        //TODO..
    	}  
    }
    

    需要编译执行

    编译:
    scalac MyClass.scala Summer.scala 
    执行:
    scala Summer of love
    

    Application特质

    让单例对象继承Application,然后把要写在main函数里面的函数体,直接写在花括号中,不用写main了,因为Application已经提供了

    object Summer extends Application{
        
        //TODO..
        for(season <- List("fall","winter","spring"))
        	println(season)
        
    }
    

    基本类型

    包括String和值类型。

    值类型包括:

    • Byte
    • Short
    • Int
    • Long
    • Char
    • String
    • Float
    • Double
    • Boolean

    String 在java.lang包下

    其他值类型在scala包下

    可以直接用字面量,也就是,直接使用具体的值,而不需要使用引用。

    符号字面量

    //语法: 'symbol
    val a = 'hello
    a: Symbol = 'hello
    //例如方法:
    def updateRecordByName(r:Symbol,value Any){
        //TODO..
    }
    

    操作符和方法

    +-*/ 这些符号其实都是方法名。

    以上的几个是中缀操作符

    //例如:
    val a = 3 + 5 // +号是中缀操作符,实际上是 3.+(5)
    val b = "hello"
    val c = b indexOf 'o'//这个indexOf也是中缀操作符,实际上是 b.indexOf('o')
    

    任何方法都可以是操作符

    除了中缀操作符,还有前缀和后缀操作符

    //前缀操作符只有 + - ! ~ 四种
    val a = -3.0 //前缀操作符,实际上Scala调用了(3.0).unary_-  ,就是给操作符加上“unary_”的前缀
    //如果给类定义了 unary_*方法,也不能使用*p
    
    //后缀操作符,就是不用点和括号调用的不带参数的方法,比如:
    val s = "Hello"
    val s1 = s toLowerCase//toLowerCase就成了后缀操作符了
    

    数学运算和关系运算和位运算

    与java类似

    相等性判断

    直接使用 == 或者 !=

    因为 == 已经被仔细加工过了,在大多数情况下都可以实现合适的相等性比较

    //比较规则是:首先检查左侧是否为null,如果不是,调用左操作数的equals方法。而精确的比较取决于做操作数的equals方法定义。由于有了自动的null检查,因此不需要手动再检查一遍了。
    scala> 1 == 1.0
    res3: Boolean = true
    
    scala> List(1,2,3) == null
    res4: Boolean = false
    

    基本类型有对应的富包装类

    富包装类提供了更多的操作,通过隐式转换可以直接使用

    基本类型 富包装
    Byte scala.runtime.RichByte
    Short scala.runtime.RichShort
    Int scala.runtime.RichInt
    Long scala.runtime.RichLong
    Char scala.runtime.RichChar
    String scala.runtime.RichString
    Float scala.runtime.RichFloat
    Double scala.runtime.RichDouble
    Boolean scala.runtime.RichBoolean
  • 相关阅读:
    HDU_2010——水仙花数
    HDU_2000——ASCII码排序sort()
    HDU_2008——数值统计
    HDU_2005——今天是今年的第几天
    HDU_2004——成绩转换
    HDU_2002——计算求的体积
    InnoDB可重复读隔离级别的底层实现原理
    nginx s reload原理
    Redis主从复制原理总结
    HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
  • 原文地址:https://www.cnblogs.com/jiayupeng/p/9332484.html
Copyright © 2020-2023  润新知