2017-08-26 18 views
0

私はオンラインコンパイラウェブサイトを構築しています。 ファイル名とクラス名を知っているローカルシステムでプログラムを実行する。
例:MyProgram.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 ? 
+1

コードをコンパイルするだけですか、それとも実行しますか?コンパイラはメインクラスを気にしません。 (コンパイラは、信頼できないコードを実行するものよりもホストにとってはるかに安全です。適切なサンドボックスがあることを確認してください) – Thilo

+0

私はコンパイルしてユーザのコードを実行しますが、これがどのように動作するかはわかりません。 – JAGGADAKU

+0

リフレクションを使用できますコンパイルされたコードで、またはjavaファイルを解析します。ソースファイル名は、クラスと同じ名前を持つ必要はありません。 – thst

答えて

1
によって定義することができます

クラスがpublicの場合、クラスの名前はファイルの名前と同じでなければなりません。したがって、ユーザーがクラスをpublicとして宣言しないと、コードはファイルの名前に関係なく正常にコンパイルされます。

したがって、作成された.classファイルのうちどれがmainメソッドを含んでいるかを調べるだけで済みます。これを行う1つの方法は、各クラスファイルでjavapを呼び出し、出力をgrepしてstatic void mainとすることです。

クラスが公開されたである場合、これはほとんどの(すべての)既存のオンラインIDEにとって問題です。たとえば、Ideoneは公開する場合はクラス名をMainにする必要があります。

関連する問題