在线Java编译器如何工作?



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

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

但是在在线编译器中,用户可以有任何类名
,例如:MyProgram.java//这可以是管理员定义的任何内容

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 ?

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

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

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

最新更新