大数据全系列 教程
1869个小节阅读:467.8k
目录
408考研
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
应用类
xxxxxxxxxx
package com.itbaizhan.chapter05
//应用类
object AppDemo {
println("1111")
def main(args: Array[String]): Unit = {
println("3333")
}
println("2222")
}
运行输出:
xxxxxxxxxx
1111
2222
3333
why?不是应该只输出3333吗?
这是因为静态的main方法只能存在于object声明的伴生对象中,编译器会将之编译为AppDemo.class和AppDemo$.class两个文件,阅读源码,该问题便迎刃而解了。
xxxxxxxxxx
//decompiled from AppDemo.class
package com.itbaizhan.chapter05;
import scala.reflect.ScalaSignature;
@ScalaSignature(
bytes = "\u0006\......\u0001"
)
public final class AppDemo {
public static void main(final String[] args) {
AppDemo$.MODULE$.main(var0);
}
}
//decompiled from AppDemo$.class
package com.itbaizhan.chapter05;
import scala.Predef.;
public final class AppDemo$ {
public static AppDemo$ MODULE$;
static {
new AppDemo$();
}
public void main(final String[] args) {
.MODULE$.println("3333");
}
private AppDemo$() {
MODULE$ = this;
.MODULE$.println("1111");
.MODULE$.println("2222");
}
}
那么能够不搞这个复杂,如果执行让之按照顺序执行代码:
xxxxxxxxxx
object AppDemo extends App{
//按照顺序执行,不会产生执行顺序的歧义
println("3333")
println("1111")
}