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

 

Scala-反编译_面向对象_02

 

  •  
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-反编译_scala_03