scala基础概念

来源:互联网 发布:magnet协议关联软件 编辑:程序博客网 时间:2024/06/02 02:27

Scala是面向行的语言,Scala 语句末尾的分号写或者不写都可以。

对象 - 对象有属性和行为。例如:一只哈士奇的属性有:颜色,名字,行为有:叫、跑、吃等。对象是一个类的实例。
- 类是对象的抽象;对象是类的具体实例。
方法 - 方法描述的基本的行为,一个类可以包含多个方法。
字段 - 每个对象都有它唯一的实例变量集合,即字段。对象的属性通过给字段赋值来创建。


基本语法
区分大小写;
类名 - 对于所有的类名的第一个字母要大写!如果需要使用几个单词来构成一个类的名称,每个单词的第一个字母要大写。例:class MyFirstScalaClass
方法名 - 所有的方法名称的第一个字母用小写!如果若干单词被用于构成方法的名称,则每个单词的第一个字母应大写。例:def myMethodName()
程序文件名 - 程序文件的名称应该与对象名称完全匹配。
def main(args: Array[String]) - Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分。


注释

object HelloWorld {   /* 这是一个 Scala 程序    * 这是一行注释    * 这里演示了多行注释    */   def main(args: Array[String]) {      // 输出 Hello World      // 这是一个单行注释      println("Hello, world!")    }}

引用
Scala 使用 import 关键字引用包。import语句可以出现在任何地方,而不是只能在文件顶部。


var声明变量,val声明常量
如var myBian : String = “Foo”//声明变量实例
val myChang : String = “loo”//修改以上变量,声明常量实例myChang
Scala 支持多个变量的声明:val xmax, ymax = 100 // xmax, ymax都声明为100
//在没有指明数据类型的情况下声明变量或常量必须要给出其初始值,
//其数据类型是通过变量或常量的初始值推断出来的,本例会推断为Int类型,否则将会报错。


变量类型声明
如var myVar :Int;也可以赋初值var myVar :Int=10;


scala访问修饰符:公共成员public、保护成员protected、私有成员private
默认情况下,Scala对象的访问级别都是 public。
在 scala 中,对保护(Protected)成员的访问比 java 更严格一些。
作用域保护:
Scala中,访问修饰符可以通过使用限定词强调。
格式为private[x] 或 protected[x] 这里的x指代某个所属的包、类或单例对象。
private[x]读作”这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是private。
这种技巧在横跨了若干包的大型项目中非常有用,它允许你定义一些在你项目的若干子包中可见但对于项目外部的客户却始终不可见的东西。


Scala 运算符
1. 算术运算符+-*/% 如:println(” a + b = ” + ( a + b ) ) //假设a=30,b=20,则输出为:a + b = 50
2. 关系运算符 == 、!= 、>=等
3. 逻辑运算符与&& 或|| 非!
例:假定变量 a为1,b为0,

object Test {   def main(args: Array[String]) {      var a = true;                         //非0值为ture      var b = false;      println("a && b = " + (a&&b) );       //输出为:a&&b =false      println("a || b = " + (a||b) );       //输出为:a||b =ture      println("!(a && b) = " + !(a && b) ); //输出为:!(a && b) =ture   }}  

4 . 位运算符:按位与&、 或|、 异或^、 取反~、 左移动运算符<<、 右移动运算符>>

5 . 赋值运算符
相加后再赋值 如:C += A 相当于 C = C + A
按位左移后再赋值 如:C <<= 2 相当于 C = C << 2
按位与运算后赋值 如:C &= 2 相当于 C = C & 2
6 . 运算符优先级
基本的优先级:
指针最优,单目运算优于双目运算。如正负号;
先乘除(模),后加减;
先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7 等价于 (1 << (3 + 2))&7
逻辑运算最后计算


循环
Scala 不支持 break 或 continue 语句,但从 2.8 版本后提供了一种中断循环的方式 //????
无限循环:如果条件永远为 true,则循环将变成无限循环。可以使用 Ctrl + C 键来中断无限循环。


函数
1 . 函数声明
def functionName ([参数列表]) : [return type] //函数声明格式 。return type 可以是任意合法的 Scala 数据类型
//如果你不写等于号和方法主体,那么方法会被隐式声明为”抽象(abstract)”,包含它的类型于是也是一个抽象类型。
2 . 函数定义
def functionName ([参数列表]) : [return type] = { //函数定义格式
function body
return [expr]
}
例:

object Add{    def addInt( a:Int, b:Int) : Int={   //函数返回类型为Int        var sum:Int=0        sum=a+b        return sum    }}

如果函数没有返回值,可以返回为Unit,类似于java的void。
如:

def hello() : Unit={        println("hello,scala")}

3 . 函数调用

调用上面的addInt()函数:object Test{    def main(args:Array[String]){        println("returned value is:" + addInt( 2,3 ))  //输出为 returned value is:5    }}

4 . Scala也是一种函数式语言,所以需要进一步学习scala的很多函数


闭包


从文件上读取内容,可以使用 Scala 的 Source 类及伴生对象来读取文件。


Scala Iterator(迭代器)
是一种用于访问集合的方法。
调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
调用 it.hasNext() 用于检测集合中是否还有元素。
让迭代器 it 逐个返回所有元素最简单的方法是使用 while 循环.
例 val it = Iterator(“Baidu”, “Google”, “Taobao”)
while (it.hasNext){
println(it.next()) //输出三行,为:Baidu Google Taobao
使用 it.min 和 it.max 方法从迭代器中查找最大与最小元素.
使用 it.size 或 it.length 方法来查看迭代器中的元素个数/长度。


类和对象
可以使用 new 关键字来创建类的对象,即实例化类。

import java.io._class Point(xc: Int, yc: Int) {   var x: Int = xc   var y: Int = yc   def move(dx: Int, dy: Int) {      x = x + dx      y = y + dy      println ("x 的坐标点: " + x);      println ("y 的坐标点: " + y);   }}object Test {   def main(args: Array[String]) {      val pt = new Point(10, 20);     //new创建对象      //移到一个新的位置      pt.move(10, 10);                //输出为  x 的坐标点: 20                                                y 的坐标点: 30   }}

继承
重写一个非抽象方法,必须使用override修饰符。
只有主构造函数才可以往基类的构造函数里写参数。
在子类中重写超类的抽象方法时,你不需要使用override关键字。
Scala 使用 extends 关键字来继承一个类。


Scala 单例对象
关键字 object
object对象不能带参数。
当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:companion object。
你必须在同一个源文件里定义类和它的伴生对象。
类被称为是这个单例对象的伴生类:companion class。
类和它的伴生对象可以互相访问其私有成员。


Scala Trait(特征)
关键字是 trait
与接口不同的是,它还可以定义属性和方法的实现。
一般情况下Scala的类只能够继承单一父类,但是如果是 Trait(特征) 的话就可以继承多个,从结果来看就是实现了多重继承。
特征构造顺序,特征也可以有构造器。构造器的顺序是类的线性化的反向。


Scala 模式匹配
关键字case
箭头符号 => 隔开了模式和表达式。
match 对应 Java 里的 switch,但是写在选择器表达式之后。即: 选择器 match {备选项}。
match 表达式通过以代码编写的先后次序尝试每个模式来完成计算,只要发现有一个匹配的case,剩下的case不会继续匹配。


使用样例类
使用了case关键字的类定义就是就是样例类(case classes)
样例类是种特殊的类,经过优化以用于模式匹配。


Scala 正则表达式
通过 scala.util.matching 包中的 Regex 类来支持正则表达式。
将匹配的文本替换为指定的关键词,可以使用 replaceFirstIn( ) 方法来替换第一个匹配项,使用 replaceAllIn( ) 方法替换所有匹配项。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 生完小孩没有奶水怎么办 生完宝宝没有奶怎么办 剖腹产奶涨的疼怎么办 生产一天了没奶怎么办 第一天断奶 奶水一直流出怎么办 新生儿刚出生没奶水怎么办 安卓手机死机了怎么办 婴幼儿几天不拉大便怎么办 樱桃吃多了胃不舒服怎么办 空腹吃水果胃不舒服怎么办 吃水果后胃不舒服怎么办 吃水果伤胃了怎么办 大人吃退烧药不出汗怎么办 稍微吃点凉水果胃就疼怎么办 1岁宝宝感冒发烧怎么办 3岁小儿反复发烧怎么办 热感冒喉咙疼要怎么办 孩子感冒咳嗽嗓子疼怎么办 孕妇感冒了嗓子疼咳嗽怎么办 4岁宝宝反复高烧怎么办 小孩吃完药不退烧怎么办 六个月婴儿发烧怎么办退烧快点 咳嗽20天老不好怎么办 吃过退烧药出汗怎么办 5岁儿童发烧39度怎么办 小孩烧到39度怎么办 儿童7岁发烧39度怎么办 发烧没药怎么办怎样退烧快 小孩发烧怎么办怎样退烧快 发烧头疼怎么办最快最有效 发烧头晕怎么办最快最有效 婴儿发烧怎么办最快最有效 孩子一直37度8怎么办 一岁半宝宝37度5怎么办 发烧打了针35度怎么办 小孩发烧吃了鱼怎么办 八个月婴儿发烧39度怎么办 婴儿反复发烧39度怎么办 宝宝发烧了怎么办如何退烧 宝宝烧到38.8度怎么办 小孩发烧到39度怎么办