Scala代码
object Scala03_Access {
def main(args: Array[String]): Unit = {
}
def test(): Unit ={
print("Test...")
}
}
经过IDEA反编译过后的Java代码:
分析如下代码,发现构造方法私有化,该类不能被实例化,不能被继承,唯一的办法是提供一个静态的公共的方法,很明显这是一个单例模式,static静态代码块初始化时会实例化一个对象,有了对象之后可以调用里边的方法,实现代码最后
import scala.Predef.;
public final class Scala03_Access$ {
public static Scala03_Access$ MODULE$;
static {
new Scala03_Access$();
}
public void main(final String[] args) {
}
public void test() {
.MODULE$.print("Test...");
}
private Scala03_Access$() {
MODULE$ = this;
}
}
//decompiled from Scala03_Access.class
package com.atguigu.scala.chapter02;
import scala.reflect.ScalaSignature;
@ScalaSignature(
bytes = "\u0006\u0001E:Q!\u0002\u0004\t\u0002=1Q!\u0005\u0004\t\u0002IAQ\u0001G\u0001\u0005\u0002eAQAG\u0001\u0005\u0002mAQaL\u0001\u0005\u0002A\nabU2bY\u0006\u00044gX!dG\u0016\u001c8O\u0003\u0002\b\u0011\u0005I1\r[1qi\u0016\u0014\bG\r\u0006\u0003\u0013)\tQa]2bY\u0006T!a\u0003\u0007\u0002\u000f\u0005$x-^5hk*\tQ\"A\u0002d_6\u001c\u0001\u0001\u0005\u0002\u0011\u00035\taA\u0001\bTG\u0006d\u0017\rM\u001a`\u0003\u000e\u001cWm]:\u0014\u0005\u0005\u0019\u0002C\u0001\u000b\u0017\u001b\u0005)\"\"A\u0005\n\u0005])\"AB!osJ+g-\u0001\u0004=S:LGO\u0010\u000b\u0002\u001f\u0005!Q.Y5o)\tar\u0004\u0005\u0002\u0015;%\u0011a$\u0006\u0002\u0005+:LG\u000fC\u0003!\u0007\u0001\u0007\u0011%\u0001\u0003be\u001e\u001c\bc\u0001\u000b#I%\u00111%\u0006\u0002\u0006\u0003J\u0014\u0018-\u001f\t\u0003K1r!A\n\u0016\u0011\u0005\u001d*R\"\u0001\u0015\u000b\u0005%r\u0011A\u0002\u001fs_>$h(\u0003\u0002,+\u00051\u0001K]3eK\u001aL!!\f\u0018\u0003\rM#(/\u001b8h\u0015\tYS#\u0001\u0003uKN$H#\u0001\u000f"
)
public final class Scala03_Access {
public static void test() {
Scala03_Access$.MODULE$.test();
}
public static void main(final String[] args) {
Scala03_Access$.MODULE$.main(var0);
}
}
public class Scala_03_Access_Java {
public static void main(String[] args) {
//在Java代码中如何去访问Scala当中的程序代码
// 访问对象的方法,等同于访问单例模式中对象的方法
Scala03_Access$.MODULE$.test();
}
}