1.Scala运行原理
- 1.计算机语言发展过程
- 机器语言
- 汇编语言
- 高级语言
-
解释型语言(JavaScript)
要想运行多次,需要进行多次解释
支持跨平台 -
编译型语言(C\C++)
要想运行多次,不需要进行多次编译
不支持跨平台
-
-
2.Java运行原理
- 先编译,再解释
- .java源文件—>编译器(javac)—>.class字节码文件—>JVM(java 不同平台)—>机器指令
-
3.Scala运行原理
- 先编译,再解释
- . scala源文件—>编译器(scalac)—>.class字节码文件—>JVM(scala 不同平台)—>机器指令
Scala与Java 、JVM的关系
语言特点
Scala是一门以Java虛拟机(JVM)为运行环境,并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言( 静态语言需要提前编译的如: Java、 c、c++等;动态语言如: js)
- Scala是一门多范式的编程语言,Scala支持面向对象和函数式编程。
- 多范式,就是多种编程方法的意思:有面向过程、面向对象、泛型、函数式四种程序设计方法。)
-
Scala源代码( scala)会被编译成Java字节码( .class),然后运行于JVM之上,并可以调用现有的Java类库,实现两种语言的无缝对接。
-
Scala单作为一门语言来看,非常的简洁高效。
-
Scala在设计时,马丁奥德斯基是参考了Java的设计思想,可以说Scala是源于Java, 同时马丁奥德斯基也加入了自己的思想,将函数式编程语言的特点融合到JAVA中。
环境搭建
1.安装scala(确保JDK1.8安装)并配置SCALA_HOME环境变量
2.安装IDEA 的scala插件
3.maven不支持scala开发,需要引入scala框架:
- 右键项目、 Add Framework Support、选择Scala
- 右侧选择 Use libary——选择你的Scala安装目录
4.标记源文件目录
- 在main中创建scala文件夹
- 右键->Mark Directory as->选择Sources root
- 将该文件夹下的文件自动编译到target文件夹下
5.关联源码
- 例如查看Array源码。按住ctrl键->点击Array->右上角出现Attach Soures
6.官方编程指南
- 在线查看:https://www.scala-lang.org/
2.class与object说明
scala完全面向对象,故scala去掉了Java中非面向对象的元素,如static关键字,void类型
1)static
- scala无static关键字,由object实现类似静态方法的功能(类名.方法名)
- class关键字和Java中的class关键字作用相同,用来定义一个类
2)void
- 对于无返回值的函数,scala定义其返回值类型为Unit类
伴生类与伴生对象所属类
1.object 关键字——伴生对象
- 从语法角度讲,上面语法表示声明了一个伴生对象
- Scala是纯面向对象的,去除了java中的static关键字
- 但是scala想使用static,通过伴生对象所属类,生成一个 Module$ 单例对象,通过单例对象调用静态的东西
2.伴生对象
- 伴随类产生的一个对象
- 当我们对源文件进行编译之后,默认会生成两个字书码文件:
- 伴生类:HelloWorld.class,
- 伴生对象所属类:HelloWorld$.class——其生成一个 Module$ 单例对象
- 其实真正的伴生对象是伴生对象所属类中创建的单例的对象 Module$
这是object HelloWorld的反编译结果:
3.自定义伴生类:
- 如果不想默认生成伴生类(如不需要main方法时),可以手动生成:要求伴生类名称和伴生对象名称一致
自定义伴生类Student的反编译结果:
4.注意:
以后在scala语言中,如果要定义类似java的static内容,都应该放到伴生对象中内声明。如果不需要,则不需要定义伴生对象,也就是不需要Object关键字,只使用class关键字。
也就是说只有Teacher.class文件,没有伴生对象所属类文件Teacher$.class,可以从编译文件的图标看出区别。