1.声明
当前内容主要用于本人学习和复习,当前内容主要为一个HelloWorld的demo的思考
2.配置环境变量scala
1.直接在当前的官方下载scala的解压包,本人使用:scala-2.11.7.zip
2.当前的scala是基于java的,所以必须要有JAVA_HOME,直接配置环境变量即可
3.在Path中加入即可
3.编写一个HelloWorld
创建一个hello.scala并写入一下内容
object HelloWorld{
def main(args:Array[String]){
println("hello world!");
}
}
使用编译salac hello.scala
说明,scala编译后就是class文件
执行scala HelloWorld
执行成功!
4.使用jd-gui查看编译后的class文件
HelloWorld.class
import scala.reflect.ScalaSignature;
@ScalaSignature(bytes = "\006\001\025:Q!\001\002\t\002\025\t!\002S3mY><vN\0357e\025\005\031\021a\002\037f[B$\030PP\002\001!\t1q!D\001\003\r\025A!\001#\001\n\005)AU\r\0347p/>\024H\016Z\n\003\017)\001\"a\003\b\016\0031Q\021!D\001\006g\016\fG.Y\005\003\0371\021a!\0218z%\0264\007\"B\t\b\t\003\021\022A\002\037j]&$h\bF\001\006\021\025!r\001\"\001\026\003\021i\027-\0338\025\005YI\002CA\006\030\023\tABB\001\003V]&$\b\"\002\016\024\001\004Y\022\001B1sON\0042a\003\017\037\023\tiBBA\003BeJ\f\027\020\005\002 E9\0211\002I\005\003C1\ta\001\025:fI\0264\027BA\022%\005\031\031FO]5oO*\021\021\005\004")
public final class HelloWorld {
public static void main(String[] paramArrayOfString) {
HelloWorld$.MODULE$.main(paramArrayOfString);
}
}
HelloWorld$.class
import scala.Predef$;
public final class HelloWorld$ {
public static final HelloWorld$ MODULE$;
public void main(String[] args) {
Predef$.MODULE$.println("hello world!");
}
private HelloWorld$() {
MODULE$ = this;
}
}
结果很明显,HelloWorld通过调用HelloWorld 来 实 现 输 出 h e l l o w o r l d , 使 用 静 态 方 式 调 用 , 通 过 创 建 H e l l o W o r l d 来实现输出helloworld,使用静态方式调用,通过创建HelloWorld 来实现输出helloworld,使用静态方式调用,通过创建HelloWorld类实例来进行调用,并且HelloWorld具有静态的main方法,而HelloWorld$具有非静态的方法
5.使用class方式创建HelloWorld2
创建HelloWorld2.scala
class HelloWorld2{
def main(args:Array[String]){
println("hello world!");
}
}
编译后:scalac HelloWorld2.scala
import scala.Predef$;
import scala.reflect.ScalaSignature;
@ScalaSignature(bytes = "\006\001\r2A!\001\002\001\013\tY\001*\0327m_^{'\017\03433\025\005\031\021a\002\037f[B$\030PP\002\001'\t\001a\001\005\002\b\0255\t\001BC\001\n\003\025\0318-\0317b\023\tY\001B\001\004B]f\024VM\032\005\006\033\001!\tAD\001\007y%t\027\016\036 \025\003=\001\"\001\005\001\016\003\tAQA\005\001\005\002M\tA!\\1j]R\021Ac\006\t\003\017UI!A\006\005\003\tUs\027\016\036\005\0061E\001\r!G\001\005CJ<7\017E\002\b5qI!a\007\005\003\013\005\023(/Y=\021\005u\001cBA\004\037\023\ty\002\"\001\004Qe\026$WMZ\005\003C\t\022aa\025;sS:<'BA\020\t\001")
public class HelloWorld2 {
public void main(String[] args) {
Predef$.MODULE$.println("hello world!");
}
}
结果发现当前的HelloWorld2创建了一个非静态的main函数,所以这个HelloWorld2是无法直接执行的
6.总结
1.使用object方式创建时,会创建一个对应的类$的类,并具有非静态的main,和一个类以及一个静态的main方法;而class方式直接创建的就是一个非静态的main方法
2.object方式定义的类,可以直接执行,class方式的不能直接执行
3.使用println可以实现System.out.println
4.使用def方式定义函数,例如:def 函数名称(参数:参数类型){方法体...}
以上纯属个人见解,如有问题请联系本人!