scala入门

目录

用一句话概括Scala

 scala解释器

 scala的编译

变量声明

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方法。

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值