scala入门
目录
-
用一句话概括Scala
scala是一门运行在JVM上的高级编程语言,所有Scala代码都必须编译为字节码,由JVM进行运行,可以与Java无缝互操作。
-
scala解释器
解释器也成为Read(取值)-> Evaluation(求值)-> Print(打印)-> Loop(循环)。可以快速编译代码并运行。
在Scala解释器中键入代码,回车执行,返回运行结果,如果指定变量存放该值,系统会默认给这个值设置一个变量,并且显示该值类型形式如下:
resX: 类型 = 值 X代表变量计数,从0开始
后续的方法中,可调用这个量,系统默认的resX是一个常量。
-
scala的编译
我们也可以通过创建Scala脚本运行Scala程序。创建一个简单的HelloWord.scala文件,编写简单的程序。通过scalac HelloWord.scala 编译HelloWord.scala文件,编译出HelloWorld$.class和HelloWorld.class
编写的HelloWorld.scala程序:
使用jd-gui工具反编译HelloWorld$.class和HelloWorld.class
HelloWorld.class反编译后的代码:
HelloWorld$.class反编译后的代码
JVM最终还是运行的HelloWorld.class的main方法,在面方法中调用HelloWorld$.class中的具体实现。
虽然我们编写的scala代码很简单,但在编译后的HelloWorld$.class中,编译增加了:
私有静态成员变量MODULE$
静态代码块,创建该类
私有构造方法把该类赋值给MODULE$
公共方法,执行具体的实现
-
变量声明
使用关键词 "var" 声明变量
使用关键词 "val" 声明常量
var声明的变量和val成名的常量都可以手动制定其类型,如果不制定,scala可以进行自动类型推断(java望尘莫及的强大功能)
val name : String = “liumingxin”
还可以声明多个变量或常量
var a,b,c : String = null
-
scala类型
值类型:Byte、Char、Short、Int、Long、Float和Double
一个布尔类型:Boolean
Scala中没有类似java中的基础类型和引用类型,是纯粹的面向对象语言,可以对数字、字节等类型的数据直接调用类的方法例如:
1.to(10)简化为1 to 10
1.+(10)
Scala用底层的java.lang.String类表示字符串,通过StringOps类追加了更加强大的操作
“Hello”.intersect(“World”)//结果是“lo”
java.lang.String类型的”Hello”被隐士转换(Scala的一大特性)成为StringOps类,并调用了StringOps类中的intersect方法。
类似地,如Int、Double、Char还提供了RichInt、RichDouble、RichChar,来增强他们
1.to(10) //调用了RichInt中的to方法
-
运算符
和java大同小异,需要注意的是scala中并没有提供类似java中--,++操作,因为Int类是不可变的,一个方法并不能改变一个整数类型的值,所以很难实现++方法
Count += 1//等同于java中的count++
-
函数和方法的调用
scala处理提供了很多函数,这些函数调用起来特别简单,不需要像java一样通过某个类来调用函数
import scala.math._ //引入math包下的所有方法,”_”是通配符,类似java中的”*”
//引用的包如果是scala开头的,可以省去scala
//import scala.math._ 等同于 import math._
pow(2,4)//等同于math.pow(2,4)等同于scala.math.pow(2,4)
不带参数的方法可以省略后面的括号
“Hello”.distinct
apply方法可以像调用函数一样调用,并可以省略apply
“Hello”.apply(1)//输出e
可以看出apply是()的重载形式,类似的使用(),其实都是调用该类的伴生对象中的apply方法。