比较scala的main方法和Java的main方法的编译文件
创建maven项目 并且把Java和Scala的依赖导入项目。
创建Java对象,实现main方法
Java类的代码
package com.example.demo.test;
public class Java01_HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
java 编译的class文件
package com.example.demo.test;
import java.io.PrintStream;
public class Java01_HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
创建scala对象,实现main方法
package com.zt.demo.chapter01
/**
* 包名和路径名可以不一样
*/
object Hello {
def main(args: Array[String]): Unit = {
println("Hello World")
}
}
scala 编译的文件
//Hello.class文件
package com.zt.demo.chapter01;
import scala.reflect.ScalaSignature;
@ScalaSignature(bytes="\006\001-:Q!\001\002\t\002-\tQ\001S3mY>T!a\001\003\002\023\rD\027\r\035;feB\n$BA\003\007\003\021!W-\\8\013\005\035A\021A\001>u\025\005I\021aA2p[\016\001\001C\001\007\016\033\005\021a!\002\b\003\021\003y!!\002%fY2|7CA\007\021!\t\tB#D\001\023\025\005\031\022!B:dC2\f\027BA\013\023\005\031\te.\037*fM\")q#\004C\0011\0051A(\0338jiz\"\022a\003\005\00655!\taG\001\005[\006Lg\016\006\002\035?A\021\021#H\005\003=I\021A!\0268ji\")\001%\007a\001C\005!\021M]4t!\r\t\"\005J\005\003GI\021Q!\021:sCf\004\"!\n\025\017\005E1\023BA\024\023\003\031\001&/\0323fM&\021\021F\013\002\007'R\024\030N\\4\013\005\035\022\002")
public final class Hello
{
public static void main(String[] paramArrayOfString)
{
Hello..MODULE$.main(paramArrayOfString);
}
}
```
//Hello$.class文件
package com.zt.demo.chapter01;
import scala.Predef.;
public final class Hello$
{
public static final MODULE$;
static
{
new ();
}
public void main(String[] args)
{
Predef..MODULE$.println("Hello World");
}
private Hello$() {
MODULE$ = this;
}
}
总结
// scala 源码包含了main方法,在编译后自动形成了 public static void main
// Scala 在编译源码时,会生成两个字节码文件,静态main方法会执行名一个字节码文件中的成员main的方法
// Scala 是完全面向对象的语言,那么没有静态方法 的语法,只能同负一模拟生成静态方法。
// 编译时会将当前的生成的一个特殊的类==》 Hello$ ,然后创建对象来调用运来这个对象的main方法
//一般情况下,会将$的类的对象,会称呼为“版本伴生对象”
// 伴生对象中的时内容,都是可以通过类名访问。来模拟java中的静态方法
// 半生对象的时语法规则,使用Object生命
// public static void main (String[] arrys){ 方法体}
// scala中没有public关键字 scala默认所有权限都是公共的。
// scala中没有viod关键字 ,采用特殊的对象模拟: Unit
// scala中声明方法采用关键字def
//方法后面的小括号 时方法的参数列表
// scala 中参数列表的声明方式和Java的是不一样的
//Java :String 参数名
//Scala :参数名:类型
// Java中的方法声明和方法体直接连接
// scala中的方法的声明和方法体 时通过等号链接的
// scala中将方法的返回值类型放置在方法的声明的后面使用冒号连接