我正在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!!
答案 0 :(得分:1)
答案 1 :(得分:0)
更新Java文件不会影响JVM执行的运行时指令。
编译Java应用程序时,.java源代码文件被编译为包含字节码指令的.class文件,而这些指令又由JVM解释。当JVM需要一个类时,它会通过一个称为类加载器的特殊对象将适当的.class文件加载到内存中。
将此应用于您的示例 - 当您第一次引用类File1时,JVM会将File1类加载到内存中。此类内存表示将持续存在,直到类加载器被销毁或JVM重新启动。对JVM不会对file1.java类进行任何更改 - 首先是因为类加载器不会重新加载定义,其次是因为定义不会更改,直到重新编译file1.java类。
要在运行时更改对象的行为,可以使用反射API,请参阅here。
答案 2 :(得分: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();
}