Scala基础1——第一章:Scala入门

第1章、Scala入门

1.1 概述

1.1.1 为什么要学习Scala

​ (1)Scala基于JVM,和Java完全兼容,具有跨平台、可移植性好、方便的垃圾回收等特性

​ (2)Scala比Java更加面向对象。(比Java更加纯粹)

​ (3)Scala是一门函数式编程语言。

​ (4)Scala更适合大数据的处理

​ (5)Scala对集合类型数据处理有非常好的支持

​ (6)Spark的底层用Scala编写

1.1.2 Scala发展历史

​ Scala之父马丁奥德斯基从2001年开始设计Scala。

​ 马丁奥德斯基也参与了Java的JVM编写

​ Java因为从C发展而来,所以面向对象并不是很彻底,比如说包含了基本数据类型。

​ 马丁奥德斯基既希望在JVM平台上开发另外一门编程,既要彻底的面向对象,又要函数式编程。

​ 马丁奥德斯基在1996年先研发了pizza语法,在pizza语言中引入了泛型,所以Java也引入了泛型。

​ Scala引入了类型推断和lambda表达式。

​ 所以在Java1.8中也引入了类型推断和lambda表达式。

1.1.2 Scala和Java关系

Scala和Java及JVM关系图

​ (1)Java:java文件先进行java编译器得到class文件,class文件可以在JVM上运行。

​ (2)Scala:scala文件,scala可以直接调用java的类库,也可以写scala的语言,通过scala编译器得到class文件,可以在JVM上运行。

Java是编译语言还是解释语言?

​ (1)java是先通过java编译器编译成class文件,然后再把class放到jvm上解释执行

​ (2)所以java语言既有编译,也有解释。 所以并不是纯粹的编译或者解释语言。

1.1.4 Scala的特点

​ (1)融合:把很多的特性融合在一起

​ (2)以JVM运行环境,把面向对象函数式编程结合在一起的静态类型的高级语言。

​ (3)静态类型:java、scala、c、c++,变量类型需要提前指定。

​ 动态类型:python、js,变量类型不需要提前指定。

​ (4)scala和java兼容,在scala中可以直接调用java类库

​ (5)简洁高效,可读性强。

​ (6)scala的设计思想源于java,并结合函数式编程,又改进了java中不够高效的东西。

1.2 Scala环境搭建和运行

1)安装步骤

​ ① 确保JDK1.8安装成功

​ ② 下载Scala安装文件 scala-2.12.11.zip (可以在scala官网上下载)https://scala-lang.org/download/all.html

​ ③ 解压scala-2.12.11.zip,记住解压路径

​ ④ 配置环境变量即可。

​ 可以添加SCALA_HOME、然后把bin目录添加到Path中即可

​ 在cmd中输入scala进入交互界面

scala> val a = 10 // 定义一个变量a,赋值为10
// a: Int = 10  类型会自动判断为Int
scala> val a = 23
// b: Int = 23
scala> a + b
// res1: Int = 33
scala> println("hello world")
// hello world
//
scala> :quit   //退出命令行

1.3 Scala的编译及分析

** 1)编译scala源文件 **

​ ① 新建HelloScala.scala 文件

object HelloScala{
    // Scala中不用数组,所以用泛型为String的集合
    // Unit表示返回值为空
    def main(args: Array[String]): Unit = {
        println("Hello Scala") //scala中不需要用分号
    }
}

​ ② 在cmd中输入scalac HelloScala.scala进行编译

​ 得到两个字节码文件

​ HelloScala.class

​ HelloScala$.class

​ ③ 在cmd中输入scala HelloScala运行

2)Scala编译结果和反编译分析

​ 通过编译之后,会得到两个文件HelloScala.class、HelloScala$.class,这两个文件的作用是什么?

​ (1)HelloScala.class的main方法调用HelloScala$.class中的方法

​ (2)在HelloScala的代码中有一个关键字object,在scala中称为伴生对象,伴生对象是一个静态的单例对象,且里面都是静态方法,并且需要一个真正的对象,真正的对象则存放在HelloScala$.scala中。

​ (3)scala中没有static关键字,所以用object来代表里面的方法都是静态的,但是scala也是用的JVM,所以他就通过单例设计模式,实现只有一个对象的类(HelloScala$.scala),那就相当于调用静态方法。

1.4 在IDE中编写Scala

​ 使用IDEA做scala项目的编写。

​ (1)在IDEA中选择New Project,然后选择Maven,Java版本选择1.8,在Maven中选择。填写GroupId和ArtifactId(项目名)

​ (2)如果需要编写Scala,需要安装Scala插件。(右键Settings、点击Plugins、搜索Scala,然后安装)

​ (3)安装之后重启IDEA。

​ (4)右键项目名(scalaProject1),点击Add Framework Support,选择Scala插件。点击Create,选择Scala所在的地址,点击OK。

​ (5)然后重新建立一个scala文件,即可编写

package chapter01
object HelloScala {
  def main(args:Array[String]):Unit={
    println("hello")
    System.out.println("hello java") //kava的代码
  }

}

1.5 Scala代码解析

package chapter01
// object 声明一个伴生对象(单例对象)
object HelloScala {
  // 定义一个main方法
  // def 方法名(参数名称:参数类型):返回类型={}
  def main(args:Array[String]):Unit={
    println("hello")
    System.out.println("hello java") //kava的代码
  }

}

1.6 为什么要有object伴生对象

​ scala之父马丁奥德斯基认为静态属性不属于面向对象,所以scala之父将static关键字进行删除。

​ 但是为了保持静态方法,则引入了object伴生对象,伴生对象中的所有属性都是静态。

​ scala之父将类class中的静态方法和属性全部抽取出来,放到同名的object(伴生对象)中。

// 将构造方法直接定义在()里面
class Student(name:String,age:Int){
    def printInfo():Unit={
        //Student.school 是一个静态属性,所以放在伴生对象object中
        print(name + " " + age + " " + Student.school) 
        
    }
}
// 伴生对象,用于存放class中的静态方法、属性
object Student{
    // Student的 class、object的私有成员都是互相访问的。
    val school:String = "university" 
    
    // main函数
    def main(args:Array[String]):Unit={
        val alice = new Student("alice",20)
        alice.printInfo()
    }
}

1.7 关联Scala源码

​ 略

1.8 官方编程指南

​ 可以在Scala的官网上查看API

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值