Scalac编译器不会创建.class文件

时间:2017-03-15 16:57:00

标签: scala

我正在尝试理解scala中的错误处理。

我编写了如下代码

scalac sampleExceptionHandling.sc

我认为它会创建一个.class文件并使用javap命令,我可以查看等效的java代码。对于某些原因,没有创建.class文件。并且在执行Scalac命令后没有抛出任何错误。

有什么建议吗?

 import java.io.FileReader
 import java.io.FileNotFoundException
 import java.io.IOException

object Demo {
  def main(args: Array[String]) {
  try {
     val f = new FileReader("input.txt")
  } catch {
     case ex: FileNotFoundException =>{
        println("Missing file exception")
     }

     case ex: IOException => {
        println("IO Exception")
     }
     }
   }
 }

1 个答案:

答案 0 :(得分:4)

它会创建.class,它与您的类名相同,而不是您的文件名。

以下是scalac sampleExceptionHandling.sc

的结果
$ ll
total 24
10909194 -rw-r--r--  1 as18  prayagupd  936 Mar 15 10:00 Demo$.class
10909193 -rw-r--r--  1 as18  prayagupd  565 Mar 15 10:00 Demo.class
10909167 -rw-r--r--  1 as18  prayagupd  378 Mar 15 09:59 sampleExceptionHandling.sc

运行班级

$ scala Demo
Missing file exception

要查看字节码,

$ javap -c Demo.class 
Compiled from "sampleExceptionHandling.sc"
public final class Demo {
  public static void main(java.lang.String[]);
    Code:
       0: getstatic     #16                 // Field Demo$.MODULE$:LDemo$;
       3: aload_0
       4: invokevirtual #18                 // Method Demo$.main:([Ljava/lang/String;)V
       7: return
}

而且,

$ javap -c Demo$.class 
Compiled from "sampleExceptionHandling.sc"
public final class Demo$ {
  public static final Demo$ MODULE$;

  public static {};
    Code:
       0: new           #2                  // class Demo$
       3: invokespecial #12                 // Method "<init>":()V
       6: return

  public void main(java.lang.String[]);
    Code:
       0: new           #20                 // class java/io/FileReader
       3: dup
       4: ldc           #22                 // String input.txt
       6: invokespecial #25                 // Method java/io/FileReader."<init>":(Ljava/lang/String;)V
       9: astore        4
      11: goto          35
      14: astore_2
      15: getstatic     #30                 // Field scala/Predef$.MODULE$:Lscala/Predef$;
      18: ldc           #32                 // String IO Exception
      20: invokevirtual #36                 // Method scala/Predef$.println:(Ljava/lang/Object;)V
      23: goto          35
      26: astore_3
      27: getstatic     #30                 // Field scala/Predef$.MODULE$:Lscala/Predef$;
      30: ldc           #38                 // String Missing file exception
      32: invokevirtual #36                 // Method scala/Predef$.println:(Ljava/lang/Object;)V
      35: return
    Exception table:
       from    to  target type
           0    14    26   Class java/io/FileNotFoundException
           0    14    14   Class java/io/IOException
}