在线java编译器如何工作?

时间:2017-08-26 05:20:38

标签: java jvm

我正在构建在线编译器网站。 在本地系统中执行程序,我们知道文件名和类名 例如: MyProgram.java

class MyProgram{
    public static void main(String[] args){
         System.out.println("Myprogram in local");//
    }
}
$ javac MyProgram.java
$ java MyProgram

但在线编译用户可以拥有任何类名 例如: MyProgram.java //这可以是admin

定义的任何内容
class UserProgram{
    public static void main(String[] args){
        System.out.println("users program");
    }
}

$ javac MyProgram.java  
$ java somethingthatidontknow //how do i get "users program" outpout ?

1 个答案:

答案 0 :(得分:1)

如果类是公共的,则类的名称只能与文件的名称相同。因此,如果用户没有将该类声明为public,则无论文件名如何,代码都将编译正常。

因此,您所要做的就是找出哪个创建的.class文件包含main方法。一种方法是在每个类文件上调用javap并为static void main grep输出。

请注意,当一个类 被声明为public时,这对于大多数(所有?)现有的在线IDE来说都是个问题。例如,Ideone要求您将类Main命名为公开。