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

原文地址:https://www.cnblogs.com/jiayupeng/p/9332484.html

时间: 2024-11-09 00:53:57

scala学习02-类与对象,类型与操作的相关文章

scala学习手记4 - Java基本类型对应的scala类

在Java中变量类型分为两大类:基本类型和引用类型.虽然在JDK1.5以后引入了自动装箱和自动拆箱机制,大大减少了我们在直接类型和引用类型之间的纠结,但仍有一些我们不得不考虑的问题.比如我在工作遇到的基本类型和其包装类型的默认值的问题,比如泛型只能使用引用类型,比如默认情况下直接类型的值不能作为对象来操作(1.toString()就不能通过编译)等等. 在scala中一切都是对象. 在scala中1.toString()这样的写法是完全可以接受的.java中的每个基本类型在scala中都有对应的

scala学习手记17 - 容器和类型推断

关于scala的类型推断前面已经提到过多次.再来看一下下面这个例子: import java.util._ var list1: List[Int] = new ArrayList[Int] var list2 = new ArrayList[Int] list2 add 1 list2 add 2 var total = 0 for (index <- 0 until list2.size()) { total += list2.get(index) } println("Total i

Java学习笔记--类和对象

1.介绍面向对象的编程 面向对象是现在主流的编程样例,它替代了以前C语言使用时的"结构体",Java是一门面向对象的语言,所以需要熟悉面向对象的概念.面向对象的程序由很多对象组成,每个函数对于用户而言,都有特殊的功能.程序里面的很多对象都可以直接从公共库里面拿来直接用.不用去研究这些功能怎么去实现的.传统的结构的编程由一系列算法步骤来解决问题.一旦这些步骤确定下来,也要同时确定存储数据的方式.也就是数据结构一开始学习的:算法+数据结构=程序. 先决定算法,再决定使用什么样的结构来存储数

scala学习手记15 - 独立对象和伴生对象

上一节中的单例对象MarkerFactory 就是一个独立对象的例子.尽管它管理着Marker类,但是它并没有关联到任何类上. scala也可以创建关联到类上的对象.这样的对象同类共享同一个名字,这样的对象称为伴生对象,对应的类就称为伴生类.在scala里,类和伴生对象没有界限,它们互相可以访问彼此的private 方法和private 属性.下面使用伴生对象重写了Marker: class Marker private(val color: String) { println("Creatin

Python学习笔记(四)Python对象类型及其运算

Python对象的相关术语: Python程序中保存的所有数据都是围绕对象这个概念展开的 程序中存储的所有数据都是对象 每个对象都有一个身份,一个类型和一个值 例如,school="MaGe linux"会以"MaGe linux"创建一个字符串对象,其身份是指向它在内存中所处位置的指针(其在内存中的地址),而school就是引用这个具体位置的名称 In [14]: name="herry" In [15]: id(name) Out[15]: 

『iOS开发』「OC」02 - 类和对象

一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类. 术语:OO面向对象.OOP面向对象编程 二.类和对象 (一)关于类 类的设计只关注三个东西:类名.属性和方法 注意:一般名词都是类,拥有相同属性和行为的对象都可以抽象为一个类,类名是标识符的一种,需要符合规范,通常类名的第一个字母大写,且不能有下划线,如果有多个单词则使用驼峰标识.在对方法进行类的划分中,一般

Scala学习笔记之伴生对象

所谓伴生对象, 也是一个Scala中的单例对象, 使用object关键字修饰. 除此之外, 还有一个使用class关键字定义的同名类, 这个类和单例对象存在于同一个文件中, 这个类就叫做这个单例对象的伴生类, 相对来说, 这个单例对象叫做伴生类的伴生对象. 举个栗子:object Companion { def show = println("I am a companion")} class Companion { def shout = Companion.show}(Compan

【Java学习】类、对象、实例—类是对象的抽象,对象是类的实例

类.对象.实例的关系是什么,如果不能很好的理解什么是类什么是对象就无法讲清楚, 类:某种事物与另一种事物具有相似性,比如哈士奇和泰迪,我们发现他们有一些相似的特性和行为,在生物学上,他们都属于“狗”,狗都会什么呢?他们都会叫.有四条腿等等,我们把这种具有相同属性和行为的事物就叫做类,就是我们常说的“他们是一类东西”.同时我们知道在编程语言中又数据类型这种东西,那么“类”就是一种数据类型,一种由用户定义的引用类型.并且在类中,包含属性和方法,用来描述对象的特征(比如狗一定有鼻子)和行为(比如狗一定

Java学习8——类(对象)之间的关系

(基础语法结束,开始看面向对象) 关联 关联体现的是两个类之间语义级别的一种依赖关系,比如我和我的老师. 继承(一般和特殊) 继承是指一个类继承另外一个类的的功能,并可以增加新的功能,"XX是一个AA"的语义很符合继承的含义."猴子是一种动物"可以抽象为"猴子类"继承"动物类". 聚合(整体和部分) 聚集,整体和部分是可分离的,可以具有各自的生命周期.部分可以属于多个整体的对象,也可以 为多个整体对象共享,比如球员和球队.教练

scala学习手记20 - 方法返回类型推断

除了推演变量的类型,scala也会推演方法的返回类型.不过这里有一处需要注意:方法返回类型的推演依赖于方法的定义方式.如果用等号"="定义方法,scala就会推演方法返回类型:否则,它就认为方法的返回为void.看一个例子: def printMethodInfo(methodName: String) { println("The return type of " + methodName + " is " + getClass().getDe