Как работает переопределить в JDB - PullRequest
0 голосов
/ 10 февраля 2019

Я предполагаю, что 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

...