直观的来说,加强版Java。一种脚本语言 ,可以直接使用Java的类库。
特点:面向对象编程,函数式编程
Scala会有三类事务,Class、Object、Trait。在Scala中把静态的和非静态的严格分开
Class中能编写非静态的东西;
Object中只能编写静态的,我例如Java中的main方法,它是静态的,在Scala中就要写道Object里。
简单的举个例子:
object Scala { def func1 = println("Hello Zyp") def main(args: Array[String]): Unit = { /* 写个main方法,直接调用函数 */ func1 } }
在上面的代码中: 1. object里面都是静态方法(以及变量等) 2. 数据类型跟在变量后面,中间用“ :”隔开 3. 返回值在参数完成的后面,方法体是以“ = ”来赋值 4. 语句末有无 ”;“ 都可
在Scala中我们声明" func1 "这个函数,他其实是个变量,这就是这个语言不同于java的地方,完全面向对象编程,是函数语言。每一个函数在Scala中都是一个值,当我们定义一个函数的时候就是定义了一个变量。
Scala中的函数:高阶函数、柯里化函数、内嵌函数(函数中定义函数)等。
高阶函数: 函数的参数可以传递函数
克里化函数: 函数可以拆分,部分执行。
修饰符:var \ val
var 代表一个变量 ;val 代表一个常量
def main(args: Array[String]): Unit = { var n =10 n=11 //变量可以再次赋值 } def main(args: Array[String]): Unit = { val n:Int =10 n=11 //会报错 Reassignment to val }
从上面的声明变量还可以看出:在Scala中,类型可以不给。(Scala中没有基本数据类型,全是引用数据类型)
关键字:def
def func2(a:Int,b:Int):Int = return a+b
1. 返回值关键字 "return" 可写可不写
2. :Int 表示的是返回值类型,没有返回值就是Unit
3. 这里的参数类型是变量,也可以用函数作为参数(因为scala中一切皆对象)
例如:
def square(x: Int) = { println(x) x * x } def printByName(x: => Any): Unit = { println(x) } def main(args: Array[String]): Unit = { printByName(square(5)) }
先执行square,把整个函数作为参数传递给X,那么就会先打印5再返回25
打印1-10:
for (i <-1 to 10){ println(i) }
隔两个打印一个数隔两个打印一个数:(步长为2)
for (i <-1 to 10 by 2){ //by 自增的意思 print(i+" ") } 打印结果为: 1 3 5 7 9
用ForEash的方式:
(1 to 10 by 2).foreach( println(_) _的意思是当前,当前这个数 ) 但是你如果不想用下划线的话可以如下: (1 to 10 by 2).foreach( 推出的方式 x =>println(x) )
Scala所有类型都是Object,顶级的类叫做ScalaObject.我们定义的所有的类都叫做ScalaObject。ScalaObject下面呢就是最根基的类叫做Any,就是任意类型,下面两个体系:值类型(AnyVal)和引用类型(AnyRef)
数值这些类型(Int Boolean char..)归为值类型(AnyVal)
String和数组,列表这些都归为引用类型(AnyRef)
Null:是一个类,在Java和Scala中小写的Null是一个值,大写的Null是一个类,类型,不允许再被继承,是一个终止的特征,继承了引用类型(AnyRef)
Nothing:没有实例对象的一种数据类型,它的父类是Any(顶级的)
Unit:代表的是一个值类型,类似于 yuabzuJava中void