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



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

我编译了如下代码

斯卡拉克 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")
     }
     }
   }
 }

它确实会创建与您的类名相同的.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
}

最新更新