Scala (Scalable Language)是一门多范式的编程语言。一种类似Java的编程语言,运行在JVM虚拟机上,设计初衷是要继承面向对象和函数是编程的各种特性,即有强大的函数式编程支持,又是一种纯粹的面向对象编程语言。
abstract | case | catch | class |
def | do | else | extends |
false | final | finally | for |
forSome | if | implicit | import |
lazy | match | new | null |
object | override | package | private |
protected | return | sealed | super |
this | throw | trait | try |
true | type | val | var |
while | with | yield | |
- | : | = | => |
<- | <: | <% | >: |
# | @ |
Scala与Java一样,是一种静态类型语言:使用变量前必须先声明。但是Scala必须在声明的时候赋初值。Scala也是一种强类型语言:可以指定要使用的类型,类似于Java一样。但与Java不同的是,并非必须显示指定类型。
var a:Int = 0
var b:String = _
var c:Double = 0
.....
声明方法的输入参数和返回值是,必须指定类型,但是在方法或函数中声明变量时,可以不指定类型,IDE会自动根据值推断出变量的正确类型。
Scala支持两种变量,声明方法的参数或类的实例成员时,必须使用一下两个关键词。
// 用于声明变量
var a : Int = 0
// 用于声明常量
val b : String = "hello world"
两种类型跟Java类似,变量可以随意修改,常量相当于Java中用final修饰的变量,只能赋值一次。如果常量指向一个可修改的类实例的话,任然可以修改这个实例的内容。
Scala不支持静态变量(类变量),但是支持可用于替代静态变量的单例对象。
tips:
在Scala编写过程中,尽量使用常量,不可修改的值是函数式编程的基石。
在Java中,祖先类是Object,但是在Scala中,祖先类是Any,一切数据都是对象,都是 Any 的子类。
Scala中的数据类型分为两大类:数值类型(AnyVal)、引用类型(AnyRef),它们都是对象。
Scala中数据类型依然遵守低精度值类型自动向高精度值类型转换(隐式转换)。
Unit:数据类型,对应Java中的void,用于方法返回值的位置,表示方法没有返回值,但是Unit作为方法返回值类型时,如果没有返回内容,自动返回**()**。
Null:空值null,它是所有引用类型的子类,Null不兼容值类型。
Nothing:所有数据类型的子类,主要用在要给函数没有明确返回值时使用,这样就可以抛出返回值,返回给任何的变量或函数。
Scala中访问修饰符基本和Java一致,分别有:private 、protected、public
如果没有指定访问修饰符的话,默认情况下,Scala对象级别都是public
在Scala中,private修饰的对象比Java中更严格,在嵌套类的情况下,外层类甚至不能访问被嵌套类中的私有成员。
protected修饰的对象也比Java更严格一些,只允许保护成员在定义了该类的类的子类中被访问,而Java中,protected修饰的成员,除了定义该成员的类的子类可以访问,同一个包的其他类也可以访问。
导入成员:
在Scala中,导入成员类似于Java,但是Scala中的功能更加强大。
// 在Scala中,通配符不是*,而是_
import com.example.parent.A._
// 同一条语句可以导入多个成员
import com.example.parent.{A,B}
// 也可以重新对导入成员命名
import com.example.parent.{C => D}
实例变量和实例方法
Scala不支持静态成员(类变量和类方法),因此没有static或等价的关键字,但是Scala支持单例类。
实例变量:在类中定义def和val变量,大多数情况下可以不指定变量类型。
实例方法:方法声明类似Java,如果方法有参数,必须指定参数的数据类型,方法可以什么都不返回,也可以返回一个对象实例
class Test{
def add:Int = {
val a = 100
val b = 100
val res = 0
res = a + b
}
}
在Scala中,任何方法都会自动返回最后一个表达式的值。也可以用return语句返回,但是不推荐使用。在Scala中,方法和函数不能提早结束,如果使用了return语句,必须指定方法的返回类型。
构造器
和Java一样,Scala构造对象也需要调用构造方阿飞,并且可以有任意多个构造方法。
Scala类的构造器包括:主构造方法和辅助构造方法。
// 简单例子 如果主构造器无参数,小括号可以省略。
class Person{
var name = _
var age = _
def the(age:Int){
this()
this.age = age
println("辅助构造器")
}
println("主构造器")
}
object Person {
def main(args:Array[String]):Unit = {
val person = new Person(18)
}
}
编程范式(Programming paradigm)是程序语言背后的思想。范式即模式、方法。代表了程序设计者认为程序应该如何被构建和执行的看法。常见的变成范式由:过程式,面向对象,函数式,泛型编程等。
多范式,是指这个语言支持使用者采用多种不同的编程范式来编写程序。
编程范式(Programming paradigm)是程序语言背后的思想。范式即模式、方法。代表了程序设计者认为程序应该如何被构建和执行的看法。常见的变成范式由:过程式,面向对象,函数式,泛型编程等。
多范式,是指这个语言支持使用者采用多种不同的编程范式来编写程序。