scala 系列文章 ----- java,scala 和jvm的关系

文件准备
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 类库,有自己特有的方法和语法。

如有错误,请指教。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值