scala学习笔记(1-8)

2017-07-26  本文已影响187人  zlcook

scala文档

包含内容

1基础

2控制结构和函数

REPL

表达式、块表达式和赋值

def sum(args: Int* )={
  var result = 0 
for (arg <- args ) result += arg
result
}
val ss = MessageFormat.format("the answer to {0} is{1}","everything",42.asInstanceOf[AnyRef]);
    public static String format(String pattern, Object ... arguments) 

过程

def procedure(){
    print("ddd");
  }

或者

def procedure():Unit={
    print("ddd");
  }

懒值

异常

3数组相关操作

常用算法

解读Scaladoc

二维数组

与java的互操作

import scala.collection.JavaConversions.bufferAsJavaList
val command = ArrayBuffer("ls","-al");
  val pb = new ProcessBuilder(command);

其中ProcessBuilder为java中的类, 构造函数为public ProcessBuilder(List<String> command)

import scala.collection.JavaConversions.asScalaBuffer
val pb = new ProcessBuilder(command);
val cmd:Buffer[String] = pb.command();

其中ProcessBuilder为java中的类, public List<String> command()

快学scala第四章习题答案.

4映射和元组

创建映射

获取映射值

更新映射值

迭代映射

已排序映射

var s = collection.mutable.SortedMap("bc"->5)     //可变映射,可变变量s
    s("b")=3                    // b->3  ,bc- > 5
    s+=("a"->2)            //a->2 , b->3  ,bc- > 5 

与java互操作

val source = new java.util.HashMap[String,Int]
val s:scala.collection.mutable.Map[String,Int] = source.asScala

val source = new scala.collection.mutable.ListBuffer[Int]
val target: java.util.List[Int] = source.asJava
val other: scala.collection.mutable.Buffer[Int] = target.asScala
assert(source eq other)
import  scala.collection.JavaConversions.mapAsScalaMap 
import  scala.collection.JavaConversions.propertiesAsScalaMap   val 
val map:Map[String,Int] = new TreeMap[String,Int]
props:scala.collection.Map[String,String] = System.getProperties() 

元组(tuple)

拉链操作zip

"Hello".zip("World") 
 res0: scala.collection.immutable.IndexedSeq[(Char, Char)] = Vector((H,W), (e,o), (l,r), (l,l), (o,d))  

5类

getter和setter属性

class Person(val name:String,var sex:Boolean){   //公有name的get,公有sex的get、set方法
 var age =0                                //公有字段,公有的getter、setter方法
 private var address="china"               //私有字段,私有的getter、setter方法
 val school="cnu"                          //只getter方法
 private[this] var tel="1134423"           //对象私有字段,不会生产getter和setter方法
}
class Person(){
   private var myAge =0                                //公有字段,公有的age、age_=方法

   def age = myAge                                            //为myAge定制get、set方法
   def age_=(newAge:Int){
       if( newValue > myAge ) myAge = newAge
   }
}
字段生成方法 字段访问权限

Bean属性

image.png

辅助构造器

辅助构造器

主构造器

嵌套类

class Person{
   private val members = new ArrayBuffer[Member]
   class Member(val name:String){
   }
}
val zhangsan = new Person
val lisi = new Person
object Person{
     class Member(val name:String){
     }
}
class Person{
    private val members = new ArrayBuffer[Person.Member]    //注意
}
image.png
快学scala第五章习题答案

6对象

用对象作为单例或存放工具方法

 object Accounts{
    private var lastNumber =0
    def newUniqueNumber() ={lastNumber += 1 ;lastNumber }
 }
用对象可以做的事

类可以拥有一个同名的伴生对象(在同一个源文件中)

class Accounts{
  val id = Accounts.newUniqueNumber()
  private var balance =0.0
  def deposit(amount: Double){balance += amount}
}
object Accounts{
    private var lastNumber =0
    def newUniqueNumber() ={lastNumber += 1 ;lastNumber }
 }

对象可以扩展类或特质

对象的apply方法通常用来构造伴生类的新实例

定义apply方法

如果不想显示定义main方法,可以扩展App特质的对象

你可以通过扩展Enumeration对象来实现枚举

7.包和引入

package com {
   package horstmann{
    class Utils{}
     pacakge impatient{
         class Employee{  }      //作用域:可以访问Utils类中方法
     }
   }
}
等同于
package com.horstmann
class Utils{}
package impatient
class Employee{}

串联式包语句

package com.horstmann.impatient{
   package people{
    class Person
 }
}

包对象

package com.horstmann.impatient
package object people{
   val defaultName = "John Public"
}
package people{
  class Man{
    val name = defaultName //从包对象拿到常量值,因为在同一个包中不需要使用com....people.defaultName访问
  }
}

包可见性

类私有字段、对象私有字段

class Counter{
 private var value =0     //对象私有字段,Counter类方法可以访问Counter类所有对象的value字段
private[this] var age =0     //对象私有字段,Counter类方法只能访问到当前对象的age字段

def increment() = {value+=1}

//可以访问other.value字段,因为other也是Counter类。
def isLess(other:Counter ) = value < other.value

//下面other.age访问是错误的,因为age是对象私有的
def isLessAge(other:Counter ) = age < other.age
}

引入

 import java.util.{HashMap => JavaHashMap} //重命名
import java.util.{HashMap =>_,_}   //隐藏,第二个“_”符号是java.util._的意思
import java.lang._
import scala._
import Predef._
class Manager{
 import scala.collection.mutable._        //该引入只在Manager{}语句块中有用
  val sub = new ArrayBuffer[Employee]
}

快学scala第七章习题答案

8继承

重写val、def、var image.png
 class Employee(name:String,age:Int,val salary:Double) extends Person(name,age)

类型检查和转换

Scala Java 说明
obj.isInstanceOf[CI] obj instanceof CI obj是否属于CI类及其子类
obj.asInstanceOf[CI] (CI)obj 将obj转换成CI类,如果obj是CI子类会出错
obj.getClass == classOf[CI] CI.class 测试obj是否是CI类,但又不是其子类

抽象类

构造顺序和提前定义

class Creature{
  val range:Int = 10
  val env:Array[Int] = new Array[Int](range)
}
class Ant extends Creature{
   override val range = 2
}
//下面代码写在main函数中
val ant = new Ant
    print(ant.env.length)      //返回0

Scala继承层级

image.png

对象相等性

快学scala第八章习题答案

上一篇下一篇

猜你喜欢

热点阅读