Я предполагаю, что redefine
просто копирует файлы классов в память jvm (или ram?).Поскольку для меня это не работает с запущенным классом, файл класса которого я перекомпилировал.
6 class End {
7 public String getEnd() {
8 return "End";
9 }
10 }
11
12 public class Del {
13 public static void main(String[] args) {
14 (new Thread(() -> {
15 try {
16 char c = 'a';
17 while(c != 's')
18 c = (char) System.in.read();
19 System.out.println((new End()).getEnd());
20 } catch (IOException exc) {
21 System.out.println(exc);
22 }
23 })).start();
24 }
25 }
Пример действия:
d
s
End
Действие, когда я изменился Del.java
...
8 return "Another End";
...
17 while(c != 'd')
Таким образом, это действует так:
d
s
Another End
Я думал, *Another End*
будет показываться неукоснительно после того, как d
былозанесены.
Почему изменение влияет на End
класс, а не на Del
?
UPD : я знаю, это не важно, если я позвоню redefine
илине.return "End"
будет изменено на return "Another End"
в любом случае.Я хочу знать, для каких целей мне нужно redefine
, если он не переопределяет работающий код, потому что в других случаях я могу просто перекомпилировать его и указать classpath