Scala-反编译

Posted 大数据技术AI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala-反编译相关的知识,希望对你有一定的参考价值。


Scala 程序基本结构



/** * Author z * Date 2021-01-24 15:32:42 */object Scala_01_Hello { //程序入口 def main(args: Array[String]): Unit = { println("hello world") }}


完全面向对象:scala完全面向对象,故scala去掉了java中非面向对象的元素,如static关键字,void类型

  • static



scala无static关键字,由 object实现类似静态方法的功能(类名.方法名),

object关键字和class的关键字定义方式相同,但作用不同。

class关键字和java中的class关键字作用相同,用来定义一个类;

object的作用是声明一个单例对象,object后的“类名”可以理解为该单例对象的变量名。

  • void


  对于无返回值的函数,scala定义其返回值类型为Unit类


Scala 程序反编译



  • object在底层会生成两个类 Scala_01_Hello, Scala_01_Hello$

  • Scala_01_Hello中有个main函数,调用 Scala_01_Hello$ 类的一个静态对象 MODULES$

  • Scala_01_Hello$.MODULE$. 对象时静态的,通过该对象调用Scala_01_Hello$的main函数

  • 我们在main中写的代码在放在Scala_01_Hello$的main,在底层执行Scala编译器做了一个包装


Scala_01_Hello源码:


object Scala_01_Hello { def main(args: Array[String]): Unit = { println("hello world") }}


我们在main中写的代码在放在Scala_01_Hello$的main,在底层执行Scala编译器做了一个包装


Scala_01_Hello.class


Scala-反编译

public final class Scala_01_Hello{ public static void main(String[] paramArrayOfString){ Scala_01_Hello..MODULE$.main(paramArrayOfString); }}


  • object在底层会生成两个类 Scala_01_Hello, Scala_01_Hello$

  • Scala_01_Hello中有个main函数,调用 Scala_01_Hello$ 类的一个静态对象 MODULES$


Scala_01_Hello$.class



public final class Scala_01_Hello${  public static final Scala_01_Hello$   MODULE$; static { new ();  } public void main(String[] args){ Predef..MODULE$.println("hello world"); }  private Scala_01_Hello$() { MODULE$ = this; }}


Scala_01_Hello$.MODULE$. 对象时静态的,通过该对象调用Scala_01_Hello$的main函数


说明


(1)Scala中如果使用object关键字声明类,在编译时,会同时生成两个类:当前类,当前类$

(2)使用当前类$的目的在于模拟静态语法,可以通过类名直接访问方法。

(3)Scala将当前类$这个对象称之为“伴生对象”,伴随着类所产生的对象,这个对象中的方法可以直接使用。


Scala 开发注意事项



  • Scala源文件以“.scala" 为扩展名。

  • 一个“.scala”文件中可以有多个类,但是一个文件中只能有一个public类

  • Scala程序的执行入口是object 中的main()函数。

  • Scala语言严格区分大小写。

  • Scala方法由一条条语句构成,每个语句后不需要分号(Scala语言会在每行后自动加分号)。(至简原则)

  • 如果在同一行有多条语句,除了最后一条语句不需要分号,其它语句需要分号。


以上是关于Scala-反编译的主要内容,如果未能解决你的问题,请参考以下文章

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

Scala核心编程_第02章_变量

Scala核心编程_第02章_变量

Scala附加列表

Scala 之 Case Class

详解 Scala 模式匹配