1.val 和var都是用来定义变量的,用val定义的变量是不可变的,初始化之后,值就固定下来。用var来定义的变量是可变的,修改多次也没关系。在scala中应该尽量优先使用val
for (i <- 1 to 3){
print(i + “,”)
}
i 是一个val ,每次循环都会产生一个新的val。这里的to 是一个方法,1 to 3 ,相当于 1.to(3)
更scala风格的方法是:
(1 to 3).foreach(i => print(i + “,”))
=> 是将左边的参数和右边的具体实现分开
scala的双重循环:
for (i <- 1 to 3; j <- 1 to 3) print((10 * i + j) + ” “)
// Prints 11 12 13 21 22 23 31 32 33
在循环体中,还可以嵌套处理语句
for (i <- 1 to 3; j <- 1 to 3 if i != j) print((10 * i + j) + ” “)
// Prints 12 13 21 23 31 32
或
for (i <- 1 to 3; from = 4 - i; j <- from to 3) print((10 * i + j) + ” “)
// Prints 13 22 23 31 32 33
2.Java 基本类型对应的Scala类
scala一切为对象:
val a = 20
建立了一个Scala的Int实例
scala的富封装类: RichInt,RichDouble,RichBoolean,它们可以在基本类型无法满足的时候,转换为相应的类型。
3.元组和多重赋值
元组是一个不变的对象序列,可以用逗号分开创建,下面是一个3个对象的元组
(“apple”,”blanana”,”orange”)元组是可以赋值给其他变量的。
4.字符串与多行原始字符串
scala的字符串就是java.lang.String,可以按照Java的方式使用字符串。Scala可以自动把String转换为scala.runtime.RichString
创建多行字符串”“” sdfsfsffds…….”“”
4.自适应的默认做法:
支持脚本,无需将所有的代码都放到类里
return是可选的。如果符合方法声明的返回类型,方法会自动返回最后求值得表达式
分号可选
类和方法默认是public
优化异常
优化javabean
默认情况下,scala会导入 java.lang scala scala.pref(包含了类型,隐式转换,以及scala中的常用方法)
5.运算符重载
6.一些区别
scala的赋值运算的结果是Unit, a = b =c 这样的语句在scala中是错误的。
Java中,基本类型中 == 是比较值, 对象中 == 是比较对象是否指向同一个对象,对象比较值是否相等的时候要用equals方法。 而在scala中 ,无论类型如何,==都是比较值得大小,而如果想比较他们的引用,则需要用eq()方法
分号是 可选的
scala 实例方法里可以访问任何类实例的私有字段和方法,也可以限制为当前实例。
scala中的protected
scala中被protected修饰的成员只对本类以及派生类可见。同一个包的其他类无法访问这些成员。而且派生类只可以访问本类内的protected成员。scala对派生类的保护更加严格
peckage automobile
class Vechile{
protected def checkEngine(){}
}
class Car extends Vechile{
def start(){ checkEngine() //OK}
def tow(car : Car){
car.checkEngine() //ERROR
}
def tow(vechile: Vechile){
vechile.CheckEngine() //ERROE
}
}
class GasStation{
def fillGas(vechile : Vechile)
vechile.checkEngine() //ERROR
}
}
细粒度访问控制
避免显示使用return