文件准备
scala的源代码位置:
C:\Program Files (x86)\scala\lib\scala-sources-2.12.4.tar\scala-sources-2.12.4\scala-2.12.4\src\library\scala
java代码:
.java 文件
public class Test1 {
public static void main(String[] args) {
HashMap<String,String> hm = new HashMap();
int num = 10;
System.out.println("hello java");
}
}
编译后的 .class 文件
在这里插入代码片
```public class Test1 {
public Test1() {
}
public static void main(String[] args) {
new HashMap();
int num = true;
System.out.println("hello java");
}
}
如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201110154702872.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2NTc5Nzc3,size_16,color_FFFFFF,t_70#pic_center)
java的运行想必都比较了解,那么scala呢,都知道scala 底层也是基于 jvm 来操作。
object Demo2 {
def main(args: Array[String]): Unit = {
System.out.println("hello scala") 可以执行
HashMap<String,String> hm = new HashMap() 不可以执行
// scala特有的语法
val tuple = (1, 20, "hello", 23.9) //元组
val map = Map(("no",10), ("no2", 40)) // map
var arr = new Array[Int](10) // 表示我定义了一个数组,该数组存放Int, 10个元素 从形式上看,是scala 的类,但是这个类是对java的类/接口进行包装。
接下来看下Array部分源码
object Array extends FallbackArrayBuilding {
val emptyBooleanArray = new Array[Boolean](0)
val emptyByteArray = new Array[Byte](0)
val emptyCharArray = new Array[Char](0)
val emptyDoubleArray = new Array[Double](0)
val emptyFloatArray = new Array[Float](0)
val emptyIntArray = new Array[Int](0)
val emptyLongArray = new Array[Long](0)
val emptyShortArray = new Array[Short](0)
val emptyObjectArray = new Array[Object](0)
implicit def canBuildFrom[T](implicit t: ClassTag[T]): CanBuildFrom[Array[_], T, Array[T]] =
new CanBuildFrom[Array[_], T, Array[T]] {
def apply(from: Array[_]) = ArrayBuilder.make[T]()(t)
def apply() = ArrayBuilder.make[T]()(t)
}
.......
是scala类,里面把java的语法进行了封装。
scalac 编译运行完毕变成了 .class 文件
.class 文件也是通过 jvm 虚拟机进行跨平台
接下来看张图
通过这张图可以得出
scala 比 java 的 jvm广度要大
java 代码得到的.class 可以在 scala 中使用 jvm 来运行。
相反,如果是 scala 代码 则有些相通的语法可以调通。
scala 拥有自己的sdk 类库,有自己特有的方法和语法。
如有错误,请指教。