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编译一个字符串(从文件中读取它之后)并通过反射调用类的方法。

这里是关于如何以编程方式编译字符串的分步指南。

于 2012-05-15T14:28:53.747 回答
0

更新 Java 文件不会影响 JVM 执行的运行时指令。

当编译 Java 应用程序时,.java 源代码文件被编译成 .class 文件,其中包含字节码指令,这些指令又由 JVM 解释。当 JVM 需要一个类时,它会通过一个称为类加载器的特殊对象将适当的 .class 文件加载到内存中。

将此应用于您的示例 - 当您第一次引用 File1 类时,JVM 会将 File1 类加载到内存中。该类的内存表示将持续存在,直到类加载器被销毁或 JVM 重新启动。JVM 看不到 file1.java 类的任何更改 - 首先是因为类加载器不会重新加载定义,其次是因为在重新编译 file1.java 类之前定义不会改变。

要在运行时更改对象的行为,您可以使用反射 API,请参见此处

于 2012-05-15T14:30:52.017 回答
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 回答