0

メインファイルを実行した後、いくつかのJavaファイルが変更され、同じ実行中にそのファイルを再度実行すると、Javaファイルで行われた変更が出力に表示されないJavaでプロジェクトを開発しています

たとえば、2 つのファイルがあります。Main.java と file1.java

main.java

public static void main(string[] argv)
{

    file1 obj = new file1();
    obj.view();
        Scanner in = new Scanner(System.in);
        String x = in.nextLine();
    //before entering any value i manually updated the content of file1.java
    obj = new file1();
    obj.view();
}

file1.java (更新前)

public class file1
{

    public void view()
    {

        system.out.println("This is test code!!");
    }


}

file1.java (更新後)

public class file1
{

    public void view()
    {

        system.out.println("That was done for Testing!!");
    }


}

Output :
This is test code!!

This is test code!!
4

3 に答える 3

1

変更を確認するには、コードを再コンパイルする必要があります。

できることは、文字列を(ファイルから読み取った後)Javaでコンパイルし、リフレクションを介してクラスのメソッドを呼び出すことです。

HEREは、文字列をプログラムでコンパイルする方法に関する段階的なガイドです。

于 2012-05-15T14:28:53.747 に答える
0

サンプルに近いものを実現するために、ソース コードをコンパイルする必要はありません。

public class MyView 
{
   String the_string;
   public MyView   (String string) { the_string = string; }
   public void setString (String string) { the_string = string; }
   public void view () { system.out.println (the_string); } 
}

public static void main(string[] argv)
{

    MyView obj = new MyView("This is test code!!");
    obj.view();
        Scanner in = new Scanner(System.in);
        obj.setString (in.nextLine());
    obj.view();
} 
于 2012-05-15T14:39:32.943 に答える
0

Java ファイルを更新しても、JVM によって実行されるランタイム命令には影響しません。

Java アプリケーションをコンパイルすると、.java ソース コード ファイルは、JVM によって解釈されるバイト コード命令を含む .class ファイルにコンパイルされます。JVM がクラスを必要とする場合、クラスローダーと呼ばれる特別なオブジェクトを介して、適切な .class ファイルをメモリにロードします。

これを例に適用すると、最初にクラス File1 を参照すると、JVM は File1 クラスをメモリにロードします。このクラスのメモリ内表現は、クラスローダーが破棄されるか、JVM が再起動されるまで持続します。file1.java クラスへの変更は JVM には表示されません。1 つは、クラスローダーが定義をリロードしないため、もう 1 つは、file1.java クラスが再コンパイルされるまで定義が変更されないためです。

実行時にオブジェクトの動作を変更するには、リフレクション API を使用できます。こちらを参照してください。

于 2012-05-15T14:30:52.017 に答える