Scala基础学习总结

引言:

Scala是一门多范式的编程语言,运行在java虚拟机上,并兼容现有的java程序,它运行在JVM上,并可以调用现有的java类库。Scala特性:面向对象特性、函数式编程、静态类型、扩展性、并发性。使用Scala必须要先安装java(JDK版本1.5以后)。

Scala访问修饰符:

Scala访问修饰符基本和java一致,有private、protected、public,如果没有指定修饰符,默认为public,Scala外层类不能访问内部类的私有变量。

Scala运算符:

Scala运算符主要有算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符,基本运算符和java一致。
::作用

X::List(x)相当于把x往list里面注入

:::作用

List1:::List2连接两个集合

:+作用

在尾部追加元素

+:作用

在头部追加元素

Scala条件语句和循环语句:

与java一致

Scala函数:

(1)函数声明:def functionName(参数):返回类型

(2)函数定义:def functionName(参数):返回类型{ 函数功能体,返回值}

(3)函数调用和java类似。

Scala闭包:

闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。闭包通常来讲是可以访问一个函数里面局部变量的另外一个函数。

object Test { 
def main(args: Array[String]) { 
println( "muliplier(1) value = " +  multiplier(1) ) 
println( "muliplier(2) value = " +  multiplier(2) ) 
} 
var factor = 3 
val multiplier = (i:Int) => i * factor  //这个计算值就是返回值
}

Scala字符串:

用法与java相似

Scala数组:

(1)数组声明

var z:Array[String] = new Array[String](3)

var z = new Array[String](3)

var z = Array("Runoob",  "Baidu", "Google")

索引访问格式使用: 数组名(index)
(2)多维数组

var myMatrix = Array.ofDim[Int](3,3)

(3)合并数组

var  myList3 =  concat( myList1, myList2)

(4)创建区间数组

var myList1 = range(10, 20, 2)

最后一个参数确定步长,不填默认为1

(5)其他方法:

可以进入Array类中查看scala数组中具有的相关方法

Scala集合:

有List、Set、Map、元组、Option、Iterator

其中元组中可以插入不同的类型的值

val t = new Tuple3(1, 3.14, "Fred")

其中Option中表示有可能包含值,有可能不包含值的容器

    val myMap: Map[String, String] =  Map("key1" -> "value")
    val value1: Option[String] =  myMap.get("key1")
    val value2: Option[String] =  myMap.get("key2")
    println(value1) // Some("value1") 
    println(value2) // None

Scala迭代器:

基本使用方法和java一致

Scala类和对象:

(1)继承

父类中的字段如果有val修饰,子类中必须要override和val修饰,两者都不可缺少。

Scala只允许继承一个父类

(2)单例对象

Scala中是没有static这个东西的,但是它也提供了单例模式的实现方法,使用object关键字。Scala使用单例模式时,除了定义的类之外还要定义一个同名的object对象,它和类的区别是,object对象不能携带参数。当单例对象和某个类重名的时候,它被称为这个类的伴生对象,companion object。必须在同一个源文件里定义类和它的伴生对象,类和它的伴生对象可以互相访问其私有成员。

Scala特征:

Trait相当于java的接口,也可以说是抽象类,可以多重继承

Scala模式匹配:

模式匹配类似于java的switch,用箭头符号隔开模式和表达式。

样例类常用于优化模式匹配

object Test {

  def main(args: Array[String]) {
  val alice = new Person("Alice", 25)
  val bob = new Person("Bob", 32)
  val charlie = new Person("Charlie", 32)
  for (person <- List(alice, bob, charlie)) {
  person match {
  case Person("Alice", 25) => println("Hi  Alice!")
  case  Person("Bob", 32) => println("Hi Bob!")
  case Person(name, age) => println("Age: " +  age + " year, name: " + name + "?")
    }
  }
}
   //样例类
  case class Person(name: String, age: Int)
}

Scala正则表达式:

def main(args: Array[String]) {
  val pattern = new Regex("(S|s)cala")  //用管道设置不同的匹配模式  首字母可以是大写 S 或小写s
  val str = "Scala is scalable and cool"
  println((pattern findAllIn str).mkString(","))   //使用逗号 , 连接返回结果
}

用findAllIn可以找到所有匹配项,用mkString连接返回结果,中间逗号隔开

Scala异常处理:

异常处理和java相似,但是异常抛出的方式和捕获与java在形式上存在区别:

通过模式匹配的机制来对不同的异常进行捕获

try {
  val f = new FileReader("input.txt")
} catch {
  case ex: FileNotFoundException =>{
  println("Missing file exception")
}
  case ex: IOException => {
  println("IO Exception")
  }
}finally {
  println("Exiting finally...")
}

Scala提取器:

def  main(args: Array[String]) {
      println ("Unapply方法: " + unapply("Zara@gmail.com"));
      println ("Unapply方法: " + unapply("Zara Ali"));
 }

   //提取方法(必选)
   def unapply(str: String): Option[(String,  String)] = {
      val parts = str split "@"
      if (parts.length == 2){
         Some(parts(0), parts(1))
      }else{
         None
      }
 }

编译器在实例化的时候自动使用apply ,在match中自动使用unapply

Scala文件I/O:

//输出流
def main(args: Array[String]) {
  val writer = new PrintWriter(new File("test.txt" ))
  writer.write("菜鸟教程")
  writer.close()
}
//屏幕输入
def main(args: Array[String]) {
  print("请输入菜鸟教程官网: " )
  val line = Console.readLine
  println("谢谢,你输入的是:  " + line)
   }
//从文件中读取
def main(args: Array[String]) {
  println("文件内容为:"  )
  Source.fromFile("test.txt" ).foreach{print}
}

原创文章转载请标明出处
更多文章请查看
http://www.canfeng.xyz

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容

  • 1. 特点: Scala是一门多范式编程语言,集成了面向对象编程和函数式编程等多种特性。 Scala运行在虚拟机上...
    EmmaQin阅读 1,295评论 0 0
  • Databricks Scala 编程风格指南 本文转载自 https://github.com/databric...
    雪轩辕阅读 1,172评论 0 1
  • scala学习笔记 第2章 变量和数据类型 基本数据 scala的核心数据为四种 :字面量、值、变量、类型 值使...
    485b1aca799e阅读 2,121评论 0 1
  • 这篇讲义只讲scala的简单使用,目的是使各位新来的同事能够首先看懂程序,因为 scala 有的语法对于之前使用习...
    MrRobot阅读 2,912评论 0 10
  • scala文档 包含内容 1基础 2控制结构和函数 3数组相关操作 4映射和元组 5类 6对象 7.包和引入(x)...
    zlcook阅读 1,001评论 0 3